假设流数据(即每10分钟1000万串),那么存储串的快速和存储器有效的方法是什么,使得如果两个串具有完全相同的字符但顺序不同,则它们只被存储一次。
我有一个解决方案来确定两个字符串是否满足这个标准,它在O(n)时间内工作,并基于构建每个字符串中字符的频率直方图并检查这些直方图是否相同。但这并不能很好地工作,因为每个新字符串都必须与( <= 10M)存储的字符串进行比较。我可以假设,如果我们将每个字符串存储为直方图,然后根据它们的大小将它们分成不同的块,这可以使事情变得更有效率,但这仍然会有巨大的时间复杂度。就时间而言,理想的解决方案是拥有一个完美的散列函数,它对直方图输入进行操作(字符串:"cacao“->直方图:"a2:c2:o1")
发布于 2017-01-15 14:38:09
如果字符串足够短,那么比较排序的字符串可能比比较直方图更快(值得检查)。请注意,排序只执行一次。只需将排序后的字符串放入某种映射中:散列映射、树映射等
发布于 2017-01-15 14:49:33
我可以想象,一个稍微定制的trie版本实际上应该是您感兴趣的。
好处:
缺点:
https://stackoverflow.com/questions/41658458
复制相似问题