일단 나무가 있으면 도로의 각 분기점에서 두 분기에 0과 1을 할당하는 방법은 임의로 선택할 수 있습니다. 따라서 할당을 정식으로 만드는 방법이 없으면 각 심볼에 비트를 할당하는 방법에 대한 "정답"이 없습니다. r
은 011
이어야합니다. r
은 3 비트 값이 될 수 있습니다. (이 주파수 집합에 대해서는 길이가 3 비트 여야합니다.)
중요한 것은 디코더가 0과 1의 동일한 할당을 인코더로 얻는 것입니다. 직접 코드를 전송하거나 길이를 보내고 0과 1을 정식 방식으로 할당 할 수 있습니다. 예를 들어, zip, gzip, png 등에서 사용되는 압축 알고리즘은 각 심볼에 대한 비트 수만 보냅니다. 그런 다음 가장 작은 길이로 시작하여 해당 길이의 모든 기호에 0부터 시작하는 코드가 지정됩니다. 기호에는 표현 정수로 정렬 된 기호가 순서대로 코드가 지정됩니다. 예 : 문자의 ASCII 정렬 순서. 다음 길이의 경우 비트가 오른쪽에 추가되고 코드 카운팅이 계속됩니다. 이렇게하면 적절한 접두어 코드가 보장되고 왼쪽에서 오른쪽으로 디코딩됩니다. 이 경우에 따라서
, 코드 길이는 다음과 같습니다
2: _
3: a, e, r
4: d, f, n
5: b, h, t
6: i, k, o, s, u, v
그래서 우리는 (각 길이 내에서 알파벳 순서로 기호) 얻을 : 여기
_: 00
a: 010
e: 011
r: 100
d: 1010
f: 1011
n: 1100
b: 11010
h: 11011
t: 11100
i: 111010
k: 111011
o: 111100
s: 111101
u: 111110
v: 111111
비트 할당이 무엇 다릅니다 당신의 책에서 세 가지 기호 중 두 가지를 찾으십시오.완전히 다른 좋은 접두사 코드 선택의 예로서, 모든 비트를 반전시킬 수 있습니다. 그렇지 않으면 비트 열의 모든 하위 집합을 바꿀 수 있습니다. 예 : 첫 번째 열 전체를 뒤집을 수 있습니다. 각 길이의 기호 순서를 변경할 수 있습니다. 비트 순서를 반대로 바꿀 수 있습니다. 실제로, zip 등은 위에서 보인 비트들을 역순으로 저장하므로, 디코딩은 최하위 비트부터, 즉 오른쪽에서 왼쪽으로 수행됩니다.
나는 당신이 질문을 가지고 있다고 생각하지 않습니다. 그는 이미 나무를 만드는 법을 알고 있습니다. 그는 지점에 0과 1을 할당하는 방법을 궁금해합니다. –
질문을 읽으십시오 : "*하지만 나무에 요소를 배치하는 법칙을 도출 할 수는 없습니다. *" – 0605002
질문을 읽으십시오 (그는 말합니다 : 질문입니다) : "_ 그러나 두 개 이상의 문자가 같은 빈도 궁금한 점은 우리가 어떻게 입장을 결정할 것인가? " –