洛谷P2397 yyy loves Maths VI (mode)

摩尔投票法
本文介绍了一个基于摩尔投票算法解决寻找众数问题的方法。该算法适用于数据集中存在一个出现次数超过一半的元素的情况。通过遍历整个数据集,维护一个候选众数和计数器,最终确定众数。

原题链接P2397 yyy loves Maths VI (mode)

题目描述

他让redbag找众数

他还特意表示,这个众数出现次数超过了一半

一共n个数,而且保证有

n<=2000000

而且每个数<2^31-1

输入输出格式

输入格式:

 

第一行一个整数n

第二行n个整数

 

输出格式:

 

一行,这个众数

 

输入输出样例

输入样例#1:  复制
5
2 3 3 3 3
 
输出样例#1:  复制
3

说明

时间限制 1s

空间限制 3.5M(你没看错3.5M)

有人想水过,但我告诉你这空间是不够的

题解

此题的算法是一种及其偏门的数学做法:摩尔投票

算法的思路十分简单,我们记录一个值val和一个计数器cnt,每加入一个值就和val比较,如果相等就将cnt加1,否则将cnt减1,如果cnt为0就替换掉val

这个算法的正确性很好证明:只要一个数的数量大于总数的1/2就可以替换掉所有其他数,

就像N个人打群架,一个人抵消另一个人,只要其中一方的势力(人数)大于总数的一半,就可以抵消任何其他势力并且还有人剩余

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 const int INF=1e9+7;
 5 int N,val=-1,num=1;
 6 int main(){
 7     scanf("%d",&N);
 8     for(int i=1;i<=N;i++){
 9         int ii;
10         scanf("%d",&ii);
11         if(val==ii){
12             num++;
13         }else{
14             num--;
15             if(num==0){
16                 num=1;
17                 val=ii;
18             }
19         }
20     }
21     printf("%d",val);
22     return 0;
23 }

 

转载于:https://www.cnblogs.com/guoshaoyang/p/10587964.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值