알고리즘/이론과 문법

Huffman Decoding 코드분석

lipnus 2018. 7. 13. 16:35
반응형

Hoffman 개념

출처: http://wooyaggo.tistory.com/95



Comparable 인터페이스

Comparable 인터페이스는 객체간의 비교를 가능하게 해주는 인터페이스이다. 해당 인터페이스를 구현(implements)한 클래스는 반드시 compareTo 메소드를 정의해야 한다.

출처: http://wooyaggo.tistory.com/95

compareTo 메소드란?

코드를 통해 확인해보자. 아래 코드의 -5가 출력 된다. (b를 기준으로 삼았을때 a 는 -5만큼 앞쪽)

  1. Integer a = new Integer(5);
  2. Integer b = new Integer(10);
  3. int result = a.compareTo(b);
  4. System.out.println(result);

파라메터를 기준으로 삼아 앞쪽에 있으면 음수, 뒤쪽에 있으면 양수값이 나온다. 코드로 바꾸면 이정도가 될 것이다.

  1. public int compareTo(Integer target) {
  2. return this - target;
  3. }

자바에서는 원시형(primitive) 타입의 Wrapper 클래스들은 모두 compareTo() 메소드를 오버라이드있다. 따라서 쉽게 객체간의 비교를 할 수 있다. (compareTo() 메소드가 구현 객체는 Arrays.sort() 메소드를 통해 자동 정렬 가능)

  1. int arr = { 5, 4, 8, 1, 3};
  2. Arrays.sort(arr); // 이렇게 쉽게 정렬할 수 있다.

사용자 생성 클래스를 쉽게 정렬하려면?

Comparable 인터페이스를 구현(implements)하면 Arrays.sort() 메소드를 사용하여 쉽게 정렬할 수 있다.

  1. public class Circle {
  2. double radius;
  3. public Circle(double radius) {
  4. this.radius = radius;
  5. }
  6. }
  7. public static void main(String[] args) {
  8. Circle c1 = new Circle(5);
  9. Circle c2 = new Circle(10);
  10. c1.compareTo(c2);
  11. }

위와 같은 클래스로 만든 두 객체를 비교하기위해 Comparable 인터페이스를 구현해주자.

  1. public class Circle implements Comparable<Circle> {
  2. double radius;
  3. public Circle(double radius) {
  4. this.radius = radius;
  5. }
  6. @Override
  7. public int compareTo(Circle c) {
  8. return this.radius - c.radius;
  9. }
  10. }

구현이 완료되었다면 아래와 같이 해당 객체들은 쉽게 정렬이 가능하다.

  1. Circle a = new Circle(5);
  2. Circle b = new Circle(1);
  3. Circle c = new Circle(3);
  4. Circle[] circles = {a, b, c};
  5. Arrays.sort(circles);



toCharArray()


String 문자열을 한글자씩 char배열에 할당



  1.  String a="안녕하세요";
    char[] as = a.toCharArray();

    for(int i=0; i < as.length ;i++ ) {
        System.out.println(as[i]);
    }

as[0]: 안

as[1]: 녕

as[2]: 하

as[3]: 세

as[4]: 요



PriorityQueue(우선순위 큐)


일반적으로 Queue라는 자료구조는 '선입선출'(First-In, First-Out)의 대기열 규칙(queuing discipline)을 가지고 있다. 말그대로 먼저들어온 놈이 먼저 나간다는 것이다. 


하지만 JAVA에서 제공하는 'PriorityQueue'는 우선순위를 결정하여 들어온 순서와 상관없이 그 우선순위가 높은 엘리먼트가 나가게 된다.

 

출처: http://asuraiv.blogspot.com/2015/11/java-priorityqueue.html




assert



출처: http://javacan.tistory.com/entry/79






instance of


참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 instanceof 연산자를 사용합니다. 주로 조건문에 사용되며, instanceof의 왼쪽에는 참조변수를 오른쪽에는 타입(클래스명)이 피연산자로 위치합니다. 그리고 연산의 결과로 boolean값인 true, false 중의 하나를 반환 합니다.

출처: http://arabiannight.tistory.com/entry/301 [아라비안나이트]

반응형

'알고리즘 > 이론과 문법' 카테고리의 다른 글

크루스칼 다익스트라 알고리즘 차이  (0) 2019.01.19
인덱스 트리  (0) 2019.01.17
String, StringBuffer, StringBuilder  (0) 2018.12.23
객체(Object) 정렬  (0) 2018.09.17
BFS level 구하기  (0) 2018.08.20