python - 使用 python 进行动态编程的优化帕斯卡三角形
问题描述
def pascal(row, col):
if col == 1 or col == row:
return 1
else:
return pascal(row - 1, col) + pascal(row - 1, col - 1)
就时间复杂度而言,上述递归实现是指数级的。有了动态规划的知识,我们怎么写一个函数fast_pascal(row, col)?该函数应该接受一个整数行和一个整数 col 并返回 (row, col) 中的值。注意:row 和 col 从 1 开始。
这是我试过的,
def fast_pascal(row,col):
dynamic = [[1]+[1]*(col-1)for i in range(row)]
for row_ind in range(1,row):
for col_ind in range(1,col):
dynamic[row_ind][col_ind] = dynamic[row_ind-1][col_ind] + dynamic[row_ind-1][col_ind-1]
return dynamic[row-1][col-1]
该代码给出了错误的结果。它应该是,
fast_pascal(3,2) == 2
fast_pascal(4,3) == 3
fast_pascal(500,3) == 124251
解决方案
def fast_pascal(row,col):
dynamic = [[1]+[0]*(col-1)for i in range(row)]
for row_ind in range(1,row):
for col_ind in range(1,col):
dynamic[row_ind][col_ind] = dynamic[row_ind-1][col_ind] + dynamic[row_ind-1][col_ind-1]
return dynamic[row-1][col-1]
推荐阅读
- matlab - 使用步长和窗口大小重塑向量
- ignite - 点燃缓存:可序列化与可外部化
- c# - Xamarin 表单 - 将 XAML 转换为 c#
- uber-api - Uber API 在 /partners/trips 上获得 404,如何获得更多见解
- c# - 对反向后的 BinarySearch 感到困惑
- javascript - 对地图中的数据进行字符串化?
- c++ - 语法“ContextRegistrar_##ContextType”的含义
- performance - Powershell 性能
- mysql - 如何获得总用户平均时间超过 7 天
- python - 如何将 Google Colab 连接到 Cassandra?