《算法优化技巧》PPT课件.ppt
《《算法优化技巧》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《算法优化技巧》PPT课件.ppt(31页珍藏版)》请在三一办公上搜索。
1、1,算法设计与分析,Design and Analysis to Algorithms,2,3.从算法到实现-算法基本技巧举例,a.算术运算的妙用例1.2 开灯问题b.巧用“标志量”例1.3 判定输入n个数据互不相等例1.4 冒泡排序c.信息数字化例1.5 警察抓小偷d.学会找规律例1.6 数组移位,3,a.算术运算的妙用-例1.2开灯问题,算术运算:加减乘除。,例1.2 开灯问题从前,有从1到n依次编号的n个同学和n 盏灯。1号同学将所有的灯都关掉;2号同学将编号为2的倍数的灯都打开;3号同学则将编号为3的倍数的灯作相反处理(该号灯如打开的,则关掉;如关闭的,则打开);以后的同学都将自己编号
2、的倍数的灯,作相反处理。问:经n个同学操作后,哪些灯是打开的?,4,问题分析:1)用数组表示某种状态,这里定义有n个元素的a数组,它的每个下标变量ai视为一灯,i表示其编号。ai=1表示灯处于打开状态,ai=0表示灯处于关闭状态。,此用法也称为“乒乓开关”。简化逻辑表达式、减少条件判断,2)实现将第i 灯作相反处理的操作:条件语句if表示:if ai=1 ai=0;if ai=0 ai=1;,通过算术运算更简练、逼真:ai=1-ai。,a.算术运算的妙用-例1.2问题分析/建模,5,a.算术运算的妙用-例1.2-算法设计,int a1000;,输入n的数值;,关闭所有灯,即a1an置为0;,第
3、2个学生-第n个学生(学生i)进行操作:,操作对象:数组a,灯编号含因数i,即ai*k;,操作:ai*k=1-ai*k;,输出灯的开关状态。,6,建立一个充分大的数组int a1000;输入n的数值;关闭所有灯,即a1an置为0;第2-第n个学生(每个学生i)进行操作:操作对象:数组a,灯编号含因数i,即ai*k操作:ai*k=1-ai*k;输出灯的开关状态。,void main()int n,a1000,i,k;scanf(%d,翻译,a.算术运算的妙用-例1.2-算法设计/实现,7,b 巧用“标志量”-例1.3-问题分析,例2.2 判定输入n个数据互不相等。,问题分析/算法设计:完全比较一
4、遍需要n-1+n-2+n-3+1=n*(n-1)/2次比较。双重循环;通过引入标志量记录数据是否有重复的情况,相当于整合每趟循环中的比较结果。,8,建立一个充分大的数组;,标志量flag=1;,输入n个数,保存在数组的前n个元素;,从第1个第n-1个(每个元素i)操作,与第i+1第n元素(每个元素j)比较,若相等则标志量置0,循环中断;,若flag=1,则无重复;反之,有重复。,b 巧用“标志量”-例1.3-算法设计,9,b 巧用“标志量”-例1.3 实现,void main()int a100,i,j,flag,n;scanf(%d,10,例1.4冒泡排序,排序过程,1、比较第一个记录与第二
5、个 记录,若关键字为逆序则交换;然 后比较第二个记录与第三个记录;依次类推,直至第 n-1 个记录和第 n 个记录比较为止第一趟冒泡 排序,结果关键字最大的记录被安 置在最后一个记录上。,2、对前 n-1 个记录进行第二 趟冒泡排序,结果使关键字次大的 记录被安置在第 n-1 个记录位置。,3、重复上述过程,直到“在 一趟排序过程中没有进行过交换记 录的操作”为止。,第 一 趟 排 序,49,38,49,97,76,97,97,13,97,97,27,97,97,49,97,38 49 65 76 13 27 49 97,38 49 65 13 27 49 76,第 二 趟 排 序,38 49
6、 13 27 49 65,第 三 趟 排 序,38 13 27 49 49,第 四 趟 排 序,13 27 3849,第 五 趟 排 序,13 27 38,第 六 趟 排 序,for(j=1;j n;j+)if(r j+1 r j)r j r j+1;,for(j=1;j n-1;j+)if(r j+1 r j)r j r j+1;,for(i=n;i 1;i-),i;,while(i 1),/while,i=n;,i=k;,Void BubbleSort(SqList&L),冒泡排序算法,k=j;/交换的位置,k=1;,11,c 信息数字化-例1.5 警察抓小偷,一些表面上看是非数值的问题,
7、但经过进行数字化后,就可方便进行算法设计。,例1.5 警察抓小偷警察局抓了a,b,c,d四名偷窃嫌疑犯,其中只有一人是小偷。审问中 a说:“我不是小偷。”b说:“c是小偷。”c说:“小偷肯定是d。”d说:“c在冤枉人。”现在已经知道四个人中三人说的是真话,一人说的是假话,问到底谁是小偷?,12,c 信息数字化-例1.5-问题分析,问题分析:可通过循环,每次假设一名嫌疑犯为小偷,代入问题系统,检验是否只有一句假话。,这种让所有可能解都进行检验,以求得真解的方法称为“枚举尝试法”,也是“蛮力法”、“暴力法”。,为方便设计程序,将a,b,c,d将四个人进行编号,号码分别为1,2,3,4。,13,c
8、信息数字化-例1.5-算法设计,算法设计:用变量x存放小偷的编号,则x的取值范围从1取到4,就假设了他们中的某人是小偷的所有情况。四个人所说的话就可以分别写成:,a说的话:x1b说的话:x=3c说的话:x=4d说的话:x4或not(x=4),注意:在x的枚举过程中,当这四个逻辑式的值相加等于3时,即表示“四个人中三人说的是真话,一人说的是假话”。,if(x!=1)+(x=3)+(x=4)+(x!=4)=3),14,c 信息数字化-例1.5-实现,#include stdafx.hvoid main()int x;for(x=1;x=4;x=x+1)if(x!=1)+(x=3)+(x=4)+(x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法优化技巧 算法 优化 技巧 PPT 课件

链接地址:https://www.31ppt.com/p-5565429.html