ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. 1 ¼Ò°³
Heap Sort´Â Heap ÀڷᱸÁ¶¿¡ ±â¹ÝÀ» µÎ´Â Á¤·Ä¾Ë°í¸®ÁòÀ¸·Î, Heap ÀڷᱸÁ¶¿¡ ¿ø¼Ò¸¦ insert ÇÏ´Â ¹æ½ÄÀ¸·Î Á¤·ÄÀ» ÇÑ´Ù. Heap ÀڷᱸÁ¶´Â ÀÌÁøÆ®¸® ÇüŸ¦ °¡Áø´Ù. ¸¸¾à ºÎ¸ðÀÇ ³ëµåÀÇ Å° °ªÀÌ Ç×»ó ÀÚ½Ä ³ëµåÀÇ Å°°ªº¸´Ù Å©°Å³ª °°´Ù¸é max-heap À̶ó°í ÇϰÅ, ¹Ý´ë·Î ºÎ¸ð ³ëµåÀÇ Å°°ªÀÌ ÀڽijëµåÀÇ Å°°ªº¸´Ù Ç×»ó À۰ųª °°´Ù¸é min-heap À̶ó°í ÇÑ´Ù.
Èü¼ÒÆ®´Â Äü¼ÒÆ®¿Í ÀÚÁÖ ºñ±³µÈ´Ù. ÀÌ µÑÀº ´Ù¸¥ nearly-in-place ºñ±³ ±â¹ÝÀÇ Á¤·Ä¾Ë°í¸®Áò¿¡ ºñÇØ¼ ¸Å¿ì È¿À²ÀûÀÎ °ÍÀ¸·Î ¾Ë·ÁÁ® ÀÖ´Ù. º¸ÅëÀº Äü¼ÒÆ®°¡ ´õ ºü¸¥ °ÍÀ¸·Î ¾Ë·ÁÁ® ÀÖÁö¸¸, ÃÖ¾ÇÀÇ °æ¿ì O(n2)ÀÇ ½Ã°£ÀÌ °É¸®±â ¶§¹®¿¡, µ¥ÀÌÅÍÀÇ ¾çÀÌ ¸Å¿ì ¸¹Àº °æ¿ì¿¡´Â ¼±Åÿ¡ ÀÖ¾î¼ ½ÅÁßÀ» ±âÇÒ Çʿ䰡 ÀÖ´Ù.
Èü¼ÒÆ®´Â ÃÖ¾ÇÀÇ °æ¿ìO(n log n)½Ã°£ÀÌ ¼ÒºñµÈ´Ù.
ÀÌ ¾Ë°í¸®ÁòÀº ƯÈ÷ ½Ç½Ã°£À¸·Î ¿ø¼Ò°¡ ÁÖ¾îÁö´Â priority queue ¸¦ ±¸ÇöÇϴµ¥ À¯¸®ÇÏ´Ù.
À¥¹®¼ °Ë»ö¿£ÁøÀ» ¿¹·Î µé¾îº¸ÀÚ. À̶§, ¹®¼´Â ¹®¼ÀÇ °íÀ¯¹øÈ£¿Í °¡ÁßÄ¡·Î ÀÌ·ç¾îÁø {did, score} ÀڷᱸÁ¶¸¦ °¡Áú °ÍÀÌ´Ù. ¸¸¾à 100000°³ÀÇ ¹®¼°¡ °Ë»öµÇ¾ú´Ù¸é did¸¦ key·Î Á¤·ÄµÈ ¸®½ºÆ®¸¦ ¾òÀ» °ÍÀÌ´Ù. ±×·¸´Ù¸é À̰ÍÀ» ´Ù½Ã score¸¦ key·Î Á¤·ÄÇØ¾ß ÇÒ °ÍÀÌ´Ù. ÀÌ °æ¿ì 100000°³ÀÇ °á°ú¸¦ quick sort¸¦ ÀÌ¿ëÇØ¼ ¿ÏÀüÁ¤·ÄÇÏ´Â ¹æ¹ýµµ ÀÖ°ÚÁö¸¸, °Ë»ö°á°ú´Â top N °³¸¸ÀÌ Áß¿äÇÏ´Ù°í º¼ ¼ö ÀÖÀ¸¹Ç·Î, À̰ÍÀº Å« ³¶ºñ´Ù. ÇϳªÀÇ ÆäÀÌÁö¿¡ 10°³ÀÇ °Ë»ö°á°ú¸¦ Ãâ·ÂÇÑ´Ù°í Çϰí, 10ÆäÀÌÁö ±îÁö º¸¿©Áشٰí Çϸé ÃÖ´ë 100°³ÀÇ Top Score¸¸ À¯ÁöÇÏ¸é µÇ±â ¶§¹®ÀÌ´Ù. 100ÀÇ Å©±â¸¦ °¡Áö´Â priority queue¸¦ À¯ÁöÇÏ¸é µÈ´Ù. priority queue°¡ °¡µæ á´Ù¸é, ÃÖ¼Ò°ªÀ» ±â¾ïÇϰí ÀÖ´Ù°¡ »õ·Î¿î ¹®¼ÀÇ score°¡ ÃÖ¼Ò°ªº¸´Ù Å©´Ù¸é ÀÌÀüÀÇ ÃÖ¼Ò°ªÀ» »èÁ¦ÇÑ´ÙÀ½¿¡ Æ®¸®¸¦ ÀçÁ¤·ÄÇÏ¸é µÉ °ÍÀÌ´Ù. 2 Build Heap
Heap Á¤·ÄÀº Á¤·ÄÀ» ½ÃÀÛÇϱâ Àü¿¡, Heap ÀڷᱸÁ¶·Î ¸¸µé¾î¾ß ÇÑ´Ù. ¿©±â¿¡¼´Â MAX heapÀ» ¼±ÅÃÇØ¼ ¼³¸íÀ» Çϵµ·Ï ÇÑ´Ù. ÀÌ °æ¿ì »óÀ§ ³ëµå´Â ¹Ýµå½Ã ÇÏÀ§ ³ëµåº¸´Ù ´õ Ä¿¾ß ÇÑ´Ù´Â °ÍÀÌ º¸ÀåµÇ¾î¾ß ÇÒ °ÍÀÌ´Ù.
HeapÀº Tree ÀڷᱸÁ¶¸¦ µû¸£±â ¶§¹®¿¡, ¼±ÅÃÇÑ ³ëµåÀÇ ÇÏÀ§³ëµå´Â (n*2)+1 °ú (n*2)ÀÓÀ» ¾Ë ¼ö ÀÖ´Ù.
3 Á¤·Ä ¾Ë°í¸®Áò
heap ÀڷᱸÁ¶´Â 1Â÷¿ø ¹è¿À» ÀÌ¿ëÇØ¼ Á¤ÀÇ µÈ´Ù. 2Áø Æ®¸®¸¦ ÀÏÂ÷¿ø ¹è¿¿¡ ³ª¿ÇÏ´Â °ÍÀ̶ó°í º¸¸éµÈ´Ù. À§ÀÇ sort µÈ heapÀº ´ÙÀ½°ú °°Àº ¹è¿ ±¸Á¶¸¦ °¡Áú °ÍÀÌ´Ù.
* K[i] >= K[2*i] * K[i] >= K[(2*i) + 1]heap Á¤·ÄÀº ¾Æ·¡ÀÇ µÎ´Ü°è¸¦ °ÅÄ¡°Ô µÈ´Ù.
4 ¶Ç´Ù¸¥ ¿¹
Ãâó:
¼¼»ó, ±× Áß½ÉÀÇ ³ª!! ºí·Î±×5 ÄÚµåvoid heapSort(int numbers[], int array_size)
{
int i, temp;
for (i = (array_size / 2)-1; i >= 0; i--)
siftDown(numbers, i, array_size - 1);
for (i = array_size-1; i >= 1; i--)
{
temp = numbers[0];
numbers[0] = numbers[i];
numbers[i] = temp;
siftDown(numbers, 0, i-1);
}
}
void siftDown(int numbers[], int root, int bottom)
{
int done, maxChild, temp;
done = 0;
while ((root*2 <= bottom) && (!done))
{
if (root*2 == bottom)
maxChild = root * 2;
else if (numbers[root * 2] > numbers[root * 2 + 1])
maxChild = root * 2;
else
maxChild = root * 2 + 1;
if (numbers[root] < numbers[maxChild])
{
temp = numbers[root];
numbers[root] = numbers[maxChild];
numbers[maxChild] = temp;
root = maxChild;
}
else
done = 1;
}
}
|
|
||||||||||||||||||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|