找到流中丢失位的位置

时间:2015-02-21 18:42:01

标签: algorithm bit-manipulation

不确定这是否是正确的渠道......请告知:-)

  1. 您生成n位(1& 0)的流。
    1. 我删除k比特并广播n-k比特流。
    2. 您在某个时间点开始收听我的信息流(即您可能错过了信息流的开头)。
  2. 任务: 告诉我我从您的流中删除的位的原始位置,用于您收到的部分。

    其他信息:

    1. 您的信息流必须至少包含1000位,但您可以按照自己喜欢的方式进行设计,也可以将其存储在内存中。
    2. 我将删除不超过3个连续位。
    3. 我将从原始流中删除不超过10位。
    4. 我将只播放一次流 - 没有循环等。
    5. 这可以解决吗?也许有校验和,综合位置编码......? 我需要多少比特才能绝对肯定地给出答案?

      我发现了这个:https://cs.stackexchange.com/questions/2079/determine-missing-number-in-data-stream但是可以删除的数字是唯一的。

1 个答案:

答案 0 :(得分:0)

我的直觉是,这是非常可行的。

给定一个n位字符串(稍微多一点),有一个相对有效的解码算法。撇开对手不要丢弃超过3个连续位的要求(可能没有,但算法会更复杂,我不认为这是一个很大的限制)。从字符串中的每个n + 1个位置初始化一个映射到一个删除计数(最初为零)和一个头位置(最初是密钥)。对于每个接收到的位,循环遍历地图。如果头部的下一位与该位匹配,则将其向前移动。否则,增加删除计数。如果删除计数超过10,则从地图中删除此键。一旦只有一个唯一的头位置,解码就完成了。

我猜想,很有可能,均匀的随机字符串效果很好。这种效果的一个手波动的论点是,对于处于不正确位置的每个头部,它以概率1/2获得移除。比方说,比如200比特,应该有足够小的生存概率,大约1000头时间约1000 ^ 11/11!对手的选择,不正确的头部存活的概率可以忽略不计。 (这个论点是手工制作的,因为我做了一堆未经证实和字面上错误的独立假设。)