暴力递归: 1,把问题转化为规模缩小了的同类问题的子问题 2,有明确的不需要继续进行递归的条件(base case) 3,有当得到了子问题的结果之后的决策过程 4,不记录每一个子问题的解 动态规划 1,从暴力递归中来 2,将每一个子问题的解记录下来,避免重复计算 3,把暴力递归的过程,抽象成了状态表 ...
分类:
编程语言 时间:
2019-08-18 00:20:14
阅读次数:
226
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 —— ...
分类:
其他好文 时间:
2019-08-18 00:18:45
阅读次数:
98
函数递归及面向过程编程 一、函数递归 1.1什么是递归 递归就是函数调用函数本身,然后有结束条件。 一般解决无法求解但不断靠近的值,比如利用二分法找具体的数字,汉诺塔等 让我们举个栗子,比如要实现0 99的和,用while循环为: 以上就是一个递归函数,他其实在不断调用自身,同时他又一个结束条件就是 ...
分类:
其他好文 时间:
2019-08-14 17:21:45
阅读次数:
84
14.1 14.2 汉诺塔 14.3 动态规划 14.4 kmm算法 14.5 贪心算法 14.6普利姆算法 14.7 14.8 14.9 弗洛伊德 14.10 马踏棋盘 ...
分类:
编程语言 时间:
2019-08-09 23:15:07
阅读次数:
148
# 汉诺塔 a = "A" b = "B" c = "C" def hano(a, b, c, n): if n == 1: print("{} --> {}".format(a, c)) if n == 2: print("{} --> {}".format(a, c)) print("{} --... ...
分类:
编程语言 时间:
2019-08-06 00:54:57
阅读次数:
94
Problem Description n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。由于发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱子从下往上的大小仍保持如下关系 : n=m+p+q a1>a2>...>amb1>b2>... ...
分类:
其他好文 时间:
2019-07-31 20:23:45
阅读次数:
100
汉诺塔问题比较经典,这里修改--下游戏规则: 现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。 求当塔有N层的时候,打印最优移动过程和最优移动总步数。 在走出最少步数过程中的任何时刻,四个动作中只有一个动作不违反小压大和相邻不可逆原则(相邻的两次操作不互为 ...
分类:
其他好文 时间:
2019-07-30 16:00:19
阅读次数:
86
定义g[i][j]表示i个盘子在j柱上最终会移到哪个柱子上,f[i][j]表示相对应的所需步数。考虑转移,令k=g[i-1][j],第k根柱子最上面一个盘子在上一局已经移动6-j-k,因此这一步一定是将最大的盘子移到,总共移动f[i-1][j]+1步。再移动f[i-1][k]步,如果g[i-1][j ...
分类:
其他好文 时间:
2019-07-28 11:00:31
阅读次数:
71
【问题】 汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。求当塔有N层的时候,打印最优移动过程和最优移动总步数。例如,当塔数为两层时,最上层的塔记为1,最下层的塔记为2,则打印:Move 1 from left t ...
分类:
编程语言 时间:
2019-07-11 20:16:31
阅读次数:
140