算法设计与分析复习资料.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设计与分析复习资料:背包问题的贪心算法:(贪心法)void?Knapsack(int?n,float?M,float?v[],float?w[],float?x[])?{? ?Sort(n,v,w);??int?i;? ?for?(i=1;i=n;i++)?x[i]=0;??float?c=M;? ?for?(i=1;i=n;i++)?{??if?(w[i]c)?break;??x[i]=1;??c?-?=w[i];??}? ?if?(i=n)?x[i]=c/w[i];?}? 快速排序(分治法)void?QuickSort?(Type?a[],?int?p,?int?r)? {? ?if?(pr)?{? ?int?q=Partition(a,p,r);? ?QuickSort?(a,p,q-1);?//对左半段排序?QuickSort?(a,q+1,r);?//对右半段排序?}?}?n后问题(回溯法)int?n;?//皇后个数 int?sum?=?0;?//可行解个数 int?x[N];?//皇后放置的列数 int?place(int?k){?int?i;?for(i=1;ik;i++)?if(abs(k-i)==abs(x[k]-x[i])?||?x[k]?==?x[i])?return?0;?return?1;}int?queen(int?t){?if(tn??n0)?//当放置的皇后超过n时,可行解个数加1,此时n必须大于0?sum++;?else ?for(int?i=1;i=n;i++)?{?x[t]?=?i;?//标明第t个皇后放在第i列 ?if(place(t))?//如果可以放在某一位置,则继续放下一皇后 ?queen(t+1);?}?return?sum;}归并排序void MergeSort(int array[], int? start, int? end){?if (start end)?{?int i;?i = (end + start) / 2;??????????//对前半部分进行排序?MergeSort(array, start, i);?????????????//对后半部分进行排序?MergeSort(array, i + 1, end);?????????????//合并前后两部分?Merge(array, start, i, end);?}}void Merge(int? array[], int start, int? mid, int end){?int temp1[10], temp2[10];?int n1, n2;?n1 = mid - start + 1;?n2 = end - mid;???//拷贝前半部分数组?for (int i = 0; i n1; i++)?temp1[i] = array[start + i];???//拷贝后半部分数组?for (int? i = 0; i n2; i++)?temp2[i] = array[mid + i + 1];//把后面的元素设置的很大?temp1[n1] = temp2[n2] = 1000;???//逐个扫描两部分数组然后放到相应的位置去?for (int? k = start, i = 0, j = 0; k = end; k++)?{?if (temp1[i] = temp2[j])?{?array[k] = temp1[i];?i++;?}?else?{?array[k] = temp2[j];?j++;?}?}}堆排序1.堆?堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=key[2i+1]Key[i]=key[2i+2]或者Key[i]=Key[2i+1]key=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]=Key[2i+1]key=key[2i+2]称为大顶堆,满足 Key[i]=key[2i+1]Key[i]=key[2i+2]称为小顶堆。由上述性质可知大顶堆的堆顶的关键字肯定是所有关键字中最大的,小顶堆的堆顶的关键字是所有关键字中最小的。2.堆排序的思想 利用大顶堆(小顶堆)堆顶记录的是最大关键字(最小关键字)这一特性,使得每次从无序中选择最大记录(最小记录)变得简单。 其基本思想为(大顶堆): 1)将初始待排序关键字序列(R1,R2....Rn)构建成大顶堆,此堆为初始的无序区; 2)将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,......Rn-1)和新的有序区(Rn),且满足R[1,2...n-1]=R[n];? 3)由于交换后新的堆顶R[1]可能违反堆的性

文档评论(0)

AnDyqaz + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档