잘 시간에 허프만 코드를 계산하는 최악의 경우 최적의 알고리즘이 있다고 알려져있다 . 이것은 두 가지 직교 방식으로 개선되었습니다.
고유 주파수 세트가 작은 경우 (예 : 크기 ) 최적의 프리픽스 프리 코드를 더 빠르게 계산할 수 있습니다 . [Munro and Spira, 1976]을 사용하여 주파수를 정렬하여 의 작은 값을 활용 하고 허프만을 계산하십시오. 정렬 된 주파수에서 선형 시간으로 트리. 이것은 O ( n lg σ ) 의 해를 산출합니다
등가 코드를 계산 하는 알고리즘이 있습니다. 여기서 는 고유 코드 워드 길이 의 수입니다 [Belal and Elmasry].
현재 최선의 복잡성을 개선하기 위해, 그 기술을 결합 할 수있는 방법이 있나요 ?
2010 년 ARXIV에 게시 된 Elmasry, STACS 2006 SEEM TO BEONG OF O (nk) 결과 (http://arxiv.org/abs/cs/0509015) 정렬되지 않은 입력에 대한 연산 - 정렬 된 입력에 대한 연산
( Huffman의 코드에 대한 알고리즘 으로 정렬 ) 및 (선물 기반 알고리즘)에서 평면 볼록 껍질의 계산이 복잡하다는 점과 유사 합니다. 랩핑)은 Kirkpatrick과 Seidel의 알고리즘으로 대체되었습니다 (나중에 형식의 복잡성으로 최적 인 것으로 입증 ) Prefix Free 코드의 경우, 대 는 복잡도 또는 심지어 의 알고리즘 가능성을 제안합니다. 여기서 는 길이의 코드 워드 수입니다.O ( n lg n ) O ( n h ) O ( n lg h ) O ( n H ( n 1 , … , n k ) O ( n lg n ) O ( n k ) O ( n lg k ) O ( n H ( n 1 )n i i n i n i 덮는 볼록 껍질의 가장자리의 비유를 사용하여 심벌을 덮는 코드 길이를 가리킨다 .
간단한 예는 주파수의 (둥근) 로그 값을 정렬하면 ( 워드 RAM 모델에서 선형 시간으로) 선형 시간에서 최적의 프리픽스 프리 코드를 제공하지 않음을 보여줍니다.
- 를 들어 , 및F (1) = 1 / 2 - ε F (2) = F (3) = 1 / 4 + ε
- 이므로 로그 정렬 순서가 변경되지 않습니다
- 그러나 3 개의 비용 중 2 개의 코드 는 최적의 것보다 비트 더 비싸다 .
또 다른 흥미로운 질문은 가 클 때의 복잡성을 줄이는 것입니다 . 즉 모든 코드의 길이가 다릅니다.
- 예를 들어 때 주파수는 모두 고유 한 로그 값입니다. 이 경우 워드 RAM 에서 선형 시간으로 주파수를 정렬하고 허프만 코드를 선형 시간으로 계산할 수 있으므로 (로그 값을 정렬하면 값을 정렬하기에 충분하므로) 전체 선형 시간이 발생합니다. Belal과 Elmasry 알고리즘 의 보다 훨씬 낫습니다 .θ ( LG N ) , N (2)