- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
西电算法设计大作业
算法设计-----
寻找多数元素
学号:020105020
姓名:林桥洲
(1)问题提出:
令A[1,2,…n]是一个整数序列,A中的整数a如果在A中出现的次数多余,那么a称为多数元素。例如在序列1,3,2,3,3,4,3中,3是多数元素,因为在7个元素中它出现了四次。有几个方法可以解决这个问题。蛮力方法是把每个元素和其他各个元素比较,并且对每个元素计数,如果某个元素的计数大于,就可以断定它是多数元素,否则在序列中就没有多数元素。但这样比较的次数是n(n-1)/2=Θ(),这种方法的代价太昂贵了。比较有效的算法是对这些元素进行排序,并且计算每个元素在序列中出现了多少次。这在最坏情况下的代价是Θ(n ).因为在最坏情况下,排序这一步需要Ω(n ) 。另外一种方法是寻找中间元素,就是第元素,因为多数元素在排序的序列中一定是中间元素。可以扫描这个序列来测试中间元素是否是多数元素。由于中间元素可以在Θ(n)时间内找到,这个方法要花费Θ(n)时间。
有一个漂亮的求解方法,它比较的次数要少得多,我们用归纳法导出这个算法,这个算法的实质是基于下面的观察结论。
观察结论:在原序列中去除两个不同的元素后,原序列的多数元素在新序列中还是多数元素。
这个结论支持下述寻找多数元素候选者的过程。将计数器置1,并令c=A[1]。从A[2]开始逐个扫描元素,如果被扫描的元素和c相等。则计数器加1,否则计数器减1.如果所有的元素都扫描完并且计数器的值大于0,那么返回c作为多数元素的候选者。如果在c和A[j](1jn)比较式计数器为0,那么对A[j+1,…n]上的过程调用candidate过程。算法的伪代码描述如下。
(2)算法
Input: An array A[1…n] of n elements;
Output: The majority element if it exists; otherwise none;
1. c(candidate(1);
2. count(0;
3. for j(1 to n
4. if A[j]=c then count(count+1;
5. end for;
6. if count(n/2( then return c;
7. else return none;
candidate(m)
1. j(m; c(A[m]; count(1;
2. while jn and count0
3. j (j+1;
4. if A[j]=c then count (count+1;
5. else count (count-1;
6. end while;
7. if j=n then return c;
8. else return candidate(j+1);
(3)代码
#includestdio.h
#includemalloc.h
int majority(int*A,int n);
int candidate(int m,int n);
int*A;
void main()
{
int i,d,n;
printf(please input number n \n);
scanf(%d,n);
A=(int*)malloc(sizeof(int)*n);
for(i=0;in;i++)
scanf(%d,A[i]);
d=majority(A,n);
if(d!=-999)
printf(the majority element is %d\n,d);
else
printf(the majority element do not exist\n);
}
int majority(int*A,int n)
{
int c,count,j;
c=candidate(0,n);
count=0;
for(j=0;jn;j++)
if(A[j]==c)
count++;
if(countn/2)
return c;
else
return -999;
}
int candidate(int m,int n)
{
int j=m;
int c=A[m];
int count=1;
while(jncount0)
{
j=j+1;
if(A[j]==c)
count++;
else
count--;
}
if(j==n)
return c;
else
return candidate(j+1,n);
}
(4)结果:
该程序的测试结果如下图,该程序能很高效且正确的找出多数元素
(5)设计实例
例如,首先输入数据的个数N
您可能关注的文档
- 表 初始磁化曲线相关参数表.doc
- 补充练习十六.doc
- 表土石坝混凝土面板止水片(带)制作及安装工序质量评定表.doc
- 装修项目:让业主把预算清单看得更明白.doc
- 装饰装修分项.doc
- 西交大秋《高等数学(上)》网上作业及参考答案.doc
- 西华师范大学研究生课表.doc
- 西南交大计算机绘图A(道路桥梁)次离线作业.doc
- 西南大学网络作业中学代数研究.doc
- 西南工业大学材料科学与基础第三版(刘智恩)习题解析.doc
- GB/T 45128-2025塑料 含水量的测定.pdf
- 《GB/T 45128-2025塑料 含水量的测定》.pdf
- 《GB/T 45183-2025塑料 气候老化试验中辐照量的仪器测定 总则和基本测试方法》.pdf
- 中国国家标准 GB/T 45183-2025塑料 气候老化试验中辐照量的仪器测定 总则和基本测试方法.pdf
- GB/T 45183-2025塑料 气候老化试验中辐照量的仪器测定 总则和基本测试方法.pdf
- GB/T 29456-2025能源管理体系 实施、保持和改进GB/T 23331能源管理体系指南.pdf
- 中国国家标准 GB/T 29456-2025能源管理体系 实施、保持和改进GB/T 23331能源管理体系指南.pdf
- GB/T 18216.12-2025交流1 000 V和直流1 500 V及以下低压配电系统电气安全 防护措施的试验、测量或监控设备 第12部分:电量测量和监视装置(PMD).pdf
- 《GB/T 18216.12-2025交流1 000 V和直流1 500 V及以下低压配电系统电气安全 防护措施的试验、测量或监控设备 第12部分:电量测量和监视装置(PMD)》.pdf
- 中国国家标准 GB/T 18216.12-2025交流1 000 V和直流1 500 V及以下低压配电系统电气安全 防护措施的试验、测量或监控设备 第12部分:电量测量和监视装置(PMD).pdf
最近下载
- 第四课 侵权责任与权利界限 【高效课堂精研】高考政治一轮复习统编版选择性必修二法律与生活.pptx
- 长征.ppt VIP
- 2024~2025学年Unit 3 Learning better Part A Let’s talk & let’s learn 单元整体教学设计-三年级下册英语人教PEP版(2024).docx
- 长方体和正方体表面积的变化(增加或减少).pptx VIP
- 部编版《道德与法治》四年级下册第3课《当冲突发生》公开课课件(含视频).pptx
- JELLYCAT毛绒玩具新媒体营销策略分析.docx
- 护理核心制度课件.ppt
- 《消防检查指导手册》(2024版).docx VIP
- 北师大版义务教育小学数学教材知识体系整理.doc VIP
- 水产动物免疫学思考题.docx VIP
文档评论(0)