第一范文网 - 专业文章范例文档资料分享平台

算法设计与分析习题答案1-6章.

来源:用户分享 时间:2025/7/21 22:44:56 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

{

while (low

a[low]=a[high];

while (low=prvotkey) ++low;

a[high]=a[low]; }

a[low]=prvotkey;

//如果s1(大的数集)的的个数大于n/2 if(low>=n/2) {

for(int i=0;i<=n/2-low-1;++i) {

for(int j=0;j

//如果s1(大的数集)的的个数小于n/2 else

for(int i=0;i<=n/2-low-1;++i) {

for(int k=n-1;ka[k-1]) { int temp1=a[k]; a[k]=a[k-1]; a[k-1]=temp1; } }//for } }

int main() { int a[n]={1,3,5,9,6,0,-11,-8}; partions(a,0,n-1); for(int i=0;i

if(i<4) {

cout<<\属于子集s1的:\ cout<

cout<<\属于子集s2的:\ cout<

13. 设a1, a2,…, an是集合{1, 2, …, n}的一个排列,如果iaj,则序偶(ai, aj)称为该排列的一个逆序。例如,2, 3, 1有两个逆序:(3, 1)和(2, 1)。设计算法统计给定排列中含有逆序的个数。

//用归并进行排序

//当一个子集的一个数大于第二个子集的一个数,为逆序,即a[i]>a[j] //则逆序数为end-j+1;

#include using namespace std;

int count;

void Merge(int a[],int a1[],int begin,int mid,int end)//合并子序列 {

int i=begin,j=mid+1,k=end; while(i<=mid&&j<=end) {

if(a[i]<=a[j]) a1[k++]=a[i++];//取a[i]和a[j]中较小者放入r1[k]

else

{ a1[k++]=a[j++]; count+=(end-j+1); } }

while(i<=mid) a1[k++]=a[i++]; while(j<=end) a1[k++]=a[j++]; }

void MergeSort(int a[ ], int begin, int end) {

int mid,a1[1000]; if(begin==end) return ; else { mid=(begin+end)/2; MergeSort(a,begin,mid); MergeSort(a,mid+1,end); Merge(a,a1,begin,mid,end); } }

int main() { int a[6]={6,5,4,3,2,1}; count=0; MergeSort(a,0,6); cout<

14. 循环赛日程安排问题。设有n=2k个选手要进行网球循环赛,要求设计一个满足以下要求的比赛日程表:

(1)每个选手必须与其他n-1个选手各赛一次; (2)每个选手一天只能赛一次。

采用分治方法。

将2^k选手分为2^k-1两组,采用递归方法,继续进行分组,直到只剩下2个选手时,然后进行比赛,回溯就可以指定比赛日程表了

15. 格雷码是一个长度为2n的序列,序列中无相同元素,且每个元素都是长度为n的

二进制位串,相邻元素恰好只有1位不同。例如长度为23的格雷码为(000, 001, 011, 010, 110, 111, 101, 100)。设计分治算法对任意的n值构造相应的格雷码。

//构造格雷码

#include using namespace std;

int n;

char a[100]; void gelei(int k) {

if(k==n) {

cout<

gelei(k+1);

a[k]='0'?'1':'0'; //取反

gelei(k+1); }

int main() {

while(cin>>n && n != 0) { memset(a,'0',sizeof(a)); //初始化,全部置零

a[n] ='\\0'; gelei(0); cout<

return 0; }

16. 矩阵乘法。两个n×n的矩阵X和Y的乘积得到另外一个n×n的矩阵Z,且Zij 满足 (1≤i, j≤n),这个公式给出了运行时间为O(n3)的算法。可以用分 治法解决矩阵乘法问题,将矩阵X和Y都划分成四个n/2×n/2的子块,从而X和Y的乘积可以用这些子块进行表达,即

从而得到分治算法:先递归地计算8个规模为n/2的矩阵乘积AE、BG、AF、BH、CE、DG、

搜索更多关于: 算法设计与分析习题答案1-6章. 的文档
算法设计与分析习题答案1-6章..doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c8rck1612vq1xkfw968ko77t6k14pg601b78_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top