算法基本工具(Part2).ppt
《算法基本工具(Part2).ppt》由会员分享,可在线阅读,更多相关《算法基本工具(Part2).ppt(40页珍藏版)》请在三一办公上搜索。
1、1,算法基本工具,主要内容,2.1 循环与递归2.2 算法与数据结构2.3 优化算法的数学模型,2,2.2 算法与数据结构,2.2.1 原始信息与处理结果的对应存储2.2.2 数组使信息有序化2.2.3 数组记录状态信息2.2.4大整数存储及运算,数据的逻辑结构常分为四大类:(1)集合结构(2)线性结构(3)树形结构(4)图结构(网结构),存储结构可以分为:连续存储和链式存储。连续存储又可以分为:静态存储和动态存储,1、常用的几种数据结构,顺序存储的优点:(1)方法简单,各种高级语言中都提供数组结构,容易实现。(2)不用为表示结点间的逻辑关系而增加额外的存储开销。(3)顺序表具有按元素序号随机
2、访问的特点。,2、连续存储和链式存储比较,顺序存储的缺点:(1)在顺序表中做插入删除操作时,平均移动大约表中一半的元素,因此对n较大的顺序表效率低。(2)需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置;预先分配过小,又会造成溢出。,温馨提示:链表的优缺点恰好与顺序表相反。,3、在选取存储结构时权衡因素有:,)基于存储的考虑 顺序表的存储空间是静态分配的,在程序执行之前必须明确规定它的存储规模,也就是说事先对“MAXSIZE”要有合适的设定,过大造成浪费,过小造成溢出。可见对线性表的长度或存储规模难以估计时,不宜采用顺序表;链表不用事先估计存储规模,但链表的存储密度较低.,
3、)基于运算的考虑 在顺序表中按序号访问ai的时间性能时O(1),而链表中按序号访问的时间性能O(n),所以如果经常做的运算是按序号访问数据元素,显然顺序表优于链表;)基于环境的考虑 顺序表容易实现,任何高级语言中都有数组类型,链表的操作是基于指针的,操作简单。,2.2.1 原始信息与处理结果对应存储,每一个问题中的信息往往是多方面的,在算法中一般有输入信息、输出信息和信息加工处理过程中的中间信息。那么哪些信息需要用数组进行存储,数组元素下标与信息怎么样对应等问题的确定,在很大程度上影响着算法的编写效率和运行效率。下面的例子恰当地选择了用数组存储的信息,并把题目中的有关信息作为下标使用,使算法的
4、实现过程大大简化。【例1】统计选票【例2】统计身高【例3】统计及格学生的名单【例4】统计找数字对的出现频率,【例1】某次选举,要从五个候选人(编号分别为1、2、3、4、5)中选一名厂长。请编程完成统计选票的工作。,算法设计:1)虽然选票发放的数量一般是已知的,但收回的数量通常是无法预知的,所以算法采用随机循环,设计停止标志为“-1”。2)统计过程的一般方法为:先为五个候选人各自设置五个“计数器”S1,S2,S3,S4,S5,然后根据录入数据通过多分支语句或嵌套条件语句决定为某个“计数器”累加1,这样做效率太低。现在把五个“计数器”用数组代替,选票中候选人的编号xp正好做下标,执行A(xp)=A
5、(xp)+1就可方便地将选票内容累加到相应的“计数器”中。也就是说数组结构是存储统计结果的,而其下标正是原始信息。3)考虑到算法的健壮性,要排除对15之外的数据进行统计。,10,算法描述:,11,vote()int i,xp,a6;print(“input data until input-1”);input(xp);while(xp!=-1)if(xp=1 and xp=5)axp=axp+1;else print(xp,input error!);input(xp);for(i=1;i=5;i+)print(i,number get,ai,votes);,【例2】编程统计身高(单位为厘米)
6、。统计分150154;155159;160164;165169;170174;175179及低于是150、高于是179共八档次进行。,算法设计:输入的身高可能在50250之间,若用输入的身高数据直接作为数组下标进行统计,即使是用PASCAL语言可设置上、下标的下界,也要开辟200多个空间,而统计是分八个档次进行的,这样是完全没有必要的。由于多数统计区间的大小是都固定为5,这样用“身高/5-29”做下标,则只需开辟8个元素的数组,对应八个统计档次,即可完成统计工作。,12,算法如下:,13,main()int i,sg,a8;print(“input height data until inpu
7、t-1”);input(sg);while(sg-1)if(sg179)a7=a7+1;else if(sg150)a0=a0+1;else asg/5-29=asg/5-29+1;input(sg);for(i=0;i=7;i=i+1)print(i+1,“field the number of people:”,ai);,【例3】一次考试共考了语文、代数和外语三科。某小组共有九人,考后各科及格名单如下表,请编写算法找出三科全及格的学生的名单(学号)。,14,方法一:,从语文及格名单中逐一抽出各及格学生学号,先在代数及格名单核对,若有该学号(说明代数也及格了),再在外语及格名单中继续查找,看
8、该学号是否也在外语及格名单中。若仍在,说明该号属全及格学生的学号,否则就是至少有一科不及格的。若语文及格名单中就没有某生的号,显然该生根本不在比较之列,自然不属全及格学生。方法采用了枚举尝试的方法A,B,C三组分别存放语文、代数、外语及格名单,尝试范围为三重循环:I循环,初值0,终值6,步长1 J循环,初值0,终值5,步长1 K循环,初值0,终值7,步长1 定解条件:AI=BJ=CK 共尝试7*6*8=336次。,15,16,main()int a7,b6,c8,i,j,k,v,flag;for(i=0;i=6;i=i+1)input(ai);for(i=0;i=5;i=i+1)input(b
9、i);for(i=0;i=7;i=i+1)input(ci);for(i=0;i=6;i=i+1)v=ai;for(j=0;j=5;j=j+1)if(bj=v)for(k=0;k=7;k=k+1)if(ck=v)print(v);break;,方法二:,用数组A的九个下标分量作为各号考生及格科目的计数器。将三科及格名单共存一个数组,当扫描完毕总及格名单后,凡下标计数器的值为3的就是全及格的,其余则至少有一科不及格的。该方法同样也采用了枚举尝试的方法。,17,18,main()int a10,i,xh;for(i=1;i=21;i=i+1)input(xh);axh=axh+1;for(xh=1
10、;xh=9;xh=xh+1)if(axh=3)print(xh);,【例4】统计找数字对的出现频率,19,算法说明:输入N(2N100)个数字(在0与9之间),然后统计出这组数中相邻两数字组成的链环数字对出现的次数。例如:输入:N=20 表示要输入数的数目 0 1 5 9 8 7 2 2 2 3 2 7 8 7 8 7 9 6 5 9 输出:(7,8)=2(8,7)=3 指(7,8)、(8,7)数字对出现次数分别为2次、3次(7,2)=1(2,7)=1(2,2)=2(2,3)=1(3,2)=1,算法设计:,其实并不是只有一维数组这样的数据结构可以在算法设计中有多采的应用,根据数据信息的特点,二
11、维数组的使用同样可以使算法易于实现,此题就正是如此。用10*10的二维数组(行、列下标均为0-9),存储统计结果,i行j列存储数字对(i,j)出现的次数,无需存储原始数据,用其做下标,在数据输入的同时就能统计出问题的结果。,20,21,main()int a1010,m,i,j,k1,k0;print(“How many is numbers?”);input(n);print(“Please input these numbers:”);input(k0);for(i=2;i0 and aji0);print(“(”,i,j,”)=“,aij,”,(”,j,i,”)=”,aji),2.2.2
12、数组使信息有序化,当题目中的数据缺乏规律时,很难把重复的工作抽象成循环不变式来完成,但先用数组结构存储这些地信息后,问题就迎刃而解。,22,【例1】编程将编号“翻译”成英文。例35706“翻译”成three-five-seven-zero-six。,算法设计1:1)编号一般位数较多,可按长整型输入和存储。2)将英文的“zeronine”存储在数组中,对应下标为09。这样无数值规律可循的单词,通过下标就可以方便存取、访问了。3)通过求余、取整运算,可以取到编号的各个位数字。用这个数字作下标,正好能找到对应的英文数字。4)考虑输出翻译结果是从高位到低位进行的,而取各位数字,比较简单的方法是从低位开
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 基本 工具 Part2

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