균형 벡터의 빠른 인코딩


10

어떤 에 대해서도 {0,1} 에서 {0,1} 1-1 매핑 가 존재하여 어떤 에 대해서도 벡터 는 "균형"입니다. 즉, 1과 0의 개수가 같습니다. 주어진 우리가 효율적으로 계산할 수 있도록 그러한 를 정의 할 수 있습니까?F n n + O ( log n ) x F ( x ) F x F ( x )nFnn+O(logn)xF(x)FxF(x)

감사.


나는 '효율적인'이라는 말은 O (n) 또는 그 주변을 의미한다고 가정하고 "반복 된 무작위 시험"을 배제 하는가?
Suresh Venkat

@Suresh, "반복 된 무작위 시험"인수를 스케치 할 수 있습니까?
Emil

매핑이 존재 함을 증명하는 한 가지 방법은 확률 적 방법입니다. 무작위로 F를 선택하면 매핑이 약간의 확률로 작동합니다. 그것이 제가 의미 한 바입니다.
Suresh Venkat

1
질문은 완벽하게 정의되어 있지만 제 생각에는 제목이 잘못되었습니다. F가 형이 아닌 한, 언급 된 조건을 만족하는 매핑 F를 "밸런스드 벡터의 인코딩"이라고 부를 수 없습니다. 균형 벡터에 의한 n- 비트 문자열의 인코딩과 비슷합니다 .
이토 쓰요시

아마도 "효율적으로"의 다른 해석에 이르기까지 "완벽하게 정의 된"것입니다. 그러나 이것은 나의 이전 의견의 요점이 아닙니다.
이토 쓰요시

답변:


12

비트 문자열 고려해 봅시다 . 정의 :xnx

  • x if(x,i) = 마지막 비트가 보완 된 비트 문자열 .xi
  • X X - Xb(x) =의 "불균형" :의 1의 개수 의 0의 개수 .xx x

이제 문자열 수정하십시오 . 함수를 고려하십시오 . 관찰 :g ( I ) = B ( F ( X , I ) )xg(i)=b(f(x,i))

  • g(0)=b(x) 입니다.
  • g(n)=g(0) 입니다.
  • 나는|g(i)g(i+1)|=2모든 대해 입니다 . 우리는 하나의 0을 제거하고 하나의 1을 추가하거나 그 반대로 추가합니다.i

이제 과 같은 가 존재합니다 .1 g ( i ) + 1i1g(i)+1

따라서 다음과 같이 비트 문자열 할 수 있습니다. 와 인덱스 의 이진 인코딩을 연결합니다 . 불균형의 절대 값 은 입니다. 또한, 우리는 주어진 를 회복 할 수 있습니다 . 매핑은 bijection입니다.Y F ( X , I ) I Y O ( 로그 N ) 의 X , Y(n+O(logn))yf(x,i)iyO(logn)xy

마지막으로, 추가 의 불균형을 줄이기 더미 비트 로부터 로 .y O ( log n ) 0O(logn)yO(logn)0


세 번째 줄의 b (x)는 b (y) 여야합니다.
Emil

나는 길이가 균일한지 확인하기 위해 문자열 x에 다른 비트를 추가해야한다고 생각합니다 (그래서 일부 i의 경우 g (i)가 0인지 확인할 수 있습니다).
Emil

@Emil : 그 항하지 일부에 대해 0이 될 것이다 ; 의 절대 값이 일부 "정당히 작음" 이면 충분합니다 (대수는 충분하지만 일부 최대 임). I g ( I ) I를 1 명 I을g(i)ig(i)i1i
Jukka Suomela

@Jukka : 아 맞습니다.
Emil

1
그러나 그렇습니다. 맞습니다. 동일한 기본 접근 방식의 많은 변형이 있습니다. 예를 들어, 제안한대로 먼저 패딩 비트를 사용하여 일부 가 0이되도록 할 수 있습니다 . 그러면 인코딩 할 수 비트 쌍을 사용하여 또는 , 즉 여분의 비트; 연결의 결과가 엄격하게 균형을 이루므로 다른 것을 추가 할 필요가 없습니다. I I 01 10 2 로그 ( N )g(i)ii01102log(n)
Jukka Suomela

9

사전 순서를 유지하는 매핑을 사용하십시오. 1이 있는 번째 길이 균형 벡터 를 찾으려면 재귀 적으로 수행하십시오. 인 경우 첫 번째 비트 0을 설정 한 다음 번째 길이 를 찾으십시오. - 나머지 비트 를 완성하기 위해 1을 갖는 벡터 . 그렇지 않으면 첫 번째 비트 1을 설정하고 1 과 함께 -길이 벡터를 찾으십시오 .n n / 2 k ( n - 1knn/2K(N-1)N/2N-1 개(K)-(N-1k(n1n/2)k(n1)n/2n1(N-1)N/2-1k(n1n/2)(n1)n/21


1
그리고 이항 계수의 값을 재사용하여 다음 필요한 이항 계수를 계산하면 전체 알고리즘이 O (n) 시간으로 실행됩니다.
이토 쓰요시

감사! 이것은 말이됩니다. 실행 시간은 계산 모델에 달려 있다고 생각합니다. 단위 시간으로 n 비트 숫자에 대한 작업을 수행 할 수 있으면 Tsuyoshi Ito의 구현은 O (n) 시간에 실행됩니다. 반면에 비트 연산을 계산하면 시간이 O (n ^ 2)가 될 것이라고 생각합니다.
Piotr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.