본문 바로가기
컴퓨터공학 기초/자료구조

[자료구조] 힙(Heap)이란 ?

by 상용최 2020. 2. 11.
반응형

힙(Heap)이란 ?

  • 완전이진트리의 일종
  • 완전이진트리와는 다르게 중복값을 허용한다.
  • 최댓값이나 최솟값을 빠르게 찾아내기 위해 만들어진 자료구조

힙(Heap)의 종류

  • 최대힙 : 루트의 값이 가장 큰 힙
  • 최소힙 : 루트의 값이 가장 작은 힙

 

힙(Heap)의 사용사례

  • 우선순위 큐

힙(Heap)의 구현

  • 구현에는 보통 배열을 이용한다. 일반적으로 편하게 사용하기 위해서 0번째 인덱스는 비워둔다.
  • 왼쪽자식의 인덱스 : 부모의 인덱스*2
  • 오른쪽자식의 인덱스 : (부모의 인덱스*2) +1
  • 부모의 인덱스 : 자식의 인덱스/2
public class MaxHeap  {
    public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());
        Heap heap = new Heap();
        for(int i=0; i<n; i++) {
            int k = Integer.parseInt(reader.readLine());
            if(k==0) {
                if(heap.size == 0) {
                } else {
                    heap.pop();
                }
            } else {
                heap.push(k);
            }
        }
    }
}
class Heap{
    int[] heap = new int[10000];
    int size = 0;

    public void swap(int x,int y){
        int temp = heap[x];
        heap[x] = heap[y];
        heap[y] = temp;
    }
    public void push(int data){
        heap[++size] = data;
        for(int i=size;i>1;i = i/2){
            int parent = i/2;
            if(heap[i]>heap[parent]){
                swap(i,parent);
            }else{
                break;
            }
        }

        System.out.print("");
    }

    public void pop(){
        System.out.print(heap[1] + " ");
        heap[1] = heap[size];
        heap[size--] = 0;
        for(int i=1; i*2<=size;) { //삭제 후 1에서 부터 힙으로 만들어주는 과정
            if(heap[i] > heap[i*2] && heap[i] > heap[i*2+1]) {
                break;
            }else if(heap[i*2] > heap[i*2+1]) {
                swap(i, i*2);
                i = i*2;
            } else {
                swap(i, i*2+1);
                i = i*2+1;
            }
        }
        System.out.print("");
    }
}
반응형

'컴퓨터공학 기초 > 자료구조' 카테고리의 다른 글

[자료구조] 해쉬(Hash)란?  (0) 2020.02.15
[자료구조] 배열 vs List 비교하기  (0) 2020.02.10

댓글