Python贪婪算法之Python算法题实战 -《完美的代价》

Python022

Python贪婪算法之Python算法题实战 -《完美的代价》,第1张

最近也没什么事可做,就在备赛蓝桥杯(Python).蓝桥杯主要考察的是算法题目.所以我也在网上找了些资源刷题,昨天当我刷到《完美的代价》这道题目的时候,我就被卡住了.怎么想也想不通,就连解题代码也看不懂.更 搞笑 的是,昨天晚上我睡觉的时候,就在思考这道题目,结果不到一分钟,我就入睡了...

今天起床后,我就在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二级考试内容并不难,总体上通过率还是很高的,通过后会有合格和优秀之分,想要达到优秀会有一定难度。