Finding the Majority Element寻找主元素

Problem

    Is there the majority element in sequence A [1.. n]? If so, please find it out. An integer a in A is called the majority if it appears more than [n/2] times in A.寻找元素出现次数大于n/2

Algorithm 1 ——  The brute-force method
遍历序列中的每个元素,统计它的出现次数,然后检查是否有任何一个元素的出现次数超过了 n/2。如果存在这样的元素,则返回该元素作为主要元素;否则,返回不存在主要元素

    Time Complexity:  Θ(n**2)

Algorithm 2 ——  sort the elements
先对序列进行排序,然后检查中间元素是否为主要元素。

     Time Complexity:  Θ(nlogn)

Algorithm 3 ——  find the median

    Time Complexity:  Θ(n)

Algorithm 4
Idea

Observation 5.1  If two different elements in the original sequence are removed, then the majority in the original sequence remains the majority in the new sequence.

  1. 初始化候选主要元素和计数器。将候选主要元素设为候选人序列中的第一个元素,计数器初始化为 0。

  2. 从序列的第二个元素开始遍历,对于每个元素执行以下操作:

    • 如果当前元素与候选主要元素相同,则将计数器加 1。
    • 如果计数器大于n/2,返回该候选主要元素。
  3. 关于候选人序列排序,

    从位置 m 开始,初始化候选主要元素为 A[m],计数器为 1。

  4. 它开始向右遍历序列,直到遇到序列的末尾或计数器减为 0。在每一步中,它会检查当前元素与候选主要元素是否相同。如果相同,则计数器加 1;如果不同,则计数器减 1。这个过程中,如果计数器减为 0,就意味着从 m 到当前位置之间的元素中不存在主要元素,因此需要重新选择候选主要元素。

  5. 如果遍历到序列的末尾,说明候选主要元素出现的次数超过了序列长度的一半,那么就返回候选主要元素;否则,递归调用 candidate 过程,从当前位置的下一个位置开始重新选择候选主要元素。

Algorithm 5.1  MAJORITY

Time Complexity:  Θ(n)    

第一阶段对序列进行遍历,对每个元素进行投票,候选主要元素的选取依赖于其出现的次数。第二阶段对候选主要元素进行验证,检查其出现次数是否超过了 n/2 次。

假设我们有一个序列 A = [1, 2, 2, 2, 3, 4, 5, 6]。

我们使用 Boyer-Moore 投票算法来找到主要元素。

首先,我们从序列的第一个元素开始,即 m = 1。初始化候选主要元素为 1,并将计数器 count 设为 1。

我们从第一个元素开始向右遍历序列:

  • 对于元素 A[1] = 1,与候选主要元素相同,因此计数器加 1。
  • 对于元素 A[2] = 2,与候选主要元素不同,因此计数器减 1。现在计数器为 0,我们需要重新选择候选主要元素。所以,我们更新候选主要元素为 A[2] = 2,并将计数器重置为 1。
  • 对于元素 A[3] = 2,与候选主要元素相同,计数器加 1。
  • 对于元素 A[4] = 2,与候选主要元素相同,计数器加 1。
  • 对于元素 A[5] = 3,与候选主要元素不同,计数器减 1。现在计数器为 1。
  • 对于元素 A[6] = 4,与候选主要元素不同,计数器减 1。现在计数器为 0,我们需要重新选择候选主要元素。所以,我们更新候选主要元素为 A[6] = 4,并将计数器重置为 1。
  • 对于元素 A[7] = 5,与候选主要元素不同,计数器减 1。现在计数器为 0,我们需要重新选择候选主要元素。所以,我们更新候选主要元素为 A[7] = 5,并将计数器重置为 1。
  • 对于元素 A[8] = 6,与候选主要元素不同,计数器减 1。现在计数器为 0,我们需要重新选择候选主要元素。所以,我们更新候选主要元素为 A[8] = 6,并将计数器重置为 1。

现在,我们遍历完整个序列,并且计数器不为 0。所以我们需要再次遍历序列来验证候选主要元素。

候选主要元素为 6,出现次数为 1。由于 1 并未超过序列长度的一半,所以最终的返回结果是 "none",表示序列中不存在主要元素。

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

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

相关文章

物联网数据驾驶舱

在信息化时代,数据已经成为驱动企业发展的核心动力。特别是在物联网领域,海量数据的实时采集、分析和监控,对于企业的运营决策和业务优化具有至关重要的作用。HiWoo Cloud作为领先的物联网云平台,其数据监控功能以“物联网数据驾驶…

Docker常见指令

1.docker search mysql :从docker镜像仓库搜索和mysql有关的镜像 docker search mysql 2.docker pull mysql :从docker仓库拉取mysql镜像 docker pull mysql 3.docker run mysql :启动mysql镜像 docker run mysql 4.docker ps &#xff…

工业母机5G智能制造工厂数字孪生可视化平台,推进行业数字化转型

随着科技的不断进步和工业的快速发展,数字化转型已成为工业领域的重要趋势。工业母机作为制造业的核心设备,其智能化、自动化水平的提升对于整个工业的发展具有重要意义。5G技术的广泛应用,为智能制造工厂提供了更为可靠、高速的网络连接&…

OSError: We couldn‘t connect to ‘https://huggingface.co‘ to load this file

想折腾bert的同学,应该也遇到这个问题。 一、报错信息分析 完整报错信息:OSError: We couldnt connect to https://huggingface.co to load this file, couldnt find it in the cached files and it looks like google/mt5-small is not the path to a…

力扣刷题Days20-151. 反转字符串中的单词(js)

目录 1,题目 2,代码 1,利用js函数 2,双指针 3,双指针加队列 3,学习与总结 1,正则表达式 / \s /: 2,结合使用 split 和正则表达式: 1,题目 给你一个字符串 s &am…

Docker学习之使用harbor搭建私有仓库(超详解析)

实验目的: 使用centos7,基于harbor构建私有仓库 实验步骤: 下载相关安装包和依赖: [rootlocalhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget //安装docker所需要的相关依赖 [rootlocalhost ~]#…

山景BP1048 升级狗烧写

1.打开MVAssistant_BP10xx工具,在芯片型号栏中选择B1X系列。 2.模式选择 选 M2.仅升级Flash SH(可选) 3 .Code数据选择SDK编译好的bin文件 4.const数据选择编译好的提示音bin文件。 5.点击升级狗下载。 6. 如下图所示,出现提示为正在给升级狗正在下载程…

git pull 报错: 在签出前,请清理存储库工作树

问题: 使用vscode 用git 拉取代码,提示:在签出前,请清理存储库工作树** 原因: git仓库上的代码和本地代码存在冲突了所以会报这个报错。 解决办法: ①git stash 先将本地修改存储起来 ②git pull 拉取远…

创新应用2:nnmf+DBO+K-Medoids聚类,蜣螂优化算法DBO优化K-Medoids,适合学习和发paper。

创新应用2:nnmfDBOK-Medoids聚类,蜣螂优化算法DBO优化K-Medoids,适合学习和发paper。 一、蜣螂优化算法 摘要:受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发,提出了一种新的基于种群的优化算法(Dung Beetle Optim…

多个图片怎么变成一张动图?一个方法在线操作

如何将图片变成gif动画?gif动图文件体积、画面丰富兼容性也比较高。通过多张静图就能够制作一张gif动画,能够自己制作生动有趣的gif动态图片能更好的传达信息。只需要使用在线图片合成(https://www.gif.cn/)工具,上传j…

【C语言基础】:字符函数和字符串函数

文章目录 一、字符函数1. 字符分类函数2. 字符转化函数 二、字符串函数1. strlen函数的使用和模拟实现strlen函数的使用strlen函数的模拟实现 2. strcpy函数的使用和模拟实现strcpy函数的使用strcpy函数的模拟实现 3. strcat函数的使用和模拟实现strcat函数的使用strcat函数的模…

el-table树形数据序号排序处理

1&#xff0c;用下面这个代码可以实现基本表格的序号排序 <el-table-column label"序号" width"50px" align"center"><template slot-scope"scope">{{ scope.$index 1 }}</template></el-table-column>2&…

【LeetCode热题100】104. 二叉树的最大深度(二叉树)

一.题目要求 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 二.题目难度 简单 三.输入样例 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&am…

训练数据集(一):真实场景下采集的煤矸石目标检测数据集,可直接用于YOLOv5/v6/v7/v8训练

文章目录 数据集介绍数据集训练精度展示数据集获取方式 数据集介绍 煤矸石训练数据集&#xff1a;891张&#xff1b;验证数据数据集&#xff1a;404张 数据集类别&#xff1a;0代表煤炭&#xff08;coal&#xff09;&#xff0c;1代表矸石&#xff08;gangue&#xff09;&…

Git reset命令后如何恢复到最新版本

文章目录 Git reset命令后如何恢复到最新版本使用git reflog命令使用git checkout命令 总结 Git reset命令后如何恢复到最新版本 Git reset命令后&#xff0c;可以使用以下两种方法恢复到最新版本&#xff1a; 使用git reflog命令 git reflog该命令可以查看所有Git操作的记录…

【C语言】比较两个字符串大小,strcmp函数

目录 一&#xff0c;strcmp函数 1&#xff0c;strcmp函数 2&#xff0c;函数头文件&#xff1a; 3&#xff0c;函数原型&#xff1a; 4&#xff0c;返回取值&#xff1a; 二&#xff0c;代码实现 三&#xff0c;小结 一&#xff0c;strcmp函数 1&#xff0c;strcmp函数 …

docxTemplater——从word模板生成docx文件

官网文档&#xff1a;Get Started (Browser) | docxtemplater 官网在线演示&#xff1a;Demo of Docxtemplater with all modules active | docxtemplater 源码&#xff1a;https://github.com/open-xml-templating/docxtemplater 不仅可以处理word&#xff08;免费&#xf…

【ArcGIS 脚本工具】强制移动要素类,绕过空间参考不一致

作为一个合格的数据管家&#xff0c;自然要让自己的数据库井井有条。 于是想着整理一下数据库里面的七零八落的要素类&#xff0c;按 数据库-要素数据集-要素类 的方式整理。 但是将要素类移动到要素数据集内的时候经常会出现下面的报错。 这大概率是因为要素类的坐标系与目标…

使用ChatGPT高效完成简历制作[中篇2]-有爱AI实战教程(九)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、导读&#xff1a; 在使用 ChatGPT 时&#xff0c;当你给的指令越精确&#xff0c;它的回答会越到位&#xff0c;举例来说&#xff0c;假如你要请它帮忙写文案&#xff0c…

0301taildir-source报错-flume-大数据

1 基础环境简介 linux系统&#xff1a;centos&#xff0c;前置安装&#xff1a;jdk、hadoop、zookeeper、kafka&#xff0c;版本如下 软件版本描述centos7linux系统发行版jdk1.8java开发工具集hadoop2.10.0大数据生态基础组件zookeeper3.5.7分布式应用程序协调服务kafka3.0分…