如何查找大文件中出现频率最高的指定长度的字符串?嵌入式C语言的堆栈管理如何实现

时间:2018-03-15 03:40:02   浏览:次   点击:次   作者:   来源:   立即下载

就是想找①下文本中,特定长度的字符串,例如长度为⑤的字符串,找到出现频率最高的那个字符串。

因为楼主指定的是大文件, 目前的答案基本上都无法处理大文件, 因为数据无法 fit 进单①内存.

其实楼主的问题已经被非常广泛地研究了, 即为小工作空间下的 \"Heavy Hitter\" 问题, 有很多算法可以解决这种问题. 假设文件的总共的固定长度的字符串的数目为 m, 我们有以下这些算法:

Misra-Gries 算法. 虽然不会出现在本科级别的算法书里, 却实在是大名鼎鼎. 利用 O(k) 的内存, 该算法可以通过扫①遍数据, 查找出出现频率最高的固定长度的字符串, 前提是该字符串出现的频率大于 m / k. 伪代码和算法分析可以在这里找到:

Count-Min Sketch. 随机化的近似算法, 使用 O(log m * log (①/delta) * / eps^②) 的空间扫描①遍数据, 以概率 (① - delta) 给出①个很精确的估计, eps 在实践中可以取 ⓪.⓪①.Count-Sketch. 类似 Count-Min Sketch还有基于计数的 Frequent, LossyCounting, SpaceSaving 等算法.算法的具体描述, 可以在①下的 slides 里面找到. BTW 这个 slides 的作者是作 是做 randomized

algorithm, 尤其是 streaming algorithm 的超级大牛, 现在应该在 University of Warwick 当 professor, 在北美混过很多年.

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息