NoteDeep

汉诺塔问题

目标:给定ABC三根柱子,将A柱子上从上到下从小到大套着的n个圆盘搬运到C柱子去
搬运规则:每次只能搬运一个圆盘,小圆盘一定要位于大圆盘之上
其中Hanoi(k,A,C,B)表示将柱子A上的最上面k个圆盘经由C柱子搬运到B柱子
move(k,A,C)表示将序号为k的圆盘从A柱子移动到C柱子
递归树
时间复杂度

生成排列问题

求{1,2,...,n}的所有排列
两种思路:1)位置固定,将元素插入位置,即外层循环是遍历位置的序号;2)元素顺序固定,为元素分配位置,即外层循环是遍历元素
两种思路在元素个数和位置个数一样时,效果一样;但在元素个数比位置个数大时,使用思路2)需要剪枝,使用思路1)不需要
思路1)
第一个函数是初始化函数,采用全形态形式化
第二个函数是递归函数,基于交换来为固定位置分配元素,每次回退时注意要恢复本次向下搜索所做的交换
递归树

思路2)
第一个函数是初始化函数,采用增量形式化
第二个函数是递归函数,基于赋值来为固定位置分配元素,每次回退时注意要恢复本次向下搜索所做的赋值
递归树

时间复杂度
nT(n-1)+n中的第二项n是初始化的时间代价

选择排序

伪代码
时间复杂度













评论列表

    汉诺塔问题
    生成排列问题
    选择排序