- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3三分治算法习题参考答案
第三章 分治算法习题
1、编写程序实现归并算法和快速排序算法
参见后附程序
2、用长为100、200、300、400、500、600、700、800、900、1000的10个数组的排列来统计这两种算法的时间复杂性。
有些同学用的微秒us
用s可能需要把上面的长度改为10000,……,100000,都可以
大部分的结果是快速排序算法要比归并算法快一些。
3、讨论归并排序算法的空间复杂性。
解析:归并排序由分解与合并两部分组成,如果用表示归并排序所用的空间。
则由
MergeSort(low, mid) //将第一子数组排序
MergeSort(mid+1, high) //将第二子数组排序
Merge(low, mid, high) //归并两个已经排序的子数组
则
递归推导得
又由存储数组长度为 ,则有
因此,空间复杂度为。
4、说明算法PartSelect的时间复杂性为
证明:提示:假定数组中的元素各不相同,且第一次划分时划分元素是第小元素的概率为。因为Partition中的case语句所要求的时间都是,所以,存在常数,使得算法PartSelect的平均时间复杂度可以表示为
令取试证明。
证明:令表示n个元素的数组A中寻找第k小元素的平均时间复杂度,因的时间复杂度是,故存在常数c,使得算法PartSelect的平均时间复杂度可以表示为
令且不妨设等式在时成立,则满足
以下用第二数学归纳法证明。取
当时,取cC/4,则
当时,成立。
对于一般的n,设对所有小于n的自然数成立,则
得证。
证明:(1)当时,假设数组A中元素互不相同。由于每个具有7个元素的数组的中间值u是该数组中的第4小元素,因此数组中至少有4个元素不大于u,个中间值中至少有个不大于这些中间值的中间值v。因此,在数组A中至少有
个元素不大于v。换句话说,A中至多有
个元素大于v。同理,至多有个元素小于v。这样,以v为划分元素,产生的新数组至多有个元素。当时,。
另一方面,在整个执行过程中,递归调用Select函数一次,涉及规模为,而下一次循环Loop涉及的数组规模为。程序中其他执行步的时间复杂度至多是n的倍数,用表示算法在数组长度为n的时间复杂度,则当时,有递归关系
用数学归纳法可以证明,。所以时间复杂度是。
(2)当时,使用上述方法进行分析,可知在进行划分后数组A中有至多个元素。而递归关系为。若通过归纳法证明出有的形式,用数学归纳法可以证明,。所以时间复杂度是。
归并排序的 C++语言描述
#includeiostream.h
templateclass Tvoid MergeSort(T a[],int left,int right);
templateclass Tvoid Merge(T c[],T d[], int l,int m,int r);
templateclass Tvoid Copy(T a[],T b[],int l,int r);
void main()
{
int const n(5);
int a[n];
coutInput nnumbers please:;
for(int i=0;in;i++)
cina[i];
//for(int j=0;jn;j++)
//b[j]=a[j];
MergeSort(a,0,n-1);
coutThe sorted array isendl;
for(i=0;in;i++)
couta[i];
coutendl;
}
templateclass T
void MergeSort(T a[],int left,int right) //
{
if(leftright)
{
int i=(left+right)/2;
T *b=new T[];
MergeSort(a,left,i);
MergeSort(a,i+1,right);
Merge(a,b,left,i,right);
Copy(a,b,left,right);
}
templateclass T
void Merge(T c[],T d[],int l,int m,int r)
{
您可能关注的文档
最近下载
- 2024年中国中式养生水行业发展趋势洞察报告.pdf VIP
- 湘科版科学五年级上册全册教学设计教案.pdf
- 大家的日语 1-9课测试试卷1.doc VIP
- 政府采购评审专家考试题库含答案.docx VIP
- JJF 1593-2016 国家检定校准 规范.docx VIP
- Service invoice 服务发票模板.doc VIP
- 浅谈危险化学品企业安全管理当中存在的问题与建议对策.docx VIP
- 甘肃省兰州市第五十八中学教育集团2024-2025学年高三上学期建档考试物理试题(无答案).docx VIP
- 幼儿园小班妈妈在哪儿课件..pptx VIP
- 建筑工程冬季施工防冻保温实施方案.doc VIP
文档评论(0)