假设我有一份文件&该文件分布在4台不同的机器上,我想得到一个重复次数最多的字符(所有4台机器组合在一起)。
我的一种方法是在每台机器中使用散列映射并分别计算每台机器上的频率,然后将该散列映射传递到主服务器,其中将合并来自所有4台机器的散列映射。 因此,我们将得到频率最高的角色。
但这里的缓存是我想最小化从每台机器传输的数据。
可以做出哪些改进?
[编辑]
每台机器都有一部分文件
答案 0 :(得分:3)
如果你不介意花更长时间......
答案 1 :(得分:0)
我声称,如果没有事先了解文档中字符的分布,那么您采取的任何方法都必须将所有4台计算机上的数据减少到其中一台计算机上。为了最大限度地减少传输的数据,有必要最小化保存每台计算机上字符数的数据结构的大小。
假设您正在处理带有N
个字符的字母表,那么您现在的问题就是设计一个可以保存N
整数的数据结构(在某些范围内[0..m]
,{{1作为字母表中的字符数),可以找到任意数量的此类数据结构。
当然,如果您事先了解字符的分布情况,例如,如果您知道它是纯英文文本,那么您可以采用一系列可能的数据压缩方法。
鉴于在实践中可能找到m
和N
的相对较小的值,我同意评论的一般主旨,可能不值得设计一个复杂的结构来减少数量传输的数据,在大多数可能的情况下发送m
整数数组就足够了。