[์ž๋ฃŒ๊ตฌ์กฐ] ํž™

์šฐ์„ ์ˆœ์œ„ ํ๋ž€?

์šฐ์„ ์ˆœ์œ„์˜ ๊ฐœ๋…์„ ํ์— ๋„์ž…ํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ
๋ฐ์ดํ„ฐ๋“ค์ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ„๋‹ค.
์šฐ์„ ์ˆœ์œ„ ํ๋Š” ๋ฐฐ์—ด, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ, ํž™ ์œผ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ์ค‘์—์„œ ํž™(heap)์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ด๋‹ค.

ํž™์ด๋ž€? 

์™„์ „์ด์ง„ํŠธ๋ฆฌ ๊ตฌ์กฐ
์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ๋ฝ‘์•„๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. 
ํž™์€ ์™„์ „ํžˆ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ Level์— ๋”ฐ๋ฅธ ์ •๋ ฌ๋งŒ ์ด๋ฃจ์–ด์ ธ ๋Š์Šจํ•œ ์ •๋ ฌ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. 
(Max Heap์ธ ๊ฒฝ์šฐ ๋ถ€๋ชจ๊ฐ€ ์ž์‹๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , Min Heap์ธ ๊ฒฝ์šฐ ๋ถ€๋ชจ๊ฐ€ ์ž์‹๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•จ) 

ํž™์˜ ์ข…๋ฅ˜ 

Max Heap

  1. ๋ฃจํŠธ ๋…ธ๋“œ์—๋Š” ํ•ญ์ƒ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ์œ„์น˜ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ๋“ค๋ณด๋‹ค ๋ฌด์กฐ๊ฑด ๊ฐ’์ด ์ปค์•ผํ•œ๋‹ค. 

Min Heap

  1. ๋ฃจํŠธ ๋…ธ๋“œ์—๋Š” ํ•ญ์ƒ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด ์œ„์น˜ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ๋“ค๋ณด๋‹ค ๋ฌด์กฐ๊ฑด ๊ฐ’์ด ์ž‘์•„์•ผํ•œ๋‹ค.

ํž™์˜ ๊ตฌํ˜„ 

  1. ํž™์€ ๋ณดํ†ต ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋ฉฐ, ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 
  2. ๋ถ€๋ชจ์˜ ์ธ๋ฑ์Šค๋ฅผ i๋ผ๊ณ  ํ–ˆ์„๋•Œ ์™ผ์ชฝ ์ž์‹์˜ ์ธ๋ฑ์Šค๋Š” 2 * i, ์˜ค๋ฅธ์ชฝ ์ž์‹์˜ ์ธ๋ฑ์Šค๋Š” 2 * i + 1 ์ด๋‹ค.

ํž™์˜ ์‚ฝ์ž… ์—ฐ์‚ฐ

  1. ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์œ„์น˜์— ์‚ฝ์ž…ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.
  2. ํž™์˜ ํŠน์„ฑ์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ๋“ค์˜ ์œ„์น˜๋ฅผ ์กฐ์ •ํ•œ๋‹ค.

ํž™์˜ ์‚ญ์ œ ์—ฐ์‚ฐ 

  1. ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐ ํ•œ๋‹ค.
  2. ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ์œ„์น˜๋กœ ์˜ฎ๊ธด๋‹ค.
  3. ํž™์˜ ํŠน์„ฑ์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ๋“ค์˜ ์œ„์น˜๋ฅผ ์กฐ์ •ํ•œ๋‹ค.

 

์ž๋ฐ”๋ฅผ ์ด์šฉํ•œ ๊ตฌํ˜„

    public void insert(int n) {
        heap[++heapSize] = n;
        int parent = heapSize/2;
        int child = heapSize;
        while(child >= 2 && heap[parent] < heap[child]) {
            SWAP(parent, child);
            child = parent;
            parent = child/2;
        }
    }

    public int delete() {
        int data = heap[1];
        heap[1] = heap[heapSize--];
        int parent = 1;
        int child = 2;
        while(child <= heapSize && heap[parent] < heap[child]) {
            SWAP(parent, child);
            parent = child;
            child = heap[heap[parent * 2] < heap[parent * 2 + 1] ? parent * 2 + 1 : parent * 2];
        }
        return data;
    }

 

https://gmlwjd9405.github.io/2018/05/10/data-structure-heap.html

 

[์ž๋ฃŒ๊ตฌ์กฐ] ํž™(heap)์ด๋ž€ - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

https://aerocode.net/193

 

์šฐ์„ ์ˆœ์œ„ ํ ADT

์ด ๋ธ”๋กœ๊ทธ์˜ ๋ชจ๋“  ์˜ˆ์ œ์ฝ”๋“œ๋Š” ๊นƒํ—ˆ๋ธŒ์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ํฌ์ŠคํŠธ๋Š” ๊ฐœ์ธ์ ์ธ ์šฉ๋„๋กœ ๋‚ด์šฉ์„ ์š”์•ฝํ•œ ๊ฒƒ ์ž…๋‹ˆ๋‹ค. https://github.com/AeroCodeX/ ์šฐ์„ ์ˆœ์œ„ ํ ADT ๋ฐ์ดํ„ฐ์— ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์กด์žฌํ•˜์—ฌ,

aerocode.net