채소 새:하프 만 나무 와 하프 만 코딩
3826 단어 하프 만 나무
하프 만 나 무 는 가장 좋 은 이 진 트 리 다.
지난번 검색 한 이 진 트 리 와 마찬가지 로 하프 만 트 리 도 특정한 구조 규칙 이 있 습 니 다.
1.하프 만 트 리 에 저장 할 데 이 터 를 각각 트 리 만 들 기
2.이 트 리 들 을 크기 순 으로 정렬 합 니 다(자바 에 서 는 우선 대기 열 Priority Queue 를 사용 하 는 것 이 매우 편리 합 니 다)
3.가장 작은 나무 두 개 를 가서 그들 을 한데 모 으 고 합 친 나 무 를 대열 에 다시 놓 아 줍 니 다.이렇게 반복 합 니 다..................................................
4.마지막 남 은 나 무 를 뿌리 노드 로 설정 합 니 다.
이렇게 해서 하프 만 나 무 는 구조 가 완성 되 었 습 니 다~
검사 방법 은 하프 만 나무의 모든 잎 결점 의 인 코딩 을 모두 지 는 것 이다.왼쪽으로 가면 0 이 고 오른쪽으로 가면 1 이다.(자신의 규정 에 따라)
그리고 코드 에 따라 나 무 를 그 려 서 검사~
우선 노드 클래스:
/**
*
* @author Micro
*
*/
public class HafNode implements Comparable<HafNode>{
private HafNode father;
private HafNode left;
private HafNode right;
private int num;
//
public HafNode (int num) {
this.num=num;
}
public HafNode getFather() {
return father;
}
public void setFather(HafNode father) {
this.father = father;
}
public HafNode getLeft() {
return left;
}
public void setLeft(HafNode left) {
this.left = left;
}
public HafNode getRight() {
return right;
}
public void setRight(HafNode right) {
this.right = right;
}
public int getNum() {
return num;
}
public void setNum(int i) {
this.num = i;
}
//
@Override
public int compareTo(HafNode o) {
//
int P = o.getNum();
return num-P;
}
}
그 다음 에 나 무 를 만 드 는 과정 과 하 프 만 인 코딩 을 출력 합 니 다.
import java.util.PriorityQueue;
/**
*
*
* @author Micro
*
*/
public class HafTest {
//
private static HafNode root;
//
public static void main(String[] args) {
//
int[] a = { 1, 4, 3, 5, 6 ,4,6,7,6};
//
PriorityQueue<HafNode> queue = new PriorityQueue<HafNode>();
HafTest ht = new HafTest();
//
for (int i = 0; i < a.length; i++) {
HafNode hf = new HafNode(a[i]);
queue.add(hf);
}
ht.HafTree(queue);
String Code = "";
ht.print(root, Code);
}
//
public void HafTree(PriorityQueue<HafNode> queue) {
while (queue.size() > 1) {
HafNode min1, min2;
min1 = queue.poll();
min2 = queue.poll();
//
HafNode result = new HafNode(min1.getNum() + min2.getNum());
result.setLeft(min1);
result.setRight(min2);
min1.setFather(result);
min2.setFather(result);
queue.add(result);
}
root = queue.peek();
}
//
public void print(HafNode a, String Code) {
if (a.getLeft() == null && a.getRight() == null) {
System.out.println(a.getNum() + " :" + Code);
}
if (a.getLeft() != null) {
print(a.getLeft(), Code + '0');
}
if (a.getRight() != null) {
print(a.getRight(), Code + '1');
}
}
}
출력 결과:
4 의 하프 만 인 코딩:000
1 의 하프 만 인 코딩:0010
3 의 하프 만 인 코딩:0011
4 의 하프 만 인 코딩:010
5 의 하프 만 인 코딩:011
6 의 하프 만 인 코딩:100
6 의 하프 만 인 코딩:101
6 의 하프 만 인 코딩:110
7 의 하프 만 인 코딩:111
음~~틀 리 지 않 았 어~~
이렇게 해서 가장 기본 적 인 하프 만 트 리 가 완성 되 었 습 니 다.다음은 이 트 리 를 이용 하여 파일 의 압축 을 실현 하 는 것 입 니 다.화 이 팅~~~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JS 하프 맨 수 실현function Huffman(str) { // this.str = str; // this.keyCountMap = null; // this.codeKeyMap = {}; // this.keyCodeMap = {};...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.