【问题标题】:Find the most repeated character out of 4 strings找出 4 个字符串中重复次数最多的字符
【发布时间】:2013-07-16 07:44:31
【问题描述】:


假设我有一个文档,并且该文档分布在 4 台不同的机器上,我想获得一个重复次数最多的字符(所有 4 台机器相加)。

我的一种方法是在每台机器上使用一个 hashmap 并分别计算每台机器上的频率,然后将该 hashmap 传递到主服务器,来自所有 4 台机器的 hashmap 将被合并。 因此我们会得到频率最高的字符。

但是这里的缓存是我想尽量减少每台机器传过来的数据。

可以进行哪些改进?

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

【问题讨论】:

  • " 我想得到一个重复次数最多的角色(所有 4 台机器加起来)"。我不清楚:“所有 4 台机器合并” 上的计数与仅一台机器上的计数有何不同(如果这是同一个文档)?我想念什么?你的意思是每台机器只保存文件的一部分吗?
  • 是的,每台机器都有一部分文件
  • 我不会担心数据传输。假设您将字符(2 个字节)、频率(4 个字节)配对。如果您传输 100 个最常见的字符(英文字母有 26 个字母 + 一些特殊字符),传输将是 (2+4)*100 = 600bytes
  • 会有一些协议/额外的数据,但我想当你想出一些特殊的协议时,你的数据传输会比一些“愚蠢”的方法高
  • 避免显而易见的解决方案的唯一方法会迫使您有时提出新的请求以获取更多信息。我怀疑这是否值得开销。

标签: algorithm distributed-computing


【解决方案1】:

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

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

【讨论】:

  • 这看起来是最糟糕的解决方案。在网络中,与请求相关的成本(主要是延迟)比节省几个字节的成本更高。直接从 3 开始(即做显而易见的事情)可能会更有效。
  • 关键是频率数据并不是第一次真正发送的。您仍然需要第二个请求,以确保不会错过最频繁的请求。主要的事情是,既然提出了这个问题,这似乎意味着提出这个问题的人可能认为这几个字节是值得的。
【解决方案2】:

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

假设您正在使用带有N 字符的字母表,那么您现在的问题是设计一个可以容纳N 整数的数据结构(在某些范围内[0..m]m 是字符数字母表),并且可以找到任意数量的此类数据结构。

当然,如果您对字符的分布有先验知识,例如,如果您知道它是纯英文书写的文本,那么您就有一系列可能的数据压缩方法。

鉴于Nm 在实践中可能存在的相对较小的值,我同意评论的总体主旨,即可能不值得设计一个复杂的结构来最小化传输的数据量,在大多数可以想象的情况下,发送一个 N 整数数组就足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多