算法设计与分析-第3章-蛮力法
- 格式:ppt
- 大小:483.00 KB
- 文档页数:3
精品文档精品文档算法分析与设计复习大纲第1章 绪论 考点:1、 算法的5个重要特性。
个重要特性。
答:输入、输出、有穷性、确定性、可行性2、 掌握扩展递归技术和通用分治递推式的使用。
掌握扩展递归技术和通用分治递推式的使用。
扩展递归技术:扩展递归技术:通用分支递归式:通用分支递归式:5、使用扩展递归技术求解下列递推关系式 (1)(2)第3章 蛮力法1、掌握蛮力法的设计思想:掌握蛮力法的设计思想:蛮力法依赖的基本技术——扫描技术,即采用一定的策略将待求解问题的所有元素依次处理一次,从而找出问题的解;关键——依次处理所有元素。
依次处理所有元素。
2、蛮力法的代表算法及其时间复杂度:蛮力法的代表算法及其时间复杂度:顺序查找,O(n)串匹配(BF O(n*m) ,KMP O(n+m)选择排序,O(n2)冒泡排序,O(n 2)生成排列对象(排列问题),O(n!)生成子集(组合问题),O(2n)0/1背包背包 属于组合问题。
属于组合问题。
任务分配,哈密顿回路,TSP问题问题属于排列问题。
属于排列问题。
3、 掌握BF 和KMP 算法的原理,能够画出比较过程。
要求给出一串字符串,能够求出对应的next 数组,并能使用KMP 算法进行比较匹配。
算法进行比较匹配。
4、 掌握选择排序和冒泡排序算法描述和时间复杂性,要求能够写出伪代码。
选择排序选择排序算法描述:选择排序开始的时候,扫描整个序列,找到整个序列的最小记录和序列中的第一记录交换,从而将最小记录放到它在有序区的最终位置上,然后再从第二个记录开始扫描序列,找到n-1个序列中的最小记录,再和第二个记录交换位置。
一般地,第i 趟排序从第i 个记录开始扫描序列,在n-i+1个记录中找到关键码最小的记录,并和第i 个记录交换作为有序序列的第i 个记录。
个记录。
时间复杂性:O(n 2) 伪代码:伪代码:冒泡排序冒泡排序算法描述:冒泡排序开始的时候扫描整个序列,冒泡排序开始的时候扫描整个序列,在扫描过程中两两比较相邻记录,在扫描过程中两两比较相邻记录,在扫描过程中两两比较相邻记录,如果反序则交换,如果反序则交换,最终,最大记录就能被“沉到”了序列的最后一个位置,第二趟扫描将第二大记录“沉到”了倒数第二个位置,重复上述操作,直到n-1趟扫描后,整个序列就排好序了。
实验三蛮力法排序(四号黑体)【一】实验目的(小四黑体)1.采用蛮力法实现序列排序;2.分析各种方法的优缺点。
【二】实验内容(小四黑体)1.采用蛮力排序算法对序列排序;2.编程实现选择排序与冒泡排序;3.分析比较2种算法的时间复杂度;4.试着改进冒泡排序,使算法在序列达到有序状态时停止运行。
【三】实验步骤(代码、结果)(小四黑体)#include <stdio.h>#include <stdlib.h>#include <math.h>void SelectionSort(int a[],int n){int i,j,t,temp;for(i=0; i<=n-2; i++){t=i;for(j=i+1; j<=n-1; j++){if(a[j]<a[t]){t=j;}}temp=a[i];a[i]=a[t];a[t]=temp;}}void BubbleSort(int a[],int n){int i,j,temp;for(i=0; i<=n-2; i++){for(j=0; j<=n-2-i; j++){if(a[j+1]<a[j]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}}void BubbleSort1(int a[],int n){int falg=1;int i,temp;while(falg){falg=0;for(i=0;i<n;i++){if(a[i+1]<a[i]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;falg=1;}}n--;}}void print(int a[],int n){int i;for(i=0; i<n; i++){printf("%d ",a[i]);}}int main(){printf("学号:Z09315221 姓名:谭召\n"); int a[10]= {10,20,15,17,13,9,5,4,2,7}; //int a[10]= {1,2,3,4,5,6,7,8,9,1};SelectionSort(a,10);BubbleSort(a,10);BubbleSort1(a,10);print(a,10);return 0;}【四】实验结果分析(小四黑体)选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。