当前课程知识点:数据结构(下) > 第十二章 排序 > (b1)选取:众数 > 12b1-2: 从中位数到众数
众数也就是在一组元素中
数量占绝大多数者
因此也称作主流数
比如在这样一个
由5个元素所构成的集合中
元素3总共出现了多达三次
因此它就是这里的一个众数
而在另一个规模为6的集合中
尽管元素3也出现了三次
但却没有达到4次
因此这里并没有任何的众数
需要强调的是作为这里的计算输入
我们数据集中的数据
并没有按顺序排列
而往往是以一种
无序的随机状态给出的
比如构成一个无序向量
而问题的难点也恰在此处
因为如果所有的元素已经按顺序排列
那么接下来
我们只需做一趟简单的线性扫描
就可以判断出是否有众数
而且如果有众数
我们也可以相应的判断是谁
然而遗憾的是我们已经知道
排序算法在通常的情况下
都逃脱不了nlogn的下界
因此我们并不能做这样的
预处理或者假设
在这里我们进一步追求的目标是
对于任何一个这样的
无序随机数据集
我们希望能够在不超过线性的时间内
使用最多常数的空间
来找到其中的众数
我们的构思首先从一条必要性出发
实际上我们不难验证
在一个数据集中
如果的确存在众数
那么这个众数
也必然是整个数据集的中位数
因为我们如果的确将这些数据
从大到小排成一个有序的线性序列
那么以中位数为界
无论是前一半还是后一半
都不足以容纳所有的众数
也就是说众数所对应的那个区间
必然会覆盖中位数
这个必要条件非常重要
因为它意味着
只有中位数才是众数的
唯一可能侯选
实际上无论是中位数
还是任何一个元素
我们都可以在线性时间内
验证它是否的确是一个众数
你能想出具体的方法吗
没错
我们只需要遍历一趟整个数据集
统计出目标元素的数目
然后根据定义即可判断
它是或者不是众数
因此如果我们的确能从数据集中
很快的找出中位数
那么也就自然得到了
一个众数的选取算法
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试