: μ°μ μμκ° λμ λ°μ΄ν°κ° λ¨Όμ λκ°
& ꡬνλ°©λ²
1. λ°°μ΄
: μμ μ΄μ§νΈλ¦¬λ‘, μ°μ μμ νλ₯Ό μν΄ λ§λ€μ΄μ§ μλ£κ΅¬μ‘°μ
& ννμ 쑰건
1. μμ μ΄μ§νΈλ¦¬
2. λΆλͺ¨λ
Έλ >= μμλ
Έλ
& ννμ μ’
λ₯
1. μ΅λ νν
2. μ΅μ νν: μμμλ‘ λ£¨νΈλ‘
#include <stdio.h>
#include <stdlib.h>
#define MAX_ELEMENT 200
typedef struct {
int key;
}element;
typedef struct {
element heap[MAX_ELEMENT];
int heap_size;
}HeapType;
//μμ±ν¨μ
HeapType* create() {
return (HeapType*)malloc(sizeof(HeapType));
}
//μ΄κΈ°ν ν¨μ
void init(HeapType* h) {
h->heap_size = 0;
}
//μ½μ
ν¨μ(μ΅λ νν)
void insert_max_heap(HeapType* h, element item) {
int i;
i = (++h->heap_size);
while (i != 1 && item.key > h->heap[i / 2].key) { //λΆλͺ¨λ³΄λ€ ν¬λ©΄ λ°κΏ
h->heap[i] = h->heap[i / 2];
i /= 2;
}
h->heap[i] = item;
}
//μμ ν¨μ(μ΅λ νν)- λΆλͺ¨λ₯Ό λμ΄λ΄λ¦° ν λ§μ§λ§μ λμ
κ·Έλ¦¬κ³ λ°ν
element delete_max_heap(HeapType* h) {
int parent, child;
element item, temp;
item = h->heap[1]; //λ°νν κ° μ μ₯(λ§μ§λ§μ λ°ν)
temp = h->heap[(h->heap_size)--]; //λ§μ§λ§ λ
Έλ(μλ‘ λμ΄μ¬λ¦΄ κ²μ)
parent = 1; //λ§μ§λ§ κ°μ μ§μ΄λ£μ μΈλ±μ€
child = 2;
while (child <= h->heap_size) { //heap μ¬μ΄μ¦ μ΄λ΄μΌ λ λ°λ³΅
if ((child < h->heap_size) && (h->heap[child].key) < h->heap[child + 1].key) //ν° μμ μ ν(μ€λ₯Έμͺ½μ΄ λ ν¬λ©΄ +1)
child++;
if (temp.key >= h->heap[child].key) break; //μ μμΉλ₯Ό μ°Ύμ κ²½μ°(λ)
h->heap[parent] = h->heap[child]; //λΆλͺ¨ λμ΄λ΄λ €(μμ§ μ μμΉ λͺ»μ°Ύμ κ²½μ°)
parent = child;
child *= 2;
}
h->heap[parent] = temp;
return item;
}
: μ΅λ νν μ λ ¬μ ν΅ν΄ O(nlogn) μκ° μμ μ λ ¬
-> μ΅λ ννλ₯Ό ν΅ν΄ μ½μ
ν, νλ μ© μμ νλ©΄μ λ°°μ΄μ 맨 λ κ°μ λ£μ΄μ£Όκ³ , νλ μ© μΆλ ₯ν΄μ£Όλ©΄λ¨.
: λΉλμ λμ κΈμμ μμ ν¬κΈ°μ μ½λ ν λΉ (μμκ²λΌλ¦¬ ν©μΉκΈ°)
& λ°°μ΄ λ΄μ© λ΄ μΈμ΄λ‘ μ 리νκΈ°
μ°μ μμ νλ μ°μ μμκ° λμ κ²μ λ¨Όμ λΉΌλ΄λ νμ΄λ€. μ°μ μμνλ λ°°μ΄, μ°κ²°λ¦¬μ€νΈ ννλ₯Ό ν΅ν΄ ꡬνν μ μκ³ , λ°°μ΄μ΄λ μ°κ²°λ¦¬μ€νΈκ° μ λ ¬λμ΄ μλλ μλλμ λ°λΌ μκ°λ³΅μ‘λκ° λ¬λΌμ§λ€. ννλ μ°μ μμ νλ₯Ό μν΄μ λ§λ€μ΄μ§ μλ£κ΅¬μ‘°λ‘, μμ μ΄μ§νΈλ¦¬μ΄λ©° μ΅λ ννμ κ²½μ°μλ λΆλͺ¨λ
Έλκ° νμ μμλ
Έλλ³΄λ€ ν¬κ±°λ κ°μμΌνλ€. (μ€λ³΅κ° νμ©) μ΅μ ννμ κ²½μ°μλ λΆλͺ¨λ
Έλκ° νμ μμλ
Έλλ³΄λ€ μκ±°λ κ°μμΌνλ κ²μ΄λ€. ννμ μ½μ
μ°μ°μ 맨 λ§μ§λ§ λ
Έλμ μ½μ
ν μ¬κ΅¬μ±μ ν΄μ£Όλ κ²μ΄κ³ , μμ μ°μ°μ 맨 루νΈλ₯Ό λ°ν ν, λ§μ§λ§ κΊΌλ₯Ό 루νΈλ‘ λμ΄μμ κ°λ±μν€λ κ²μ΄λ€. μ΄ ννλ₯Ό μ΄μ©ν΄μ μ λ ¬μ ν μ μλ€.(νν μ λ ¬) μ½μ
μ°μ°μ ν΅ν΄ μ½μ
ν, μ΅λ ννλ₯Ό ν΅ν΄ μμ λ₯Ό νλ©°, λ°°μ΄μ λ§μ§λ§ μΈλ±μ€μ λ£λ κ²μ΄λ€. λ μ΄λ¬ν ννλ₯Ό μ΄μ©ν κ²μ΄ ννλ§ μ½λμΈλ°, μ΄λ κ°μ₯ λΉλμκ° λμ κΈμμ μμ μ½λλ₯Ό λΆμ¬νλ κ²μ΄λ€.