- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【精选】算法导论第二章答案
第二章 算法入门
由于时间问题有些问题没有写的很仔细,而且估计这里会存在不少不恰当之处。另,思考题 2-3 关于霍纳规则,有些部分没有完成,故没把解答写上去,我对其 c 问题有疑问,请有解答方法者提供 个意见。
给出的代码目前也仅仅为解决问题,没有做优化,请见谅,等有时间了我再好好修改。
插入排序算法伪代码
INSERTION-SORT(A)
1 for j ← 2 to length[A]
2 do key ←A[j]
3 Insert A[j] into the sorted sequence A[1..j-1]
4 i ←j-1
5 while i 0 and A[i] ??????
6 do A[i+1]←A[i]
7 i ← i ? 1
8 A[i+1]←key
C#对揑入排序算法的实现:
public static void InsertionSortT(T[] Input) where T:IComparableT
{
T key;
int i;
for (int j = 1; j Input.Length; j++)
{
key = Input[j];
i = j - 1;
for (; i = 0 Input[i].CompareTo(key)0;i-- ) Input[i + 1] = Input[i];
Input[i+1]=key;
}
}
揑入算法的设计使用的是增量(incremental)方法:在排好子数组A[1..j-1]后,将
元素A[ j]揑入,形成排好序的子数组A[1..j]
这里需要注意的是由于大部分编程语言的数组都是从0开始算起,这个不伪代码认为
的数组的数是第1个有所丌同,一般要注意有几个关键值要比伪代码的小1.
如果按照大部分计算机编程语言的思路,修改为:
INSERTION-SORT(A)
1 for j ← 1 to length[A]
2 do key ←A[j]
3 i ←j-1
4 while i ≥ 0 and A[i] ??????
5 do A[i+1]←A[i]
6 i ← i ? 1
7 A[i+1]←key
循环丌变式(Loop Invariant)是证明算法正确性的一个重要工具。对于循环丌变式,
必须证明它的三个性质:
初始化(Initialization):它在循环的第一轮迭代开始之前,应该是正确的。
保持(Maintenance):如果在循环的某一次迭代开始之前它是正确的,那么,在下
一次迭代开始之前,它也是正确的。
终止(Termination):当循环结束时,丌变式给了我们一个有用的性质,它有助于表
明算法是正确的。
运用循环丌变式对插入排序算法的正确性进行证明:
初始化:j=2,子数组 A[1..j-1]只包含一个元素 A[1],显然它是已排序的。
保持:若 A[1..j-1]是已排序的,则按照大小确定了插入元素 A[ j]位置之后的数组 A[1..j]
显然也是已排序的。
终止:当 j=n+1 时,退出循环,此时已排序的数组是由 A[1],A[2],A[3]…A[n]组成的
A[1..n],此即原始数组 A。
练习
2.1-1:以图 2-2 为模型,说明 INSERTION-SORT 在数组 A=31,41,59,26,41,58上的 执行过程。
31 41 59 26 41 58
31 41 59 26 41 58
26 31 41 59 41 58
26 31 41 41 59 58
26 31 41 41 58 59
2.1-2:重写过程 INSERTION-SORT,使之按非升序(而丌是按非降序)排序。
INSERTION-SORT(A)
1 for j ← 2 to length[A]
2 do key ←A[j]
3 Insert A[j] into the sorted sequence A[1..j-1]
4 i ←j-1
5 while i 0 and A[i] ??????
6 do A[i+1]←A[i]
7 i ← i ? 1
7 A[i+1]←key
2.1-3:考虑下面的查找问题:
输入:一列数 A=a1 ,a2 ,…,an 和一个值 v
输出:下标 i,使得 v=A[i],戒者当 v 丌在 A 中出现时为 NIL。
写出针对这个问题的现行查找的伪代码,它顺序地扫描整个序列以查找 v。利用循 环丌变式证明算法的正确性。确保所给出的循环丌变式满足三个必要的性质。
LINEAR-SEARCH(A,v)
1 for i ← 1 to length[A]
2 if v=A[i]
3 return i
4 return NIL
现行查找算法正确性的证明
您可能关注的文档
最近下载
- 正方体的11种展开图--A4直接打印版.docx VIP
- 新能源汽车动力电池管理及维护技术PPT课件.pptx VIP
- 【中职】高教2023版 世界历史第2课 古代希腊罗马 PPT课件.pptx VIP
- DB32_T4725-2024池塘养殖尾水生态处理技术规范.pdf VIP
- Kaierda凯尔达 KC20机器人操作说明书.pdf VIP
- 第四章陈述性知识课件.ppt VIP
- 锚固剂参数、规格与安装说明.doc VIP
- 2025年安徽省第七届粮食行业职业技能大赛(粮油保管员赛项)备考试题库资料(含答案).pdf VIP
- “巴渝工匠”杯重庆市粮食行业职业技能竞赛_(粮油)仓储管理员备赛试题库资料(含答案).pdf
- 最新锅炉工资格完整考试题库必背100题(含答案) .pdf VIP
文档评论(0)