DEAP ÀڷᱸÁ¶ + ÇãÇÁ¸¸ Æ®¸® ¶óÀ̺귯¸®

Deap Ŭ·¡½º

DEAP(double-ended heap)Àº Èü(heap) ±¸Á¶·Î¼­ ÀÌÁß ¿ì¼± ¼øÀ§ Å¥(double-ended priority queue)ÀÇ ÀÏÁ¾ÀÔ´Ï´Ù. Áï, STL¿¡ ÀÖ´Â prority_queue¿Í ºñ½ÁÇÑ ±â´ÉÀ» ÇÕ´Ï´Ù. ÀÌ ÀڷᱸÁ¶ÀÇ ¸ñÀûÀº Å©±â°¡ ¼­·Î ´Ù¸¥ ¿©·¯ ÀÚ·á°¡ ÀÖÀ» ¶§, ÀÌÁß °¡Àå Å« °ÍÀ̳ª °¡Àå ÀÛÀº °ÍÀ» ¼ø¼­´ë·Î ºü¸£°Ô °¡Á®¿À´Â °ÍÀÔ´Ï´Ù. À̸¦ ±¸ÇöÇÑ ÀÚ·á ±¸Á¶·Î min heap°ú max heapÀÌ °¢ Ãþº°·Î ¹ø°¥¾Æ°¡¸ç ÀÖ´Â Min-max heapµµ ÀÖÀ¸³ª, µÎ heapÀ» ¼­·Î µû·Î µÐ´Ù´Â ¾ÆÀ̵ð¾î¸¦ °¡Áö°í ±¸ÇöÇÑ DEAPÀÌ ´õ Á÷°üÀûÀÌ¸ç ±¸ÇöÇϱ⵵ ´õ Àç¹ÌÀÖ½À´Ï´Ù.

¸µÅ©µå ¸®½ºÆ®, Æ®¸®, Çؽ¬ Á¤µµ´Â MFC¿¡µµ ±¸ÇöµÅ ÀÖÀ» Á¤µµ·Î Ä£±ÙÇÑ ÀÚ·á ±¸Á¶ÀÌÁö¸¸, ÀÚ·á ±¸Á¶ Ã¥ÀÇ µÞºÎºÐ ¹«·Æ¿¡ ³ª¿À´Â Èü °°Àº °ÍÀº ´ë°³ ³¸¼³¾î º¸ÀÔ´Ï´Ù. ÇÏÁö¸¸ À̰͵éÀº ÀÇ¿Ü·Î ¸Å¿ì À¯¿ëÇÕ´Ï´Ù. ÀÚ·á »ðÀÔ, ÃÖ´ë°ª ¾ò±â, ÃÖ¼Ò°ª ¾ò±â ÀÛ¾÷À» ¸ðµÎ log n¸¸¿¡ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´õ±¸³ª °ªÀ» ¾òÀ¸¸é¼­ ÀÌ ÀڷḦ »èÁ¦ÇÏ´Â µ¥ °É¸®´Â ½Ã°£ÀÌ log nÀÌÁö °ª ÀÚü¸¦ ¾ò´Â ½Ã°£Àº »ó¼öÀÔ´Ï´Ù. ÀÌ nÀº ÀÚ·áÀÇ Å©±â°¡ ¾Æ´Ï¶ó ÈüÀÇ Å©±âÀ̱⠶§¹®¿¡, ¼ö½Ê¸¸ °³ÀÇ ÀÚ·á°¡ ½Ç½Ã°£À¸·Î µé¾î¿À°í ÀÖ°í, ÀÌÁß¿¡¼­ °¡Àå Áß¿äÇÑ 100°³ÀÇ ÀڷḸÀ» Ãß·Á³½´Ù°í ÇÒ ¶§, ÀڷḦ ¸ðµÎ ¸Þ¸ð¸®·Î Àоî Á¤·ÄÇÏÁö ¾Ê°íµµ 100Ä­ÀÇ ¹è¿­ ¾È¿¡¼­ ÀÌ ÀÏÀ» ÇÒ ¼ö ÀÖÁö¿ä.

ÀÌ ÇÁ·Î±×·¥ÀÇ CDeapÀº DEAPÀ» ÅÛÇø´ Ŭ·¡½º·Î ±¸ÇöÇÑ °ÍÀ¸·Î, ·©Å· ±â´É¿¡ ¸Â°Ô ¸¸µé¾îÁ® ÀÖ½À´Ï´Ù. ÀÌ¹Ì ÈüÀÌ ²Ë Â÷ ÀÖÀ¸¸é ¿ø¼Ò¸¦ »ðÀÔÇÒ ¶§ ¾î¶±ÇÒ °ÍÀÎÁö policy¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. Å« ±¸Á¶Ã¼¸¦ ´ë»óÀ¸·Î ÀÌ Å¬·¡½º¸¦ ¾µ °æ¿ì, TYPE¿¡´Â A¸¦, ARG_TYPE¿¡´Â const A &¿Í °°Àº ÀÚ·áÇüÀ» ÁÖ¸é µË´Ï´Ù.

DeapÀÌ ÀÏ¹Ý heap°ú ´Ù¸¥ Á¡Àº?

deapÀº ÇÑ ¹è¿­·Î min heap°ú max heapÀ» µ¿½Ã¿¡ Ç¥ÇöÇÕ´Ï´Ù. ÈçÈ÷ Èü Á¤·ÄÀ» ÇÒ ¶§³ª ÀÏ¹Ý ÈüÀ» Ç¥ÇöÇÒ ¶§, ¸Ç ²À´ë±âÀÇ À妽º¸¦ 0ÀÌ ¾Æ´Ñ 1·Î »ï´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. (¹è¿­ÀÇ Æ÷ÀÎÅÍ¿¡´Ù 1À» »­À¸·Î½á) deapÀº ²À´ë±â¿¡ ¿ø¼Ò°¡ µÎ °³°¡ Àֱ⠶§¹®¿¡ À妽º¸¦ 2ºÎÅÍ ½ÃÀÛÇÏ°Ô ÇÏ´Â °Ô À¯¸®ÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÏ¸é ¾î´À À妽º¿¡¼­³ª ±× À妽º ¹øÈ£¿¡ 2¸¦ °öÇÔÀ¸·Î½á ¾Æ·¡Ãþ ¿ÞÂÊÀÇ ¿ø¼Ò¸¦ °¡¸®Å°°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.

Áï, 2 [3], 4 5, [6 7], 8 9 10 11 [12 13 14 15], ... ÀÇ ¼ø¼­´ë·Î [ ] ¾ÈÀÇ ¼öÄ¡´Â max heapÀÇ À妽ºÀÌ°í ±×·¸Áö ¾ÊÀº 2, 4, 5, 8, ...Àº min heapÀÇ À妽º°¡ µÇ´Â °ÍÀÔ´Ï´Ù. max heapÀÇ À妽º´Â ±× ¼ö¿¡¼­ °¡Àå Å« 2Áø¹ý ºñÆ®¿Í ±× ´ÙÀ½ ºñÆ®°¡ ¾ðÁ¦³ª 1ÀÓÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. 3=11, 6=110, 13=1101, 15=1111

deap¿¡ ¿ø¼Ò°¡ Ãß°¡µÇ¸é óÀ½¿¡´Â »õ ¿ø¼Ò°¡ ÀÏ¹Ý heap°ú ¸¶Âù°¡Áö·Î ¹è¿­ÀÇ °¡Àå ¸¶Áö¸· À妽º¿¡ ÀÖ°Ô µË´Ï´Ù. ±× À妽º´Â min heap À妽ºÀÏ ¼öµµ ÀÖ°í max heap À妽ºÀÏ ¼öµµ ÀÖ½À´Ï´Ù.

ÀÌÁ¦ ÀÌ ¿ø¼Ò¿Í, minÀ̵ç maxÀÌµç ¸ÂÀºÆí heap¿¡¼­ °°Àº À§Ä¡¿¡ ÀÖ´Â ¿ø¼Ò¿Í ºñ±³¸¦ ÇØ¾ß ÇÕ´Ï´Ù. 8 ¡ê 12, 7 ¡ê 5¿Í °°Àº ½ÄÀÔ´Ï´Ù. ¸¸¾à Á¤È®ÇÏ°Ô °°Àº À§Ä¡¿¡ ÀÖ´Â À妽º°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é ±× À妽ºÀÇ ºÎ¸ð À妽º¿¡ ÀÖ´Â ¿ø¼Ò¿Í ºñ±³ÇÏ¸é µË´Ï´Ù. °¡·É, ¿ø¼Ò°¡ min heap¿¡ ¼ÓÇÏ´Â 10¹ø À妽º¿Í ¦ÀÎ max heapÀÇ À妽º´Â 14Àε¥ ¿ø¼Ò°¡ ±×¸¸Ä¡ ¾ø¾î¼­ ÀÌ À妽º°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é ºÎ¸ðÀÎ 7¹ø À妽º°¡ ¦ÀÌ µÇ´Â °ÍÀÔ´Ï´Ù.

±×·¡¼­ »õ ¿ø¼Ò°¡ min heap¿¡ Ãß°¡µÆ´Âµ¥ max heapÀÇ Â¦ÀÌ »õ ¿ø¼Òº¸´Ù °ªÀÌ ÀÛÀº °æ¿ì, ¶Ç´Â ¹Ý´ë·Î »õ ¿ø¼Ò°¡ max heap¿¡ Ãß°¡µÆ´Âµ¥ min heapÀÇ Â¦ÀÌ »õ ¿ø¼Òº¸´Ù Å« °æ¿ì ¿ø¼ÒÀÇ À§Ä¡¸¦ µÚ¹Ù²ß´Ï´Ù. ±×·¯°í ³ª¼­ »õ À§Ä¡¸¦ ±âÁØÀ¸·Î »õ·Î¿î ¿ø¼Ò°¡ min heap¿¡ ¼ÓÇÑ´Ù¸é min heap´ë·Î, ȤÀº max heap¿¡ ¼ÓÇÑ´Ù¸é max heap´ë·Î ÇØ´ç ÈüÀÇ Á¤ÀÇ¿¡ ¸Â°Ô »õ ¿ø¼Ò¿Í ºÎ¸ð ¿ø¼Ò¸¦ Àç¹èÄ¡ÇÏ¸é »ðÀÔ ÀÛ¾÷ÀÌ ³¡³³´Ï´Ù.

ÇÑÆí »èÁ¦´Â min ¶Ç´Â max ¿ø¼Ò¸¦ ´ë»óÀ¸·Î ÇÒ ¼ö Àִµ¥, ÇØ´ç ÈüÀÇ ¸Ç ²À´ë±â ¿ø¼Ò¸¦ Á¦°ÅÇÑ ÈÄ ¾Æ·¡ÀÇ ¿ø¼Òµé Áß ±× ÈüÀÇ Á¶°Ç¿¡ ¸Â´Â ¿ø¼Ò¸¦ Çϳª¾¿ ²ø¾î¿Ã·Á ÁÝ´Ï´Ù. ±×·¯¸é ¸Ç ¸¶Áö¸· ºó ÀÚ¸®°¡ ³²°Ô µÇÁÒ. °Å±â¿¡´Ù°¡ ¹è¿­»óÀ¸·Î Á¦ÀÏ ¸¶Áö¸· À妽º¿¡ ÇØ´çÇÏ´Â ¿ø¼Ò¸¦ »ðÀÔÇؼ­ À§¿¡¼­ ¿­°ÅÇÑ »ðÀÔ ÀÛ¾÷(Àڱ⠦°ú À§Ä¡ ±³È¯ µî)À» ´Ù½Ã ½ÃÇàÇØ ÁÖ¸é µË´Ï´Ù.

ÇãÇÁ¸¸ ¶óÀ̺귯¸®

ÀÌ ÇÁ·Î±×·¥Àº CDeap Ŭ·¡½º¸¦ ÀÌ¿ëÇØ ÇãÇÁ¸¸ ÄÚµùµµ ±¸ÇöÇÏ¿© ½Ã¿¬Çß½À´Ï´Ù. ÇãÇÁ¸¸ ÄÚµùÀº ÀÚÁÖ ¾²ÀÌ´Â Á¤º¸¿¡ ´õ ªÀº Äڵ带 ÇÒ´çÇÏ°í, µå¹°°Ô ³ªÅ¸³ª´Â Á¤º¸¿¡ µå´Â Äڵ带 ´ÃÀÓÀ¸·Î½á ÀüüÀûÀ¸·Î µ¥ÀÌÅÍÀÇ Å©±â¸¦ ÁÙÀÌ´Â ±âº»ÀûÀÎ ¾ÐÃà ±â¹ýÀÔ´Ï´Ù. AºÎÅÍ Z±îÁöÀÇ ÃâÇö ºóµµ°¡ µé¾î¿ÔÀ» ¶§, °¢ ºóµµ¼ö¿¡ ¸Â´Â ÇãÇÁ¸¸ Æ®¸®¸¦ »ý¼ºÇÏ°í, ±× Æ®¸®´ë·Î Äڵ带 Ãâ·ÂÇØ ÁÖ´Â ¿¹°¡ ³ª¿É´Ï´Ù. ¸ðµç ±ÛÀÚ¸¦ ÀÏ°ýÀûÀ¸·Î 5ºñÆ® ÄÚµå·Î Á¤ÇÏ´Â °Íº¸´Ù ÇãÇÁ¸¸ Æ®¸®¸¦ ¾²¸é Àüü ÄÚµå Å©±â°¡ ¾ó¸¶³ª ÁÙ¾îµå³ª È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÇÏÁö¸¸ ÇãÇÁ¸¸ ÄÚµùÀ» ÇÒ ¶§´Â heapÀ¸·ÎºÎÅÍ °¡Àå ÀÛÀº °ªÀ» ¾ò¾î¿À°í Èü¿¡¼­ ÀÌ°ÍÀ» »©³»´Â µ¿ÀÛ¹Û¿¡ ÇÏÁö ¾Ê±â ¶§¹®¿¡, ±»ÀÌ ¾ç¹æÇâ ÈüÀÌ ¾Æ´Ï´õ¶óµµ Min-heap¸¸ ±¸ÇöÇÑ Å¬·¡½º·Îµµ ÀÌ Äڵ带 ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.

¼Ò½º ÄÚµå, ½ÇÇà ÆÄÀÏ ¹Þ±â (src15_deaphuf.zip, 7K)


ÇÁ·Î±×·¥ ½ÇÇà °á°ú

Sorting with Deap:
Original order: 108 9 51 83 170 33 66 5 82 104 8 43 151 25 118 52 36 17 148 
85 81 183 133 154 185 72 171 46 73 125 161 111 128 130 114 117 131 24 141 
68 48 188 155 76 99 7 2 39 60 13 30 140 94 11 152 107 169 179 195 150 65 
164 21 64 42 123 145 93 95 159 22 14 47 139 106 75 55 194 136 180 20 84 182 
160 100 26 166 102 1 78 62 89 16 172 177 121 19 135 167 110 168 147 137 54 
124 41 162 71 96 173 158 44 197 101 127 174 70 87 191 90 40 67 35 105 184 
193 92 12 113 29 181 126 23 109 199 132 28 59 149 34 61 80 189 91 56 50 142 
32 116 134 

Heap form: 1 | 199 | 5 2 | 197 195 | 8 11 20 7 | 194 189 188 193 | 9 13 14 
17 44 26 25 16 | 177 181 183 173 182 180 185 191 | 12 19 28 34 22 32 71 24 
46 68 82 48 81 40 35 33 | 133 161 168 167 140 142 154 162 158 179 174 170 
166 150 105 184 | 21 29 39 23 118 59 52 61 43 30 41 47 94 72 36 55 141 136 
104 84 127 160 70 85 151 90 73 67 62 89 83 125 | 108 121 135 123 159 110 
149 147 137 56 139 134 106 75 96 131 152 148 107 101 169 171 100 87 155 102 
76 78 65 99 164 172 | 92 66 113 64 42 126 111 109 130 132 93 60 145 95 128 
80 51 91 54 50 124 114 116 117 

Min form: 1 2 5 7 8 9 11 12 13 14 16 17 19 20 21 22 23 24 25 26 28 29 30 32 
33 34 35 36 39 40 41 42 43 44 46 47 48 50 51 52 54 55 56 59 60 61 62 64 65 
66 67 68 70 71 72 73 75 76 78 80 81 82 83 84 85 87 89 90 91 92 93 94 95 96 
99 100 101 102 104 105 106 107 108 109 110 111 113 114 116 117 118 121 123 
124 125 126 127 128 130 131 132 133 134 135 136 137 139 140 141 142 145 147 
148 149 150 151 152 154 155 158 159 160 161 162 164 166 167 168 169 170 171 
172 173 174 177 179 180 181 182 183 184 185 188 189 191 193 194 195 197 199 

Max form: 199 197 195 194 193 191 189 188 185 184 183 182 181 180 179 177 
174 173 172 171 170 169 168 167 166 164 162 161 160 159 158 155 154 152 151 
150 149 148 147 145 142 141 140 139 137 136 135 134 133 132 131 130 128 127 
126 125 124 123 121 118 117 116 114 113 111 110 109 108 107 106 105 104 102 
101 100 99 96 95 94 93 92 91 90 89 87 85 84 83 82 81 80 78 76 75 73 72 71 70 
68 67 66 65 64 62 61 60 59 56 55 54 52 51 50 48 47 46 44 43 42 41 40 39 36 
35 34 33 32 30 29 28 25 26 24 23 22 21 20 19 17 16 14 13 12 11 9 8 7 2 5 1 

Huffman tree:
A's code size is 4 - 1011
B's code size is 6 - 110001
C's code size is 5 - 10101
D's code size is 5 - 11011
E's code size is 3 - 011
F's code size is 6 - 110000
G's code size is 5 - 10100
H's code size is 6 - 111100
I's code size is 4 - 1110
J's code size is 9 - 111111001
K's code size is 6 - 111110
L's code size is 4 - 1001
M's code size is 5 - 00011
N's code size is 4 - 0100
O's code size is 4 - 0101
P's code size is 5 - 00010
Q's code size is 9 - 111111000
R's code size is 4 - 0000
S's code size is 3 - 001
T's code size is 4 - 1000
U's code size is 5 - 11001
V's code size is 7 - 1111111
W's code size is 7 - 1111011
X's code size is 8 - 11111101
Y's code size is 5 - 11010
Z's code size is 7 - 1111010
Compression size 95385
UnCompression size 110310