检查二进制字符串中是否有相等的位

时间:2014-06-06 11:51:36

标签: algorithm random

我们在2台不同的计算机上有2个二进制字符串:X和Y.他们两个长度为n。计算机可以通过相互发送位来进行通信。

我们必须建立随机算法以检查是否存在索引i,使得Xi = Yi。我们只能在计算机之间发送O(log n)位。

如果没有这样的索引,算法将始终返回" false"。如果有这样的索引,算法将返回" true"概率为0.5(至少)。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

如果这些位是独立的,那么发送任何log(n)都会给你“击中”相等位的机会。如果没有任何其他信息,您将无法改进此功能。

答案 1 :(得分:1)

详细说明Ivaylo的回答:

想象两个字符串是

A = 110110....0....00010
B = 001001....0....11101

两个都有一些大的长度n,而Ak = Bk代表单个k,位于中间的某个位置。

您基本上需要转换A或B的函数,使得f(A)和g(B)为O(log n)位数。例如。总和就是这样一个功能。

假设您对A的位进行求和,即f = sum。也请g = sum . xor

因此,如果A为110110 0 00010 (12 bits)且B为001001 0 11101 (12 bits),则f(A)= 5 / 101 (3 bits)g(B) = 6 / 110 (3 bits)。你可以比较它们,因为它们是不同的所以你可以说“啊哈!那么数字必须分享一点!(必须有我,s.t。Ai = Bi)”你会是对的。然而,虽然这是足够的证据,但当答案应该是真的时,并非必然。换句话说:可能有我s.t. Ai = Bi,但f(A)= g(B)。

让我们更接近功能,看看为什么。 f(A)真的计算A中有多少个,g(B)计算B中有多少个零。假设如果它们相同则A XOR B = 0,就像说“任何数字那个当与另一个数字进行异或运算时,其他数字中的数字为零,结果为0。“这是错误的:100和110满足条件,但100 XOR 110是010。

现在你可以说:“好吧,我们只需要选择更好的f和g。”然而,sum之所以不起作用是根本的,你无法摆脱它:f和g是哈希函数,或者是数学语言 - surjective functions。域具有O(n)位或O(2 ^ n)个元素的大小,而codomain(目标集)具有O(log n)位或O(2 ^(log n))= O(n)的大小元素和O(2 ^ n)>为O(n)。

投射函数不能反转(这是你真正想要的)。无论何时反转f(A)或g(B),都会得到一对多的映射。如果f(A)是2并且A具有3位,则A可以是{110,101,011}。 f(A)的反转图像的大小平均为O(2 ^ n / n)。使用无更多信息,您猜测A的值的机会是O(n / 2 ^ n)<一般情况下为0.5。

你有没有进一步的信息,因为如果你这样做了,你可以把它加入f和g,但这会增加他们的密码域的大小。

我建议阅读information theory以进一步了解信息丢失,熵等。

答案 2 :(得分:1)

for stanm(我把它写成答案,因为评论很长): 这是一个正确的解决方案。完整的算法是:

  1. k = X中的1的数字。

  2. 将k发送至电脑2.

  3. l = Y中的0的数量。

  4. 如果k = l,计算机2将回答“否”,否则为“是”(或0和1)。

  5. 如果没有索引i使得Xi = Yi,那么算法总是回答“否”(或0)。 如果存在这样的索引。计算机2错误答案的概率是计算机2得到l = k的概率。 包含k 0的所有二进制字符串(长度n)的数量是(n选择k)。 所有二进制字符串的数量(长度n)是(2 ^ n)。 因此,即使必须返回“是”,计算机2将失败的概率是(n选择k)/ 2 ^ n。您可以证明此数字始终小于(或等于)1/2。

    最后我们可以得出结论:

    如果这样的索引不存在,计算机2将回答“否”。如果它存在,那么计算机2将失败的概率小于(或等于)1/2,因此它将在概率上回答“是”超过1/2。