算法启蒙ABC- 5:动态规划和贪心算法
Posted B座17楼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法启蒙ABC- 5:动态规划和贪心算法相关的知识,希望对你有一定的参考价值。
丁丁猫python课程解决初高中数学、物理真实任务为特色,突出python语言的高效用法。每个课题任务完整地学习:
如何换编程的思路重新描述数学问题?
如何验证编程逻辑是否严密?
如何对程序做边界测试
*第3点实际项目中侧重对求职面试考察重点
覆盖7个大模块,每个模块文末详细技能知识点。3个班的进度相同但讲的深度不同。课程设计中将感受到对逻辑课的高度重视,弥补国内K12编程和数学课程缺少的重要一环。
- 编程和机器人穿插必数学和物理
- 全球顶级的STEM在线课程提供线下辅导
- 既能视频一对一学习,也有线下授课
状态定义:设 dp 为一维数组,其中 dp[i]的值代表 斐波那契数列第 i 个数字 。
转移方程:dp[i + 1] = dp[i] + dp[i - 1],即对应数列定义 f(n + 1) = f(n) + f(n - 1);
初始状态:dp[0] = 0, dp[1] = 1 ,即初始化前两个数字;
返回值:dp[n] ,即斐波那契数列的第 n 个数字。
空间复杂度优化:
若新建长度为 n 的 dp 列表,则空间复杂度为 O(N)。
由于 dp 列表第 i 项只与第 i-1 和第 i-2 项有关,因此只需要初始化三个整形变量 sum, a, b ,利用辅助变量 sum 使 a, b 两数字交替前进即可 。
节省了 dp列表空间,因此空间复杂度降至 O(1)
Greedy Or Not?
Computer Science Level 3 There is a list of coins : coins =
{100000,10000,1000,100,10,1} You want to know the minimum number of coins needed to achieve value V, so you asked the two best programmers in the world, Alice and Bob, and each of them proposed a different algorithm
公众号:B座17楼
def dpMakeChange(L, V, minCoins):
for cents in range(V+1):
coinCount = cents
for j in [c for c in L if c <= cents]:
if minCoins[cents-j] + 1 < coinCount:
coinCount = minCoins[cents-j] + 1
minCoins[cents] = coinCount
return minCoins[V]
Bob:Greedy
def greedyMakeChange(L, V):
minCoin = 0
for change in L:
while V >= change:
V -= change
minCoin += 1
return minCoin
List, Dictionary, Set, Tuple, Range, Enumerate, Iterator, Generator
.
Type, String, Regular_Exp, Format, Numbers, Combinatorics, Datetime
Args, Inline, Closure, Decorator, Class, Duck_Types, Enum, Exceptions
Print, Input, Command_Line_Arguments, Open, Path, Command_Execution.
CSV, JSON, Pickle, SQLite, Bytes, Struct, Array, MemoryView, D
以上是关于算法启蒙ABC- 5:动态规划和贪心算法的主要内容,如果未能解决你的问题,请参考以下文章