- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4-13 数列极差问题
算法实现题4-13★问题描述:在黑板上写了N个整数组成的一个数列,进行如下操作:每一次擦去其中2个数,设为a和b,然后在数列中加入一个数,如此下去直至黑板上只剩下一个数。在所有按这种操作方式最后得到的数中,最大的数记为max,最小的数记为min,则该数列的极差M定义为M=max-min。★编程任务:对于给定的数列,编程计算出其极差M。★算法分析:在数列极差问题中,问题的难点是求出max,min的值。因为在N个正整数组成的数列中,用穷举法的话每次要擦去2个数的选择有很多,所以不可能每种选择的结果都计算出来,这样的话计算量非常大。所以我们主要解决的问题是找出一个方法求出max,min的值。贪心算法最重要的两个性质是:贪心选择性质和最优子结构性质。贪心选择性质是所求问题的整体最优解可以通过一系列局部最优的选择,也就是贪心选择来达到。而最优子结构性质是指一个问题的最优解包含其子问题的最优解。问题的关键就是max,min值的求解问题,所以首先看下怎么样来求max,min值。设有三个数x y z,且xyz,按问题描述来做的话,结果有下面三种情况:num1=(x*y+1)*z+1=xyz+z+1 , num2=(x*z+1)*y+1=xyz+y+1,num3=(y*z+1)*x+1=xyz+x+1。很容易看出num1num2num3。所以我们可以得出结论:优先选择数列中最小的2个数进行(a*b+1)运算得到的值大,优先选择数列中最大的2个数进行(a*b+1)运算得到的值小。我们可以把整体的MAX,MIN值通过一系列局部求MAX,MIN值来求我们想要的结果。我们在看下用贪心策略求解的合理性:假设经(N-3)次运算后得到3个数:x y max(maxxy),其中max是(N-2)个数经(N-3)次运算后所得的最大值,此时最大值m =(x*y+1)×max+1。若经(N-2)次变换后所得的3个数为:x y z(zxy)且z不为(N-2)次变换后的最大值,即z<max则所求得的最大值为: m’=(x*y+1)*z+1, 此时m-m’ =(1+x*y)(max-z)>0 所以此时不为最优解。 所以若使第k(1≤k≤N-1)次变换后所得值最大,必使(k-1)次变换后所得值最大(符合贪心策略的最优子结构性质),在进行第k次变换时,只需取在进行(k-1)次变换后所得数列中的两最小数x,y进行运算,再把结果插入到数列即可。(符合贪心策略的贪心选择性质)。★算法设计:先将数列a[]按从小到大顺序排列,由得出结论(优先选择数列中最小的2个数进行(a*b+1)运算得到的值大,优先选择数列中最大的2个数进行(a*b+1)运算得到的值小)来计算max和min,最后求极差(max-min)。★程序代码:#include stdio.h#define M 2001//将数列元素按从大到小顺序进行快速排序void QuickSort(int a[],int low,int high){int pivot=a[low],i=low,j=high;while(ij){while(ija[j]=pivot)j--;if(ij) a[i++]=a[j]; while(ija[i]=pivot) i++; if(ij) a[j--]=a[i];}a[i]=pivot; if(lowi) QuickSort(a,low,i-1);if(ihigh) QuickSort(a,i+1,high);}void main(){int n,a[M],max,min;printf(输入数列长度:\n);scanf(%d,n);printf(输入数列:\n);while(n){for(int i=0;in;i++)scanf(%d,a[i]);QuickSort(a,0,n-1);//求最大值 max=a[0];for(i=1;in;i++)max=max*a[i]+1;//求最小值min=a[n-1];for(i=n-2;i=0;i--)min=min*a[i]+1;printf(极差为:\n);printf(%d\n,max-min);} getchar();}★运行结果:
您可能关注的文档
- 濉溪县2012-2013学年度七年级第二学期语文期中试卷(含答案).doc
- 高中英语必修一课文详解Book_1-unit_2.doc
- 智能化黑板-论文.doc
- 中职单报高职质量检测题三.doc
- 9+5课程初中英语音标详解及练习.doc
- Lesson 19 Let’s Go to the Park.doc
- 必修一整理的单词表.doc
- 新课标人教版高中英语必修五unit4 using language 教案.doc
- 小学语文课堂板书设计研究.docx
- 七年级英语上册 Module 1《Nice to meet you》精练精析 外研版.doc
- 数据仓库:Redshift:Redshift与BI工具集成.docx
- 数据仓库:Redshift:数据仓库原理与设计.docx
- 数据仓库:Snowflake:数据仓库成本控制与Snowflake定价策略.docx
- 大数据基础:大数据概述:大数据处理框架MapReduce.docx
- 实时计算:GoogleDataflow服务架构解析.docx
- 分布式存储系统:HDFS与MapReduce集成教程.docx
- 实时计算:Azure Stream Analytics:数据流窗口与聚合操作.docx
- 实时计算:Kafka Streams:Kafka Streams架构与原理.docx
- 实时计算:Kafka Streams:Kafka Streams连接器开发与使用.docx
- 数据仓库:BigQuery:BigQuery数据分区与索引优化.docx
最近下载
- 纸电融合背景下高校图书馆中文图书纸电协调采购的现状与对策研究.docx VIP
- 2023广东中山市人大常委会办公室招聘雇员1人笔试备考试题及答案解析.docx VIP
- DDI 有效沟通学员手册.doc VIP
- 《疼痛评估工具》课件.ppt VIP
- 动物皮水解复合酶及其在动物皮提取胶原蛋白中的应用.pdf VIP
- 《中国传统文化》课件 2.2 道家思想及其人生模式.pptx
- 消防泵房分项工程技术交底.docx VIP
- 黄岭尾矿库安全风险辨识评估报告.doc VIP
- 专题08 整本书阅读(全国通用)(解析版)十年(2016-2025)高考语文真题分类汇编.docx
- 三星级高中评估标准及评价细则.docx VIP
文档评论(0)