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,一经查实,立即删除!

相关文章

对IO流原理及、分类及IO模型的一个大概认识【Java基础题】

1.流的分类 根据操作数据单位分类: 字节流字符流 一般来说,字符流会比字节流效率更高,因为1个字符一般比1个字节(8bit)大(it depends on 具体的编码规则,例如UTF-8中1个中文等于3个字节&#xf…

物联网数据驾驶舱

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

UE C++ 相机视口变换(World与相机互转)

UE C 相机视口变换(World与相机互转) UFUNCTION(BlueprintCallable, BlueprintPure) static void ProjectSceneCaptureToWorld(const class USceneCaptureComponent2D* SceneCaptureComponent2D,const FVector2D& SceneCapturePosition, FVector&am…

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…

【通信原理笔记】【二】随机信号分析——2.4 复随机过程

文章目录 前言一、复随机过程1.1定义1.2 复平稳过程 二、平稳带通过程分析2.1 解析过程2.2 随机过程的复包络 三、平稳序列与循环平稳总结 前言 目前为止,我们对实随机过程的分析方法已经基本掌握了。像复信号一样,我们也会有需要处理复随机过程的时候&…

工业母机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 ~]#…

PaddleOCR识别框架解读[14] OCR数据集

文章目录 1. 文本检测1.1 PaddleOCR 文字检测数据格式1.2 公开数据集1.2.1 ICDAR 20152. 文本识别2.1 PaddleOCR 文字识别数据格式2.2 公开数据集2.2.1 ICDAR 20153. 数据存放路径这里整理了OCR中常用的公开数据集,持续更新中,欢迎各位小伙伴贡献数据集~ 1. 文本检测 1.1 P…

山景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函数 …