现在有十万个单词,请你找出重复次数最多的十个。

字符串,最大长度4个G,乘以10万个…
思路一
我们不能直接在内存里操作
可以拆分成n多个文件
以长度区分,不同长度放在不同的文件夹
以首字母区分,不同首字母放在不同文件夹
以为字母区分,不同尾字母放在不同文件
这样一来,每个文件的每个数据长度相同且首字母尾字母也相同
接着从元素个数最多的文件开始,若找到的最多重复元素比剩下的文件元素长度(元素长度可藏在文件名中)则直接返回该字符串(最长之一)
若没有,则将每个文件的最多重复字符串,记录在另一个文件
最后对该文件进行查找找到最多重复字符串
首先采用从左往右单位排序的算法
每次筛出出现次数最大的字母,丢弃其他字母单词
如此循环直至遇到末尾字符,此时记录以键值对形式储存该字符串及其出现次数到另一个文件中
最终,找到出现次数最多的前10个字符串
思路二
采用桶的思想,不过10万个字符串,最坏情况可能需要10万个桶,因此,我们需要将他们放在不同目录下,避免单目录下10万个桶电脑卡死,比如我们每层目录26个子目录a-z,按字符串从左往右创建目录,小于10万个文件夹,一个3个字节,如此数据量就变成小于30万个字节,最终以单词字符串|次数命名文件,每次遍历到该字符串,次数+1,最终产生10个节点,储存最长10个字符串及其出现次数
采用有序单链表过滤(此处参考我上次的100个结点过滤1E个数字https://editor.csdn.net/md/?articleId=113199734)筛出最长10个字符串

猜你喜欢

转载自blog.csdn.net/weixin_43158695/article/details/113663365