找出4个字符串中最重复的字符

时间:2013-07-16 07:44:31

标签: algorithm distributed-computing


假设我有一份文件&该文件分布在4台不同的机器上,我想得到一个重复次数最多的字符(所有4台机器组合在一起)。

我的一种方法是在每台机器中使用散列映射并分别计算每台机器上的频率,然后将该散列映射传递到主服务器,其中将合并来自所有4台机器的散列映射。 因此,我们将得到频率最高的角色。

但这里的缓存是我想最小化从每台机器传输的数据。

可以做出哪些改进?

[编辑]
每台机器都有一部分文件

2 个答案:

答案 0 :(得分:3)

如果你不介意花更长时间......

  1. 每台计算机都传递最常用的字符。希望频率最高的字符数很少。理想情况下,它几乎总是只有一个。
  2. 主服务器将它们组合成一个集合。如果集合完成了单个字符。否则,此集将传递给计算机,可能作为数组或列表。假设每台计算机只有一个字符,则此列表只有2-4个字符。
  3. 每台计算机都会返回集合中每个字符的频率。
  4. 主服务器对频率求和,获得最频繁的频率。

答案 1 :(得分:0)

我声称,如果没有事先了解文档中字符的分布,那么您采取的任何方法都必须将所有4台计算机上的数据减少到其中一台计算机上。为了最大限度地减少传输的数据,有必要最小化保存每台计算机上字符数的数据结构的大小。

假设您正在处理带有N个字符的字母表,那么您现在的问题就是设计一个可以保存N整数的数据结构(在某些范围内[0..m],{{1作为字母表中的字符数),可以找到任意数量的此类数据结构。

当然,如果您事先了解字符的分布情况,例如,如果您知道它是纯英文文本,那么您可以采用一系列可能的数据压缩方法。

鉴于在实践中可能找到mN的相对较小的值,我同意评论的一般主旨,可能不值得设计一个复杂的结构来减少数量传输的数据,在大多数可能的情况下发送m整数数组就足够了。