2017-01-23 1 views
-4

n-1 비트를 사용하여 n 비트를 포함하는 숫자를 나타내는 일반적인 방법이 있습니까? 예 : 1001은 4 비트로 XXX where X = {0|1}과 3 비트를 사용합니다. 또한 매핑은 충돌없이 원본 바이너리를 검색 할 수 있어야합니다.1 비트 씩 줄이기

page은 지금까지 비트 수를 계산하려했지만 비트 수를 줄이지 않은 가장 관련있는 참조입니다.

편집 : 나는 소리가 나지 않는 것을 알았지 만, 그렇게 할 수있는 해결 방법이 있다면 궁금해!

+3

그래서 압축 할 여덟 개 숫자 사이에 일대일 매핑을 설정 관리하는 경우는 매우 영리한 것 n 비트 데이터를 'n-1'로 변환합니까? 시원한. 그런 다음 'n-1'을 'n-2'로 압축하고 0으로 낮 춥니 다. 완벽한 압축. 확실히 노벨상을 받게 될 것입니다. –

+1

어떻게 그렇게 할 수 있습니까? – OldProgrammer

+0

4 비트는 16 개의 가능한 값을 인코딩합니다. 3 비트는 8 개의 가능한 값을 인코딩합니다. 그래서 대답은 아니오입니다. – user3386109

답변

3

n 비트에는 2^n 가능한 값이 있고 (n-1) 비트에는 2^(n-1) 개의 값이 있습니다. 따라서 이전에서 후자로 무손실로 변환 할 수 없습니다.

은 전혀 할 수 있다면, 당신은 또한 재귀 N-1 비트 N-2 비트를 사용하여이 등 모든 것이 0 비트 : 당신은 당신이 링크 된 페이지에서 misleaded 얻을

으로 표현할 수있을 것이다 나타낼 수 이는 x &= x-1이 비트 문자열에서 1을 제거한다고 설명합니다.

10100 
& 10011 
= 10000 
+0

나는 당신의 요점을 여기에서 본다! 질문을 게시하는 동안 나는 처음부터이 것을 알고있었습니다. 우리가 비트 수를 줄일 수 있는지 알아보기 위해이 접근법을 따르려고했습니다. 아무튼, 설명 해줘서 고마워. – hmofrad

1

당신은 16 개 숫자

0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111 

000,001,010,011,100,101,110,111. 
+1

나는 당신의 예제를'n = 2'로 줄여 더 명확하게 만들 수 있다고 생각합니다 :) 또는'n = 1' ... –

관련 문제