ÃÖ´ëÄ¡ ÃÖ¼ÒÄ¡ÀÇ ¼±Åà ¹®Á¦


ÇÔ¼ö¸í
maxmin  n°³ÀÇ µ¥ÀÌÅͷκÎÅÍ ÃÖ´ëÄ¡ ¹× ÃÖ¼ÒÄ¡¸¦ ¿ä±¸ÇÑ´Ù
Çü½Ä
void maxmin(int *max, int *min, DATA *data, int nmem);
Àμö
typedef struct {
    int key;        /* ºñ±³ÀÇ Å°°¡ µÇ´Â Çʵå */
    int info;       /* ±× ¿ÜÀÇ Çʵå */
} DATA;

max   (Ãâ·Â) Å°ÀÇ °ªÀÌ ÃÖ´ëÀÇ ·¹ÄÚµå ¹è¿­ÀÇ ¹øÈ£(¼±µÎ ¹øÈ£´Â 0)
min   (Ãâ·Â) Å°ÀÇ °ªÀÌ ÃÖ¼ÒÀÇ ·¹ÄÚµå ¹è¿­ÀÇ ¹øÈ£(¼±µÎ ¹øÈ£´Â 0)
data  (ÀÔ·Â) ·¹ÄÚµå ¹è¿­
nmem  (ÀÔ·Â) ·¹ÄÚµå ¹è¿­ÀÇ Å©±â
ÇÔ¼öÄ¡
¾øÀ½
ÁÖÀÇ »çÇ×

¿ë·Ê(maxmin-test.c )

ÇÁ·Î±×·¥(maxmin.c )
void maxmin(int *max, int *min, DATA *data, int nmem)
{
    static void rmaxmin();

    if (nmem <= 0) *max = *min = 0;
    else rmaxmin(max, min, data, 0, nmem - 1);
}

static void rmaxmin(int *max, int *min, DATA *data, int i, int j)
{
    int k;
    int max1, max2, min1, min2;

    if (i+1 >= j) {
        if (data[i]. key > data[j]. key) {
            *max = i;
            *min = j;
        } else {
            *max = j;
            *min = i;
        }
    } else {
        k = (i + j) / 2;
        rmaxmin(&max1, &min1, data, i, k);
        rmaxmin(&max2, &min2, data, k+1, j);
        *max = (data[max1]. key > data[max2]. key) ?  max1 : max2;
        *min = (data[min1]. key < data[min2]. key) ?  min1 : min2;
    }
}
¼³¸í
°¡Àå °£´ÜÇÑ ¹æ½ÄÀº, ÃÖÃÊ n-1 ȸÀÇ ºñ±³·Î ÃÖ´ëÄ¡ max ¸¦ ã¾Æ³» ´ÙÀ½¿¡ ³ª¸ÓÁöÀÇ n-1 °³ÀÇ µ¥ÀÌÅͷκÎÅÍ n-2 ȸÀÇ ºñ±³·Î ÃÖ¼ÒÄ¡ min ¸¦ ã¾Æ³»°í ¹æ¹ýÀÌ´Ù. ÀÌ °æ¿ì, ÇÕ°è 2n-3 ȸÀÇ ºñ±³¸¦ ÇÊ¿ä·Î ÇÑ´Ù.

ÇÑÆí, ÇÁ·Î±×·¥°ú °°ÀÌ, n °³ÀÇ µ¥ÀÌÅ͸¦ ¹Ý¾¿À¸·Î ³ª´©¾î ±× °¢°¢ ÀÇ ±×·ì¿¡¼­ ÃÖ´ë ÃÖ¼Ò¸¦ ã¾Æ³Â´Ù°í Çϸé(ÀÚ), ÀüüÀÇ ÃÖ´ëÄ¡´Â 2°³ÀÇ ÃÖ´ëÀÇ Å« Æí, ÀüüÀÇ ÃÖ¼ÒÄ¡´Â 2°³ÀÇ ÃÖ¼ÒÀÇ ÀÛÀº ÆíÀÌ´Ù. ÀÌ Á¶ÀÛÀ» Àç±ÍÀûÀ¸·Î °¢ ±×·ìÀÇ ¿ä¼Ò°¡ 2°³°¡ µÉ ¶§±îÁö ½Ç½ÃÇÑ´Ù. ÀÌ °æ¿ì, ºñ±³ ȸ¼ö´Â 3/2n - 2 À̸ç, »ó±âÀÇ ´Ü¼ø ºñ±³¹ýÀÇ ±×°Íº¸´Ù ÀÛ´Ù.

ÀÌ¿ëÇÏ·Á¸é , µ¥ÀÌÅÍ ±¸Á¶¸¦ ½ÇÁ¦ÀÇ ¹®Á¦¿¡ ¸ÂÃß¾î ¼öÁ¤ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.

°ü·Ã ÇÔ¼ö
k¹ø°¿¡ ÀÛÀº ¿ä¼ÒÀÇ ¼±ÅÃ