길이가 같은 두 줄 사이 의 해밍 거리는 해당 기호가 다른 위치 수입니다.
하자 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
당신이 게시 한 최고 점수를 얻을 것이다 . 그러나 귀하의 답변이 최적이 아니더라도 다른 사람이 이길 수 없다면 여전히 점수를 얻을 수 있습니다.
답변 예 및 작동 예
(이 답변은 아직 확인되지 않은 상태입니다. 독립적 인 확인을 받으면 감사하겠습니다.)
ETHproduction 덕분에 :
- 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 8 코어 프로세서 및 Radeon HD 4250이 포함 된 표준 우분투 설치입니다. 또한 코드를 실행할 수 있어야합니다.
최고의 답변
- Christian Sievers의 2, 5, 21, 83, 361 점은 4 점 입니다. C ++
- 점수의 5 가 2, 5, 21, 83 fənɛtɪk 372. 자바 스크립트