算法设计与分析重要方法举例
一、蛮力法
1.选择排序:扫描整个列表,找到它的最小元素,然后和第一个元素进行交换,将最小元素放在它在有序表中的最终位置上
C(n)=n(n-1)/2
2.字符串匹配:比较次数为n-m+1,其中n代表文本长度,m代表模式字符串长度
3.冒泡排序:比较表中的相邻元素,如果是逆序,则交换它们的位置上
C(n)=n(n-1)/2
二、减治法
1.插入排序:从右到左扫描有序的子数组,直到遇到第一个小于等于A[n-1]的元素,然后将A[n-1]插在该元素的后面(A[n-2]为一个有序数组)
2.折半查找:比较查找键K和数组中间元素A[m]来完成
C(n)=o(logn)
3.三种形式:
(1)减常数因子;
(2)减一个常量;
(3)减可变规模。
三、分治法
1.合并排序:对于一个需要排序的数组A[0…n-1],合并排序将它一分为二,并对每个子数组递归排序,合并
C(n)=(nlogn)
2.快速排序:按照元素的值对它们进行划分
四、变治法
1.三种变换方式:
(1)将问题变为一个更简单或方便的实例——实例化简(如预排序,高斯消去法);
(2)变换同样的实例为不同的表现——改变表现(AVL树,多路查找树);
(3)变换为另一个问题(这种问题的算法是已知的)的实例——问题化简(堆排序等)。