21年9月18日——算法学习笔记
时间复杂度:略
空间复杂度:是指用来评估算法占用内存空间大小的指标
比如算法使用了几个变量,那么空间复杂度是O(1);使用了长度为n的一维列表,O(n);使用了m行n列的二维列表,O(mn)。
递归:有两个特点,调用自身并且有结束条件。
递归的经典例子,汉诺塔。
假设n == 3,三个柱子a, b, c,大中小 三个方块,步骤就是:小块放在c,中块放在b,小块从c放在b,所以小和中都在b了(n-1个圆盘从a经过c移动到b),然后把大块放在c(把第n个从a移动到c),然后把中小块从b放到c(把n-1个小圆盘从b经过a移动到c)。
代码:
def hanoi(n, a, b, c):
if n > 0:
hanoi(n - 1, a, c, b)
print('从%s移动到%s' %(a, c))
hanoi(n - 1, b, a, c)
hanoi(2, 'A', 'B', 'C')
n表示圆盘数量,a,b,c表示从左到右三个柱子。递归必须要设定结束条件n>0,设定输入为n,那么第一条就要一直跳到n1的那一层,然后再print(a->b),这里要注意你调用的是 hanoi(n - 1, a, c, b),所以柱子的顺序变了。然后我们还是n1,打印后第一层结束,然后跳回到第二层,也就是n==2,这时候第一段语句hanoi(n - 1, a, c, b),已经过了,所以又打印,注意这个时候是跳回,所以执行的是hanoi(n, a, b, c):,所以是print(a->c),然后调用一次hanoi(1, b, a, c),所以print(b->c)。一次往后面推。