《算法设计与分析》第4章穷举法.ppt

合集下载

穷举法ppt课件

穷举法ppt课件

scanf(“%d,%d”,&n,&k);
for(i=1;i<=n;i++)
scanf(“%d”,&a[i]);
for(i=0;i>=n;i++) b[i]=1;
cmin=1000000;
while(b[0]==1)
{
for(i=1;i<=k;i++)
____s_[i_]_=_0_; ________;
4
例2.除法运算(NOIP1995初中组复赛第一题) 设有下列的除法算式:
请根据上述算式中的信息求出被除数和除数。 分析:设除数为x,被除数为y,由算式信息可知:10<=x<=99, 1000<=y<=9999,且8*x<=99,9*x>=100。因此,我们可选择枚举除 数,而被除数则可按公式y=809*x+1计算得出。
8
int link[6,2]={{1,2},{1,4},{2,5},{4,7},{5,8},{7,8}};
int b[9];
main()
{
b[1]=2;b[3]=8;b[6]=1;b[8]=7;
try;
b[1]=7;b[2]=1;b[6]=8;b[8]=2;
try;
}
void print;
{
printf(“%4d\n”,b[1]);
printf(“%d”,d[i]);
}
13
穷举法的基本思想: 穷举也叫枚举,它的基本思想是先依据题目的部分条件来确定答案
的大致范围(可能解),然后在此范围内用其余的条件对所有可能解进 行一一验证,删去那些不符合条件的解,剩下符合条件的解就是整个问 题的解

算法设计与分析第四章课件

算法设计与分析第四章课件
各活动的起始时间和 结束时间存储于数组s 和f中且按结束时间的 非减序排列

}
若被检查的活动i的开始时间Si小于最近选择 的活动j的结束时间fi,则不选择活动i,否则 选择活动i加入集合A中。


由于输入的活动以其完成时间的非减序排列, 所以算法每次总是选择具有最早完成时间的相 容活动加入集合A中。直观上,按这种方法选 择相容活动为未安排活动留下尽可能多的时间。 也就是说,该算法的贪心选择的意义是使剩余 的可安排时间段极大化,以便安排尽可能多的 相容活动。 算法的效率极高。当输入的活动已按结束时间 的非减序排列,算法只需θ (n)的时间安排n个 活动,使最多的活动能相容地使用公共资源。 如果所给出的活动未按非减序排列,可以用 θ (nlogn)的时间重排。
贪心算法的基本要素

最优子结构

当一个问题的最优解包含其子问题的最优解 时,称此问题具有最优子结构性质。问题的 最优子结构性质是该问题可用动态规划算法 或贪心算法求解的关键特征。
贪心算法与动态规划算法的差异

贪心算法和动态规划算法都要求问题具 有最优子结构性质,这是两类算法的一 个共同点。但是,对于具有最优子结构 的问题应该选用贪心算法还是动态规划 算法求解?是否能用动态规划算法求解的 问题也能用贪心算法求解?
1 i n
All 0

All 0
因此,(y1,y2,…,yn)是一个满足贪心选择性质的最优解。

然后,证明该问题具有最优子结构性质。

设(x1,x2,…,xn)是最优装载问题的一个满足贪心选择 性质的最优解,则x1=1,(x2,…,xn)是轮船载重为cw1且待装船集装箱为{2,3,…,n}时相应最优装载问 题的一个最优解。

算法分析与设计动态规划ppt课件

算法分析与设计动态规划ppt课件

5
11 5
8
8
6
V4
V5
9 4
10 2
5 11
12 t
6
多段图问题
多段图G=(V, E)是—个有向图。它具有如下特性: – 图中的结点被划分成k≥ 2个不相交的集合
V(源i 点,1≤) 和i≤t k(,汇其点中)V。1和Vk分别只有一个结点s – 图中所有的边<u,v>均具有如下性质:若u∈Vi ,
26
多段图的向后处理算法
Line procedure BGRAP(E,k,n,P)
real BCOST(n),integer D(n-1),P(k),r,j,k,n
BCOST(1)0
for j2 to n do
设r是一个这样的结点,<r,j>∈E且使BCOST(r) +c(r,j)取小值
BCOST(j)BCOST(r)+ c(r,j)
如果已作了k-1次决策,1≤k-1<n。设x1,…xk-1的最 优决策值是r1,..,rk-1,他们所产生的状态为S1,…Sk-1
10
最优化决策序列的表示
又设Xk={{rk,1,rk,2,…,rk,pk}是xk的可能值的集 合。 Sk,jk是选取rk,jk决策之后所产生的状态, 1≤jk≤pk Fk,jk 是相应于Sk,jk的最优决策序列。 因此,相应于Sk-1的最优决策序列是
23
V1
V2
V3
V4
V5
24
9
1
3
7
s1 3
26 2 77
6 5
4 3
9 4
10 2 12 t
4 11 2
5
5
11 5

《算法设计与分析》课件

《算法设计与分析》课件

常见的贪心算法包括最小生成树算法 、Prim算法、Dijkstra算法和拓扑排 序等。
贪心算法的时间复杂度和空间复杂度 通常都比较优秀,但在某些情况下可 能需要额外的空间来保存状态。
动态规划
常见的动态规划算法包括斐波那契数列、背包 问题、最长公共子序列和矩阵链乘法等。
动态规划的时间复杂度和空间复杂度通常较高,但通 过优化状态转移方程和状态空间可以显著提高效率。
动态规划算法的时间和空间复杂度分析
动态规划算法的时间复杂度通常为O(n^2),空间复杂度为O(n)。
04 经典问题与算法实现
排序问题
冒泡排序
通过重复地遍历待排序序列,比较相邻元素的大小,交换 位置,使得较大的元素逐渐往后移动,最终达到排序的目 的。
快速排序
采用分治策略,选取一个基准元素,将比基准元素小的元 素移到其左边,比基准元素大的元素移到其右边,然后对 左右两边的子序列递归进行此操作。
动态规划是一种通过将原问题分解为若干个子 问题,并从子问题的最优解推导出原问题的最 优解的算法设计方法。
动态规划的关键在于状态转移方程的建立和状态 空间的优化,以减少不必要的重复计算。
回溯算法
01
回溯算法是一种通过穷举所有可能情况来求解问题的算法设计方法。
02
常见的回溯算法包括排列组合、八皇后问题和图的着色问题等。
空间换时间 分治策略 贪心算法 动态规划
通过增加存储空间来减少计算时间,例如使用哈希表解决查找 问题。
将问题分解为若干个子问题,递归地解决子问题,最终合并子 问题的解以得到原问题的解。
在每一步选择中都采取当前状态下最好或最优(即最有利)的 选择,从而希望导致结果是最好或最优的。
通过将问题分解为相互重叠的子问题,并保存子问题的解,避 免重复计算,提高算法效率。

广教版高中信息技术 算法与程序设计第四章第二节 《for循环语句的应用——用穷举法设计程序》说课课件

广教版高中信息技术 算法与程序设计第四章第二节 《for循环语句的应用——用穷举法设计程序》说课课件

print …
Next cz Next by Next ax
教学过程
将穷举法设计程序能够合理的进行优化的重要性和必要性。
礼品问题
7
班里要举行班级聚会,要用600元班会费为50名同学
准备50份礼品进行抽奖。你要负责去购买礼品,选定了公
程序优化
仔(20元/个)、水杯(15元/个)和笔筒(10元/个)三类商品。 要求刚好用完600元买50件礼品(每种礼品至少一件),
Next a
教学过程
5
难点突破
防范黑客用穷举法破解密码的对策。 学生小组讨论,总结归纳。
右侧表格是用P4 3.0CPU本地穷举 破解密码的时间对照表,请从这些数据 中总结出穷举法破解密码所用时间与哪 些因素有关?为什么?
教学过程
5
教师对学生们的总结加以汇总完成了突破难点
难点突破
穷举法设计程序破解密码所用时间与两个因素有关:
’for-next循环:表示密码的十位a从0-9变化
For b =0 to 9 ’for-next循环:表示密码的个位b从0-9变化
If 10*a+b = mima then msgbox(“密码是”+cstr(a*10+b)) ’对于ab的每一种组合都要与随机产生的两位密码相比较
Next b Next a
For z = 1 to 48
If …… then…….
If ……then…….
Next z
Next z
Next c
Next c
Next x
Next x
For x = 1 to 28 For y =1 to 38 z=50-x-y If ……then…….
Next y Next x

算法分析与设计PPT教学课件 Algorithms Chapter 4 分治法

算法分析与设计PPT教学课件 Algorithms Chapter 4 分治法

n>1
Memory 冒泡 合并 Time
15
Example of merge sort
Example of merge sort sorting a list of random numbers
16
练习 p98-11 Tromino谜题
如何将右图中L型瓦片覆盖到一个缺了一 个方块的2n × 2n的棋盘?
//输入:两个有序数组B[0..p-1]和C[0..q-1]
//输出:非降序列数组A-0..p+q-1] i0; j0; k0; while (i<p and j<q do){
if (n>1){
copy A[0.. [n/2]-1] to B[0..[n/2]-1] ; copy A[[n/2]..n-1] to C[0..[n/2]-1]; Mergesort(B[0..[n/2]-1]);
5
分治法的抽象化控制
1. 2. 3. 4. 5. 6. 7. Divide-and-Conquer(P) if |P|≤n0 判断输入规模是否足够的小 then return(ADHOC(P))//直接解小规模的问题P 将P分解为较小的子问题 P1 ,P2 ,...,Pk for i←1 to k do yi ← Divide-and-Conquer(Pi)//递归解决Pi T ← MERGE(y1,y2,...,yk) // 合并子问题 return(T)
...... ......
I2=(n-[n/2], A[[n/2]-1…n-1])
...... ......
Ih=(1,A[0])
Ii=(1,A[1])
Ij=(1,A[m])
Ik=(1,A[n])

《算法设计与分析教学资料》第4章-PPT课件

《算法设计与分析教学资料》第4章-PPT课件
6
贪心算法的引入--找币问题
一种更简单可行的方法:
1. 先取2.5 2枚
价值2.5+2.5=5.0
余6.3-5=1.3
2. 再取1.0 1枚
价值1.0
余1.3-1=0.3
3. 不取0.5 0枚
因为0.5>0.3
4. 再取0.1 3枚
价值0.1×3=0.3
余0.3-0.3=0
5. 找零完毕。
6. 得最优解X={ 2, 1, 0, 3 } ,共需最少的硬币数6枚。
方法总结:在不超余额的前提下,每次都找最大面 值的硬币。这种找币的方法叫做贪心算法。
思考:有没有可能不是最好的方法?
7
贪心算法—描述
顾名思义,贪心算法总是作出在当前看来最好的 选择。也就是说贪心算法并不从整体最优考虑, 它所作出的选择只是在某种意义上的局部最优选 择。
当然,希望贪心算法得到的最终结果也是整体最 优的。虽然贪心算法不能对所有问题都得到整体 最优解,但对许多问题它能产生整体最优解。如 单源最短路经问题,最小生成树问题等。
新学期来临,为迎接新生,各院系都要举办迎新晚 会。时间将近,各院系在申请使用学院礼堂进行彩 排。为了提高礼堂使用率,决定白天不间断的开放, 各院系可以上报各自使用的时间区间(开始时间以 及终止时间,时间长短不限),由礼堂管理人员安 排尽可能多的院系在同一天里彩排。
请根据以下时间段尽可能多安排几个院系: [8:00,10:30), [9:00,11:30), [7:00,11:00), [11:30-14:00), [12:00,13:30) , [13:00,15:30), [15:00,16:00), [14:30,16:00), [16:00,18:00)

用穷举法解决问题课件

用穷举法解决问题课件

❖ print 该数
❖ End if ❖ Next 某整数
满足条件
任务二:实践求三位水仙花数程序
❖ a=x\100 ❖ b=(x-a*100)\10 ❖ c=x-a*100-
b*10
水仙花数代码:
Dim x, a, b,c As Integer For x = 100 To 999
a = x \ 100 b = (x - a * 100) \ 10 c= x - a * 100 - b * 10 If a^3 + b^3 + c^3 = x Then Print x End If Next x
鸡百钱问题。请用穷举法求解所有的组合方法。
百钱买百鸡
❖ ⑴确定范围 公鸡 母鸡 小鸡
⑵验证条件:
5*x +3*y+1/3*z=100 x+y+z=100
百钱百鸡代码:
Dim x, y, z As Integer For x = 1 To 20 For y = 1 To 33 For z = 1 To 100 If (5 * x + 3 * y + 1 / 3 * z = 100) And (x + y + z = 100) Then Print x, y, z End If Next z Next y Next x End Sub

10、 低 头 要 有 勇气 ,抬头 要有低 气。2021/7/302021/7/302021/7/307/30/2021 12:34:35 AM

11、 人 总 是 珍 惜为 得到。 2021/7/302021/7/302021/7/30Jul-2130-Jul-21

12、 人 乱 于 心 ,不 宽余请 。2021/7/302021/7/302021/7/30Friday, July 30, 2021

《计算机算法设计与分析》PPT第四章贪心算法资料

《计算机算法设计与分析》PPT第四章贪心算法资料
11
假设活动已按结束时间的单调非递减顺序排序 f0≤f1≤f2≤… ≤fn<fn+1
则,当i≥j时, Sij=φ。
假设存在一活动ak∈Sij,其中i≥j,则在已排的序列中 ai在aj后面。
因fi≤sk<fk≤sj<fj ,与在已排的序列中ai在aj后面的 假设相矛盾。
所以,设活动按结束时间的单调非递减顺序排序,子 问题空间被用来从sij中选择最大相容活动子集,其中 0≤i<j≤n+1,而且所有其它的sij是空的。
14
步骤2:递归地定义最优解的值 设c[i, j]为Sij中最大相容子集中的活动数。当 Sij=φ时,c[i, j] = 0。对于一个非空子集Sij, 如果ak在Sij的最大相容子集中被使用,则子问 题Sik和Skj的最大相容子集也被使用。从而:
c[i, j] = c[i, k] + c[k, j] + 1
活动安排问题:要在所给的活动集合中选出最大 的相容活动子集合。
10
用动态规划方法求解
步骤1:分析最优解的结构特征 构造子问题空间 Sij={ ak∈S: fi≤sk<fk≤sj} Sij是S中活动的子集,其中每个活动都在活动ai 结束之后开始,且在活动aj开始之前结束。 Sij包含了所有与ai和aj相容的活动,并且与不迟 于ai结束和不早于aj开始的活动相容。此外, 虚构活动a0和an+1,其中f0=0, Sn+1=∞。原 问题即为寻找S0,n+1中最大相容活动子集。
(5)约束函数constraint:检查解集合中加入一 个候选对象是否满足约束条件。例如,在找零钱 问题中,约束函数是每一步选择的货币和已付出 的货币相加不超过应找零钱。
7
贪心算法的一般框架

算法设计与分析PPT课件

算法设计与分析PPT课件

数组
输出
1 0,0,2 1 2 3
2
1,1,2 0,0,2
123
,2,2
3 1,1,2 1 2 3 1 2 3
0,0,2
2
2,1,2 0,0,2 1 3 2
,2,2
3 2,1,2 1 3 2 1 3 2
0,0,2
2
2,1,2 0,0,2
123
1 1,0,2 2 1 3
层次 栈状态 (i, k, m)
个函数是双递归函数。 Ackerman函数A(n,m)定义如下:
A(1,0)2
A(0,m)1
A(n,0)n2
m0 n2
A(n,m)A(A(n1,m),m1) n,m1
Ackerman函数无法找到非递归的定义。
28
Ackerman函数
A(1,0)2
A(0,m)1
A(n,0)n2
m0 n2
A(n,m)A(A(n1,m),m1) n,m1
P n ( x ) ( ( ( a n x ( a n 1 ) ( a n 2 ) x a n 3 ) ) x a 1 ) x a 0
T(n)n
Horner(int a[n+1],real x) { int p= a[n];
for (i=1;i<=n;i++) p=p*x+a[n-i]; return p; }
算法复杂性是算法运行所需要的计算机资源的量, 需要时间资源的量称为时间复杂性,需要的空间资源的 量称为空间复杂性。这个量应该只依赖于算法要解的问 题的规模、算法的输入和算法本身的函数。如果分别用 n、I和A表示算法要解问题的规模、算法的输入和算法 本身,而且用C表示复杂性,那么,应该有C=F(n,I,A)。 一般把时间复杂性和空间复杂性分开,并分别用T和S来 表示,则有: T=T(n,I)和S=S(n,I) 。

《算法设计与分析》第4章穷举法课件

《算法设计与分析》第4章穷举法课件

成都学院计算机系
13
4.3 排序问题中的穷举法
一、选择排序 思想:开始扫描整个序列,找到最小记录和
序列中的第一个记录交换,再从第二个记录扫 描,找到最小记录与第二个记录交换,直到扫 描第n-1个记录与第n个记录进行交换,使得整 个序列有序。
2023/8/24
成都学院计算机系
14
一般情况,第i趟排序从第i个记录开始扫描序 列,在n-i+1(1≤i≤n)个记录中找最小记录, 并与第i个记录进行交换。
}
2023/8/24
成都学院计算机系
16
w 基本语句 内层循环中的r[j]<r[index],其
执行次数为:
w 选择排序最多交换n-1次数据。
2023/8/24
成都学院计算机系
17
二、冒泡排序 一开始就扫描整个序列,在扫描的过程中两
两比较相邻记录,如反序则交换,最终将最大 记录置于最后一个记录位置,第二大记录置于 倒数第二个记录位置,重复至整个序列有序。
int Seqsearch(int r[], int n, int k) { i=n; r[0]=k; while (r[i]!=k) i--; return i; }
2023/8/24
成都学院计算机系
12
其基本语句 i>0和r[i]!=k,其执行次数
比较顺序查找方法,减少了系数。
2023/8/24
while (i>0 &&r[i]!=k) i--;
return i; }
2023/8/24
成都学院计算机系
10
其基本语句 i>0和r[i]!=k,其执行次数
缺陷:每次都要判断下标i是否越界。

算法与程序设计——穷举法的应用PPT共25页

算法与程序设计——穷举法的应用PPT共25页

1
0
















26、要使整个人生都过得舒适、愉快,这是不可能的,因为人类必须具备一种能应付逆境的态度。——卢梭

27、只有把抱怨环境的心情,化为上进的力量,才是成功的保证。——罗曼·罗兰

28、知之者不如好之者,好之者不如乐之者。——孔子
算法与程序设计——穷举法的应用
6









风景澈。源自7、翩翩新 来燕,双双入我庐 ,先巢故尚在,相 将还旧居。
8













9、 陶渊 明( 约 365年 —427年 ),字 元亮, (又 一说名 潜,字 渊明 )号五 柳先生 ,私 谥“靖 节”, 东晋 末期南 朝宋初 期诗 人、文 学家、 辞赋 家、散

29、勇猛、大胆和坚定的决心能够抵得上武器的精良。——达·芬奇

30、意志是一个强壮的盲人,倚靠在明眼的跛子肩上。——叔本华
谢谢!
25
文 家 。汉 族 ,东 晋 浔阳 柴桑 人 (今 江西 九江 ) 。曾 做过 几 年小 官, 后辞 官 回家 ,从 此 隐居 ,田 园生 活 是陶 渊明 诗 的主 要题 材, 相 关作 品有 《饮 酒 》 、 《 归 园 田 居 》 、 《 桃花 源 记 》 、 《 五 柳先 生 传 》 、 《 归 去来 兮 辞 》 等 。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2020/4/28
成都学院计算机系
-6-
(1)集合的遍历 按照元素序号的顺序依次处理每个元素。 (2)线性表的遍历 元素序号,如数组是按元素的下标来处理。 (3)树的遍历 先序、中序、后序
2020/4/28
成都学院计算机系
-7-
三、采用穷举法的原因
理论上可以解决可计算领域的各种问题。 经常用来解决一些较小规模的问题。 对一些重要问题(排序、查找、字符串匹配等) 有一些实用价值,且不受问题规模的限制。 可作为某类问题时间性能下限,进行高效算法的 比较。
第4章 穷举法
4.1 穷举法的设计思想 4.2 渐近表示法 4.3 算法分析
2020/4/28
成都学院计算机系
-2-
主要知识点
掌握好算法的评价标准; 了解影响程序运行时间的因素; 掌握算法的评价标准:时间复杂度和空间复杂度 的概念; 掌握渐近时间复杂度的几种表示方式; 掌握常见时间复杂度渐近表示之间的关系.
{ index=i; for ( j=i+1;j<=n;j++)//找最小记录 if (r[j]<r[index]) index=j; if (index!=i) r[j]>r[index]; }
}
2020/4/28
成都学院计算机系
-16-
基本语句 内层循环中的r[j]<r[index],其执 行次数为:
2020/4/28
成都学院计算机系
-18-
Void Bubblesort(int r[],int n) { for (i=1;i<=n-1;i++)
for ( j=1;j<=n-i;j++)//找最小记录 if (r[j]<r[j+1]) r[j]>r[j+1];
}
2020/4/28
成都学院计算机系
2020/4/28
成都学院计算机系
-3-
4.1 穷举法思想
一、穷举法定义
是一种简单而直接地解决问题的方法,常常 直接基于问题的描述。
是最容易应用的方法,其时间性能比较低。 通常典型的指数时间算法一般都是通过穷举 法搜索而得到的。
2020/4/28
成都学院计算机系
-5-
二、设计思想
采用的基本技术是扫描技术,即使用一定的策 略将待求解问题的所有元素依次处理一次,从 而找到问题的解。 为了避免重复试探,在基本的数据结构中采用 遍历来处理每一个元素。
2020/4/28
成都学院计算机系
-12-
其基本语句 i>0和r[i]!=k,其执行次数
n
i 1
pici
1 n
n i 1
(n i 1)
n 1 2
O(n)
比较顺序查找方法,减少了系数。
2020/4/28
成都学院计算机系
-13-
4.3 排序问题中的穷举法
一、选择排序 思想:开始扫描整个序列,找到最小记录和序 列中的第一个记录交换,再从第二个记录扫描, 找到最小记录与第二个记录交换,直到扫描第 n-1个记录与第n个记录进行交换,使得整个序 列有序。
2020/4/28
成都学院计算机系
-14-
一般情况,第i趟排序从第i个记录开始扫描序 列,在n-i+1(1≤i≤n)个记录中找最小记录, 并与第i个记录进行交换。
2020/4/28
成都学院计算机系
-15-
Void Selectsort(int r[],int n) { for (i=1;i<=n-1;i++)
2020/4/28
成都学院计算机系
-8-
4.2 查找问题中的穷举法
顺序查找 思想:从表的一端向另一端逐个将元素与给定 值进行比较,若相等,查找成功,给出该元素 的具体位置;若整个表检测完仍未找到与给定 值相等的元素,则查找失败!
2020/4/28
成都学院计算机系
-9-
假设以n个数放入数组r[1]~r[n]中,查找值k 的算法。 int Seqsearch(int r[], int n, int k) { i=n;
n1
n
1
n 1
(n i)
n(n 1)
O(n2)
i1 j i1 i1
2
选择排序最多交换n-1次数据。
2020/4/28
成都学院计算机系
-17-
二、冒泡排序 一开始就扫描整个序列,在扫描的过程中两两 比较相邻记录,如反序则交换,最终将最大记 录置于最后一个记录位置,第二大记录置于倒 数第二个记录位置,重复至整个序列有序。
最近对问题的求解过程:分别计算每一对点 之间的距离,然后找出距离最小的那一对,只 考虑i<j的那些点对。
2020/4/28
成都学院计算机系
-22-
int closetpoint(int n,int x[],int y[],int &index1,int &index2) { mindist=+∞; for (i=1;i<n;i++) for (j=i+1;j<=n;j++) { d=(x[i]-x[j])*(x[i]-x[j])+ (y[i]-y[j])*(y[i]-y[j]);
4.5 几何问题中的穷举法
最近对问题 要求找出一个包含n个点的集合中距离最近
的两个点。 应用实例:空中交通
2020/4/28
成都学院计算机系
-21-
前提假设 1.二维空间中的点,并且点的坐标形式(x,y)给 出的。 2.若Pi=(xi,yi),Pj=(xj,yj),则其间距离d:
d (xi x j )2 ( yi y j )2
-19-
基本语句 内层循环中的r[j]<r[j+1],其执行次 数为:
n1 ni 1 n1 (n i) n(n 1) O(n2 )
i1 j1
i 1
2
不足:如果整个序列已经有序,还是要直接整个 外循环执行完。 思想有没有改进的办法?有则写出算法。
2020/4/28
成都学院计算机系
-20-
while (i>0 &&r8
成都学院计算机系
-10-
其基本语句 i>0和r[i]!=k,其执行次数
n
i 1
pibi
n i 1
pici
1 n
n i 1
(n i 1)
1 n
n i1
(n i 1)
n 1 O(n)
缺陷:每次都要判断下标i是否越界。
2020/4/28
成都学院计算机系
-11-
改进方法:哨兵
将k放入到r[0]中,每次将r[1]~r[n]中的值与 r[0]进行比较。
int Seqsearch(int r[], int n, int k) { i=n; r[0]=k; while (r[i]!=k) i--; return i; }
相关文档
最新文档