ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알고리즘] 최소힙
    Algorithm 2020. 9. 16. 13:57
    반응형
    static public class minHeap {
            private ArrayList<Integer> heap;
    
            public minHeap() {
                heap = new ArrayList<>();
                heap.add(0);
            }
    
            //        삽입
            public void insert(int val) {
                heap.add(val);
                int p = heap.size() - 1;
    
    //            힙 사이즈 -1이 1보다 작아질 때까지 진행 -> root로 이동
                while (p > 1 && heap.get(p / 2) > heap.get(p)) {
    //                부모보다 자식 노드가 더 작으면 바꾼다 (최소힙)
                    int tmp = heap.get(p / 2);
                    heap.set(p / 2, heap.get(p));
                    heap.set(p, tmp);
    
                    p = p / 2; // p는 부모 값으로 변경 (부모 노드 인덱스로 이동)
                }
            }
    
            // 삭제
            public int delete() {
    //            힙 사이즈 -1이 1보다 작으면 0 리턴
                if (heap.size() - 1 < 1)
                    return 0;
    
    //            삭제할 노드
                int deleteItem = heap.get(1);
    
    //            root에 가장 마지막 값 넣고 마지막 값 삭제
                heap.set(1, heap.get(heap.size() - 1));
                heap.remove(heap.size() - 1);
    
                int pos = 1;
                while ((pos * 2) < heap.size()) {
                    int min = heap.get(pos * 2);
                    int minPos = pos * 2;
    
                    if (((pos * 2 + 1) < heap.size()) && min > heap.get(pos * 2 + 1)) {
                        min = heap.get(pos * 2 + 1);
                        minPos = pos * 2 + 1;
                    }
                    if(heap.get(pos) < min)
                        break;
    
    //                부모 자식 노드 교환
                    int tmp = heap.get(pos);
                    heap.set(pos,heap.get(minPos));
                    heap.set(minPos,tmp);
                    pos = minPos;
                }
                return deleteItem;
            }
        }
    반응형

    'Algorithm' 카테고리의 다른 글

    [알고리즘] 중복없는 조합  (0) 2020.09.16
    [알고리즘] 우선순위 큐  (0) 2020.09.16
    [알고리즘] 버블정렬  (0) 2020.09.16
    [알고리즘] 최소공배수 최대공약수  (0) 2020.09.15
    [알고리즘]N진법 변환  (0) 2020.09.15

    댓글

Designed by Tistory.