当前位置: 首页 > news >正文

大型网站架设需要考虑哪些问题flash asp网站

大型网站架设需要考虑哪些问题,flash asp网站,网页搭建流程,手机怎么玩wordpress序言 最近在学习python语言,语言有通用性,此文记录复习动态规划并练习python语言。 动态规划(Dynamic Programming) 动态规划是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家…

序言

最近在学习python语言,语言有通用性,此文记录复习动态规划并练习python语言。

动态规划(Dynamic Programming)

动态规划是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事以及自动化控制等领域,并在背包问题、生产经营问题、资金管理问题、资源分配问题、最短路径问题和复杂系统可靠性问题等中取得了显著的效果。

基本思想:将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。

斐波那契数列(Fibonacci sequence)

斐波那契数列,又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……在数学上,这一数列以如下递推的方法定义:F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。

先以斐波那契数列为例,了解动态规划。

def fibonacci(num):if num == 0:return 1if num == 1:return 1return fibonacci(num - 1) + fibonacci(num - 2)if __name__ == "__main__":print(fibonacci(10))

在这里插入图片描述
上述是以递归的方式实现的,然而递归方式存在以下几个缺点:

  • 1)递归调用,占用空间大;
  • 2)递归太深,容易发生栈溢出;
  • 3)可能存在大量重复计算;
结果(n-1)项(n-2)项
f(n)f(n-1)f(n-2)
f(5)f(4)f(3)
f(4)f(3)f(2)
f(3)f(2)f(1)
f(2)f(1)f(0)

以上述表格为例,可以看到在求下一个递归结果时,计算了之前已经计算出来的结果,存在重复计算项。

如果采用动态规划的方式,那么可以节省计算,采用数组暂存之前已经计算出来的结果。如下,

def fibonacci_dp(num):# 定义一个数组暂存dp结果,数组初始值为-1dp = [-1] * (num + 1)dp[0] = 1dp[1] = 1for i in range(2, num + 1):dp[i] = dp[i - 1] + dp[i - 2]return dp[num]if __name__ == "__main__":print(fibonacci_dp(10))

在这里插入图片描述

不同路径

上面的斐波那契数列是一维数组,较为简单,下面以二维数组为例。

题目描述

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?在这里插入图片描述

示例1: 输入:m = 3, n = 7 输出:28

示例2: 输入:m = 3, n = 2 输出:3
解释: 从左上角开始,总共有 3 条路径可以到达右下角。
1.向右 -> 向下 -> 向下
2.向下 -> 向下 -> 向右
3.向下 -> 向右 -> 向下
示例3:
输入:m = 7, n = 3 输出:28
示例4:
输入:m = 3, n = 3 输出:6
1 <= m, n <= 100
题目数据保证答案小于等于 2 * 10^9

python代码

class UniquePaths(object):def uniquePaths(self, m: int, n: int) -> int:""":type m: int:type n: int:rtype: int"""# 初始化一个二维数组dp = [[0] * n for _ in range(m)]for i in range(m):dp[i][0] = 1for j in range(n):dp[0][j] = 1for i in range(1, m):for j in range(1, n):dp[i][j] = dp[i - 1][j] + dp[i][j - 1]return dp[m - 1][n - 1]if __name__ == "__main__":demo = UniquePaths()print(demo.uniquePaths(7, 3))

在这里插入图片描述

最小路径和

题目描述

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:一个机器人每次只能向下或者向右移动一步。

在这里插入图片描述

示例1:
输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。
示例2:
输入:grid = [[1,2,3],[4,5,6]]
输出:12
提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 100

python代码

class MinPathSum(object):def minPathSum(self, grid):""":type grid: List[List[int]]:rtype: int"""row = len(grid)column = len(grid[0])# 定义dp[i][j]为到(i,j)处的最小路径和dp = [[0] * column for _ in range(row)]dp[0][0] = grid[0][0]# 第0行j列for j in range(1, column):dp[0][j] = dp[0][j - 1] + grid[0][j]# 第i行0列for i in range(1, row):dp[i][0] = dp[i - 1][0] + grid[i][0]# 非第0行或第0列for i in range(1, row):for j in range(1, column):dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]return dp[row - 1][column - 1]if __name__ == "__main__":demo = MinPathSum()grid = [[1, 3, 1], [1, 5, 1], [4, 2, 1]]print(demo.minPathSum(grid))

在这里插入图片描述

零钱兑换

题目描述

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。

计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。

你可以认为每种硬币的数量是无限的。

示例 1:
输入:coins = [1, 2, 5], amount = 11
输出:3
解释:11 = 5 + 5 + 1
示例 2:
输入:coins = [2], amount = 3
输出:-1
示例 3:
输入:coins = [1], amount = 0
输出:0
提示:
1 <= coins.length <= 12
1 <= coins[i] <= 231 - 1
0 <= amount <= 104

python代码

class CoinChange(object):def coinChange(self, coins: list[int], amount: int) -> int:""":type coins: List[int]:type amount: int:rtype: int"""# 状态转移方程dp(i) = min(dp(i-Cj)) + 1,Cj为货币面值"""i<0  忽略i==0 dp[0] = 0i==1 dp[1] = min(dp[1-1], dp[1-2], dp[1-5]) + 1 = 1i==2 dp[2] = min(dp[2-1], dp[2-2], dp[2-5]) + 1 = 1i==3 dp[3] = min(dp[3-1], dp[3-2], dp[3-5]) + 1 = 2i==4 dp[4] = min(dp[4-1], dp[4-2], dp[4-5]) + 1 = 2... ..."""dp = [0] * (amount + 1)dp[0] = 0for i in range(1, amount + 1):mini = int(1e9)for coin in coins:if i >= coin:res = dp[i - coin]if 0 <= res < mini:mini = resdp[i] = mini + 1 if mini < int(1e9) else -1if amount < 1:return 0return dp[amount]if __name__ == "__main__":demo = CoinChange()coins = [1, 2, 5]amount = 11print(demo.coinChange(coins, amount))

在这里插入图片描述

http://www.yayakq.cn/news/41006/

相关文章:

  • 免备案的网站网络设计
  • 广东深圳电子厂网站seo优化软件
  • 流行网站开发框架中国移动idc建设网站
  • 在哪做网站关键词2013年建设工程发布网站
  • 石家庄新钥匙网站网页设计美工培训班
  • 东莞横沥网站制作嘉兴模板建站定制
  • 做视频网站需要什么空间吗为什么做的网站有的有弹窗有的没有
  • 运河网站制作中国专利申请网官网
  • 学院网站建设通知重庆企业网站备案要多久时间
  • 网站的架设做网站实现发送信息功能
  • 怎样制作一个个人网站node.js做企业网站
  • 扬州做网站多少钱做枸杞的网站
  • wordpress柚子皮主题抖音seo优化
  • seo网站内容优化有哪些深圳设计网站的公司
  • 搜索引擎怎么收录网站短视频运营岗位职责
  • 什邡市建设局网站wordpress 分类做导航栏
  • 专注企业网站建设久治县网站建设公司
  • 网站流量 龙优化软件上海网络维护哪个质量好
  • 学校的网站开发过程凡客诚品官网疑似关闭
  • 企业网站 制作网站认证值不值得做
  • 网站建设开票项目是什么通过apache建设网站
  • 爱网站推广优化大型网络规划设计方案
  • 嘉定个人网站建设装修网站平台排行榜
  • 有关网站建设的论文万户网络技术
  • 使用asp.net制作网站的整体过程网络营销软件站
  • 机关网站建设的请示潍坊建设局网站
  • 学设计的网站都有哪些设计公司企业定位
  • 吉安做网站的公司建筑网结构
  • 如何规避电子政务门户网站建设教训珠海网站品牌设计公司哪家好
  • 徐州网站制作报价丽之鑫科技网站后台怎么做