今天起床后,我就在CSDN里面找寻思路,有些博主提到,《完美的代价》需要用到贪心算法,但是我也没正经学过相关的算法,所以就去研究了一下贪心算法,发现这个算法还有点意思呢
贪心算法并不是一个具体的算法,而是一种算法的思想,或者说是解决问题的一种思路
要想弄明白贪心算法,可以从这两个关键点入手:
贪心算法最大的特点,就是在每一步中取最优化的解,不会回溯处理。这样的策略,自然在执行速度上更快,但是因为这种方法的短视。会导致得的解并不是真正的全局最优解,但是贪心算法得到的依然是一个近似最优解
问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高
通俗解释:假如你有一个只能承重100的背包,你往里面装一些重量和价值不等的东西,怎样才可以让你的背包中的价值最大
这个问题中就是关键在于,每个转入背包的东西,只能是被装入背包和不被装入背包两种状态,可以用0-1表示。所以叫0-1背包问题。其二,就是这个问题的两个限定。第一,背包的边界是明确,它只能承重那么多东西。第二,东西的边界是明确的,你只有那么一些东西可以选择
故而,这个问题其实有三种策略可以选择:
这三种策略中,策略一看起来最好的策略
但是,策略一的模糊化太大,需要根据特殊的情况,做出特殊的改变
策略二和策略三相同,本身上并没有太多不同。只是二者的视角不同
我们了解贪心算法后,再来看看这道算法题吧
回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
交换的定义是:交换两个相邻的字符
例如mamad
第一次交换 ad : mamda
第二次交换 md : madma
第三次交换 ma : madam (回文!完美!)
第一行是一个整数N,表示接下来的字符串的长度(N
因为你的代码里每次递归调用fib都重新生成了memo
没有起到“备忘录”的作用
应该让memo定义在fib外,这样每次递归就可以利用之前已经计算过的结果了
具体代码如下所示:
def fib(n):
memo = [0 for x in range(n + 1)]
return helper(memo, n)
def helper(memo, n):
if memo[n] >0:
return memo[n]
if n <= 2:
memo[n] = 1
else:
memo[n] = helper(memo, n - 1) + helper(memo, n - 1)
return memo[n]
print(fib(100))
python3编译通过,fib(100)运行结果为:
计算机二级python的考试题型有单项选择题、基本编程题、简单应用题和综合应用题四个模块,分值分别为40分,18分,24分和18分,及格分数为60分,每一场考试有3套题,一般为随机分配。
1、单项选择题
(1)1~10题主要考察公共基础知识,即教材上的概念(我们那时教python时有配套的课本,考二级的时候概念题基本在这上面都能找到答案);
(2)11~40题考查python相关内容,基本上教材上教的算法都会考到,具体有列表,集合、保留字、第三方库等,题目难易都有,且同一套题不同考生的题目顺序也不一样。
2、基本编程题
该部分为填空题,考生需要根据给出的程序框架把内容补充完整,并且我们当时考试的时候是可以切换到python编码页面进行验算的,这一模块只要好好学基本上都能填对。
3、简单运用题
这一模块有两道题,其中一道为turtle(三套题都有考),以补全代码的形式出现,即在不修改系统给出的代码的情况下将代码补齐,另一道不同套卷考察的内容不同,我那时候考察的是函数。
4、综合应用题
一般是文件管理,分词排序、文件读写等,相比起前面的题目会有些难度。
总结:其实python二级考试内容并不难,总体上通过率还是很高的,通过后会有合格和优秀之分,想要达到优秀会有一定难度。