等长的两个字符串之间的汉明距离是相应符号不同的位置数。
让P
是长度为二进制串n
和T
是长度为二进制字符串2n-1
。我们可以按从左到右的顺序计算到每个长度子字符串n
之间的汉明距离,并将它们放入数组(或列表)中。P
n
T
汉明距离序列示例
让P = 101
和T = 01100
。从这对中得到的汉明距离的顺序为2,2,1
。
亲密关系的定义
现在让我们考虑两个这样的汉明距离序列。说x = (0, 2, 2, 3, 0)
和y = (2, 1, 4, 4, 2)
作为例子。我们说是x
,如果y
是close
,y <= x <= 2*y
或者是x <= y <= 2*x
。这里,标量乘法和不等式是按元素进行的。也就是说,对于两个序列A
和B
,A <= B iff A[i] <= B[i]
为所有指数i
。
注意,汉明距离序列通过这种比较方式形成了偏序。换句话说,许多序列对既不大于也不等于也不小于或等于彼此。例如(1,2)
和(2,1)
。
因此,使用上面的示例,(0, 2, 2, 3, 0) <= 2*(2, 1, 4, 4, 2) = (4, 2, 8, 8, 4)
但(0, 2, 2, 3, 0)
不大于(2, 1, 4, 4, 2)
。也(2, 1, 4, 4, 2)
不得小于或等于2*(0, 2, 2, 3, 0) = (0, 4, 4, 6, 0)
。结果x
和y
彼此不亲近。
任务
为了增加n
起始位置n=1
,请考虑所有可能P
的长度为n
且T
长度为的二进制字符串对2n-1
。有2^(n+2n-1)
这样的对,因此有许多汉明距离序列。但是,这些序列中的许多序列将是相同的。任务是找到最大的汉明距离序列集的大小,以使没有两个序列彼此靠近。
您的代码应为的每个值输出一个数字n
。
得分了
一般来说,您的分数是n
您的代码在5分钟内到达我的计算机的最高分数(但请继续阅读)。时间是用于总运行时间,而不是仅用于该时间n
。
为了给出非最佳答案的分数,因为要找到最佳答案可能很困难,所以我们将需要一个稍微微妙的评分系统。您的分数是最高值,n
对于任何小于此值的大小,没有其他人为此发布更高的正确答案。例如,如果您输出2, 4, 21
而其他人输出,2, 5, 15
则您只会得分,1
因为其他人对的答案更好n = 2
。如果您输出,2, 5, 21
那么3
无论其他人输出什么,您都将得分,因为这些答案都是最佳的。显然,如果您拥有所有最佳答案,那么您将获得n
您发布的最高分数。但是,即使您的答案不是最佳答案,如果没有其他人能打败它,您仍然可以获得分数。
示例答案和工作示例
(此答案尚未确认。将不胜感激地接受独立验证。)
感谢ETHproductions:
- n = 1给出2。
- n = 2给出5。
- n = 3给出21。
让我们n = 2
更详细地看。在这种情况下,汉明距离序列的完整列表(在此由元组表示)为:
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
我们可以看到它(0,0)
与其他任何元组都不接近。事实上,如果我们采取(0, 0)
,(0, 1)
,(1, 0)
,(2, 1)
,(1,2)
则这些元组没有接近任何其他人。这给出了一个得分5
的n = 2
。
对于n = 3
不同的汉明距离序列的完整列表是:
[(0, 0, 0), (0, 0, 1), (0, 1, 1), (0, 1, 2), (0, 1, 3), (0, 2, 1), (0, 2, 2), (0, 2, 3), (0, 3, 0), (0, 3, 1), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 0), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3, 0), (1, 3, 1), (1, 3, 2), (2, 0, 1), (2, 0, 2), (2, 0, 3), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 0), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 3, 1), (2, 3, 2), (2, 3, 3), (3, 0, 2), (3, 0, 3), (3, 1, 0), (3, 1, 1), (3, 1, 2), (3, 2, 0), (3, 2, 1), (3, 2, 2), (3, 3, 2), (3, 3, 3)]
在这些48
序列中,我们可以选择一组大小,21
以便该组中没有对彼此靠近。
语言和图书馆
您可以使用任何喜欢的语言和库。在可行的情况下,能够运行您的代码会很好,因此请尽可能提供有关如何在Linux中运行/编译代码的完整说明。
我的机器计时将在我的64位机器上运行。这是带有8GB RAM,AMD FX-8350八核处理器和Radeon HD 4250的标准ubuntu安装。这也意味着我需要能够运行您的代码。
领先答案
- 的分数4 2,5,21,83,361由Christian的Sievers。C ++
- 得分的5 2,5,21,83,372由fənɛtɪk。Java脚本