《编程之美》中的一个问题,在数组中找到出现频率大于1/4的数
来源:互联网 发布:如何清除手机淘宝缓存 编辑:程序博客网 时间:2024/05/24 03:23
这道题目的思路其实很简单,与在数组中找出现次数大于1/2的元素经典算法非常类似,O(n)的时间复杂度。
定义出现频率大于1/4的数为频繁项,这样的频繁项最多有3个。
算法的核心思想很简单,每次删去不同的4个数,最后剩下的元素有可能是频繁项。
假设数组有15个元素,若一个元素的出现频率大于1/4,其必须出现4次。不妨设数组为{1,2,1,4,1,4,2,9,1,7,4,3,9,4,3},d表示删去该数。我们来模拟一下算法的过程。
第一次 1d,2d,1,4d,1,4,2,9d,1,7,4,3,9,4,3 剩下 1,1,4,2,1,7,4,3,9,4,3
第二次 1d,1,4d,2d,1,7d,4,3,9,4,3 剩下 1,1,4,3,9,4,3
第三次 1d,1,4d,3d,9d,4,3 剩下 1,4,3
那么 1,4,3 即为候选频繁项
对 1,4,3 逐个进行检验,统计其再数组中出现的次数,若其超过出现频率阈值,则输出。
代码如下:
流数据频繁项挖掘中,有一个经典的算法是Lossy Counting算法。LC算法基于桶的思想,我觉得也是受到数组中找频繁项的启发。
- 《编程之美》中的一个问题,在数组中找到出现频率大于1/4的数
- 在数组中找到出现频率大于1/4的数
- 数组与矩阵---在数组中找到出现次数大于一半(N/K)的数
- 数组中找到出现次数大于N/K的数
- 在一个数组或字符串中找到出现频率最高的那个元素的方法
- 在数组中找到次数大于N/K的数
- 【C语言】在两个数成对出现的数组中找到一个单独的数。
- 笔试面试算法经典-找到数组中出现次数大于N/k的数(Java)
- C++实现数组中找到出现次数大于N/K的数
- 编程之美系列之二——寻找出现频率超过一半的数
- 编程之美系列之二——寻找出现频率超过一半的数
- 编程之美系列之二——寻找出现频率超过一半的数
- 【编程之美】2.4从1到N中1出现的数目----出现任意一个数的个数。
- 在数组中快速找到只出现一次的数
- C语言-在一个数组中找到一个数之sizeof的用法。
- “支配着” 是在数组中出现频率超过一半的整数,求一个数组中的支配者
- 在一个数组中找到等于某个数的组合
- 在一个数组中找到最大的两个数
- java String
- 一位真正的男子汉
- linux 修改root密码
- 对php中类中函数的作用域的理解
- 条款20:为指针的关联容器指定比较类型——effective STL
- 《编程之美》中的一个问题,在数组中找到出现频率大于1/4的数
- 配置系统nfs服务以及nfs共享挂载到目标板mini2440上
- 非常齐全的电脑知识
- 读林锐C语言笔记
- C#下的openCV(Emgu CV)
- 5种方法解除开机密码
- 解决linux下php中文显示乱码问题
- oracle端口修改命令
- Win7时代你不得不会的东东