Boyer-Moore 投票算法

news/2024/4/29 12:21:19/文章来源:https://www.cnblogs.com/amboke/p/16683248.html

Boyer-Moore 投票算法

该算法的原始研究发表在 https://www.cs.utexas.edu/~moore/best-ideas/mjrty/

该方法基本上非常简单,它依赖于这样一个事实,即如果一个元素出现超过 1/2 次,那么它在体积方面的贡献最大。

所以我们取一个元素,如果下一个元素与取的元素相同,我们将增加一个计数器,否则我们将减少计数器。如果我们按照这个逻辑,我们将在最后得到对数组体积贡献最大的元素。

注意:我们对找到重复出现多少次的频率不感兴趣,我们只需要找到在数组体积中贡献最高的元素。

让我们通过示例来了解这种方法

我们有元素,

[1 1 1 3 3 2 2 3 3 3 2 3 3]

现在,我们将候选元素作为第一个元素,并用计数 1 表示它。

现在,我们增加指针,因为下一个元素与候选元素相同,我们将增加计数。

现在,如您所见,下一个元素不是 1,因此我们减少计数并移动指针,直到计数器不为 0

因此,经过 3 次迭代后,我们的计数变为 0。现在,当计数变为 0 时,这就是我们需要更改候选元素的标志。因此,我们将候选元素从 1 更改为 2。然后重新开始计数

现在,再次因为我们得到的元素与候选元素不同,我们将减少计数并在计数变为 0 时重新实例化

现在,在几次迭代后重复相同的过程,我们得到 2。所以我们再次将计数从 2 减少到 1,但此后我们又得到 3,所以再次从 1 变为 2,最后以 3 结束。

现在,我们丢弃无用的计数,候选元素是数组中出现次数超过 1/2 的元素。

这个逻辑的整个代码如下:

 类解决方案(对象):  def 多数元素(自我,数字):  """  :type nums: 列表[int]  :rtype: 整数  """  候选人 = 数字 [0]  计数 = 1  对于范围内的 i (1, len(nums)):  如果 nums[i] == 候选人:  计数 += 1  elif 计数 == 0:  候选人 = nums[i]  别的:  计数 -= 1  返回(候选人)

感谢您阅读我的文章!!!接近我 https://linktr.ee/prituldave

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/25820/58401023

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_6244.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试要点】判断企业基本信息——新型骗局“招聘转培训”

核心保护请一定要对个人的身份证与银行卡留有心眼,不要给任何人有中途拿取的操作。 手机不要离手,且一定要设置安全级别较高的密码。 时刻都要保持录音,无论是不是在签合同。招聘流程先是邀请你面试,但是在电话或者任何招聘网站提供的公司信息都与现场不符。 面试通过,他们…

TCP 的自然律

周一傍晚发了一则朋友圈: 放大配图,来自:How to transfer, share and send big files fast: ​ 我对此事的看法:“想高效利用庞大的资源需要的代价和资源规模的增加并不是线性的,而且指数的,下…

新一代网络请求库:python-httpx库

文章目录httpx库一、 概述1、 简介2、 命令行模式3、 快速开始3.1 get请求3.2 post请求3.2.1 表单3.2.2 文件3.2.3 JSON3.2.4 二进制3.3 响应处理3.4 流式响应3.5 cookie3.6 重定向3.7 超时和验证二、 客户端1、 特性2、 发出请求3、 其他配置4、 python_web5、 Request对象6、…

Python基础学习

文章目录1.1变量与运算符案例一:变量与运算符1.2选择结构与循环结构实训案例一:使用for循环输出满足条件的内容案例二:使用while循环1.3数据结构实战案例一:列表案例二:元组案例三:字典案例四:集…

《高级C/C++编译技术》01

Linux程序内存布局:启动程序的默认加载点是在链接阶段才添加的,通常放在程序内存映射的起始处(这是可执行文件和动态库之间的唯一区别)。启动代码有两种不同方式:crt0:“纯粹”的入口点,这是程序代码的第一部分,在内核控制下执行 crt1:更现代化的启动例程,可以在main…

某银行开发一个信用卡管理系统CCMS

38.现准备为某银行开发一个信用卡管理系统CCMS,该系统的基本功能为: (1)信用卡申请:非信用卡客户填写信用卡审请表,说明所要申请的信用卡类型及申 请者的蒸本信息,并提交给CCMS。如果信用卡申请者被…

Day08__异常

异常 Error和Exception捕获和抛出异常package exception;public class Demo01 {public static void main(String[] args) {int a=1;int b=0;//Ctrl+Alt+ttry {//try监控区域System.out.println(a/b);}catch (ArithmeticException e){//捕获异常System.out.println("除数不…

JAVA基础知识

JAVA基础知识目录IDEA快捷键简洁语法CtrlAltShift操作其他常用操作JAVA基础知识注释字面量变量数据类型关键字标识符类型转换自动类型转换表达式的自动类型转换强制类型转换运算符算数运算符符号做连接符自增自减运算符关系运算符和逻辑运算符三元运算符运算符优先级数组数组的…

Code For Better 谷歌开发者之声——Flutter - Google 开源的移动 UI 框架

写在前面 如今,人们都希望自己手机里的应用又漂亮的设计,顺滑的动画以及优异的功能,为了做到这些,开发者们需要在不妥协质量和性能的前提下,更快速地推进新功能的研发,这就是Flutter的核心。 文章目录写在前…

【转】VS2019 安装完成之后再安装其它功能模块组件安装

VisualStudio2019安装完成之后,由于开发需求需要安装其它模块或组件,点击工具,选择获取工具和功能,进行选择安装。 做个笔记随笔记录一下。选择需要的模块进行即可。【转自】https://www.cnblogs.com/jiayan1578/p/13665423.html

网络抖动了解

转自:https://blog.csdn.net/W_317/article/details/112801222, https://zhuanlan.zhihu.com/p/403614008 1.网络抖动 指网络中的延迟是指信息从发送到接收经过的延迟时间,一般由传输延迟及处理延迟组成; 抖动=最大延迟-最小延迟 如访问一个网站的最大延迟是20毫秒,最小延迟…

【转载】预测算法--时间序列(ARIMA)模型

ARIMA:AutoregressiveIntegratedMovingAverage model。自回归差分移动平均模型(p,d,q),可以说AR自回归模型,MA移动平均模型,ARMA自回归移动平均模型都是ARIMA的特殊形式. 时间序列模型一般性步骤包括:1. 数据平稳性检验;2. 确定模型参数;3. 构建时间序列模型;4.模型预测…

STM32二十:OLED和LCD

一.概述 1.OLED介绍 1 //OLED的显存2 //存放格式如下.3 //[0]0 1 2 3 ... 127 4 //[1]0 1 2 3 ... 127 5 //[2]0 1 2 3 ... 127 6 //[3]0 1 2 3 ... 127 7 //[4]0 1 2 3 ... 127 8 //[5]0 1 2 3 ... 127 9 //[6]0 1 2 3 ... 127 10 //[7]0 1 2 3 ... 127 …

一.xv6环境搭建

内容大致来源:1.视频教程:https://space.bilibili.com/16765968/channel/collectiondetail?sid=86878 2.文档:https://tarplkpqsm.feishu.cn/docs/doccnoBgv1TQlj4ZtVnP0hNRETd#W8iZmH一.windows升级为专业版注意:docker支持Windows 10 操作系统专业版,所以要升级windows…

【ASP.NET Core】自定义Session的存储方式

在开始今天的表演之前,老周先跟大伙伴们说一句:“中秋节快乐”。 今天咱们来聊一下如何自己动手,实现会话(Session)的存储方式。默认是存放在分布式内存中。由于HTTP消息是无状态的,所以,为了让服务器能记住用户的一些信息,就用到了会话。但会话数据毕竟是临时性的,不…

MySQL-3-多表查询和事务(结合案例学习)

我们之前在讲解SQL语句的时候,讲解了DQL语句,也就是数据查询语句,但是之前讲解的查询都是单表查询,而本章节我们要学习的则是多表查询操作,主要从以下几个方面进行讲解。 多表查询多表查询多表关系分类连接查询内连接隐…

【数据结构】绪论

文章目录 1. 绪论 1.1 概述 1.2 数据与数据结构 1.2.1 术语 1.2.2 逻辑结构 1.2.3 存储结构: 1.2.4 数据操作: 1.3 算法 1.3.1 算法特性 1.3.2 算法目标 1.3.3 算法分析:概述 1.3.4 算法分析:时间复杂度(大…

Markdown笔记软件之 Obsidian

我使用过什么markdown笔记软件了解自己的需求 Markdown 语法简洁vscode内置 markdown 插件,预览等 snippet(摘要功能)自定义代码片段typero实时渲染,所见即所得 美观缺点不适合我个人 收费 不支持打标签 tag 放弃:解决不了我的痛点(全键盘),收费 不支持移动端joplin支持 v…

模拟用户登录功能的实现以及演示SQL注入现象

模拟用户登录功能的实现以及演示SQL注入现象 /* 实现功能:1、需求:模拟用户登录功能的实现。2、业务描述:程序运行的时候,提供一个输入的入口,可以让用户输入用户名和密码用户输入用户名和密码之后,提交信息…

Day07__面向对象

面向对象 什么是面向对象回顾方法的定义 package objectOriented;import java.io.IOException;//回顾方法的定义 public class Demo01 {public static void main(String[] args) {}public static String sayHello(){return "Hello,World!";}public int max(int a,int…