Algorithms

by Kwang-Soo Hahn, kshahn@kmu.kookmin.ac.kr
Dept. of Computer Science, Kookmin University
910-4794, http://kshahn.kookmin.ac.kr


Objectives



Algorithm: ¹®Á¦ ÇØ°áÀ» À§ÇÑ Ã¼°èÀûÀÎ ÀýÂ÷·Î ´ÙÀ½ Ư¼ºÀ» Áö³à¾ß ÇÑ´Ù.

¿¹ 1) ¾î¶² ¼ö nÀÌ prime number (¼Ò¼ö: 1°ú ±× ÀÚ½ÅÀ¸·Î¸¸ ³ª´©¾îÁö´Â ¾çÀÇ Á¤¼ö) ÀÎÁö ¾Æ´ÑÁö °Ë»çÇÏ´Â ¾Ë°í¸®Áò

¾Ë°í¸®Áò 1)

  1. 1°ú n »çÀÌÀÇ ¸ðµç ¼ö¸¦ ¼±ÅÃÇÏ¿© ±× ¼ö°¡ nÀ» ³ª¸ÓÁö ¾øÀÌ ³ª´­ ¼ö ÀÖ³ª °Ë»çÇÑ´Ù.
  2. nÀ» ³ª´­ ¼ö ÀÖ´Â ¼ö°¡ ¹ß°ßµÉ ¶§¸¶´Ù count¸¦ 1 Áõ°¡½ÃŲ´Ù.
  3. ¸ðµç ¼ö °Ë»ç °á°ú count°¡ 2À̸é nÀº prime number
bool IsPrime(int n)
{
    int divisors, i;

    divisors = 0;
    for (i = 1; i <= n; i++) {
        if (n % i == 0) divisors++;
    }
    return (divisors == 2);
}


À§ ¾Ë°í¸®ÁòÀº ¸íÈ®ÇÏ°í, Á¤È®ÇÏ°í, È¿À²ÀûÀΰ¡?

¸íÈ®¼º: Àΰ£ÀÌ »ç¿ëÇÏ´Â ¾ð¾î´Â ¸¹Àº °æ¿ì µÑ ÀÌ»óÀÇ Àǹ̷ΠÇؼ®µÉ ¿©Áö°¡ ÀÖÀ¸¹Ç·Î ¾Ë°í¸®Áò Ç¥Çö ¼ö´ÜÀ¸·Î´Â ºÎÀûÇÕÇÏ´Ù. ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â ¸íÈ®ÇÑ Ç¥Çö ¼ö´ÜÀÌ¸ç µÑ ÀÌ»óÀÇ Àǹ̷ΠÇؼ®µÉ ¿©Áö°¡ ¾ø´Ù.

Á¤È®¼º: ÇÁ·Î±×·¥ÀÇ Á¤È®¼º°Ë»ç´Â ÀϹÝÀûÀ¸·Î ´ÙÀ½ µÎ ¹æ¹ýÀ» ¸¹ÀÌ »ç¿ëÇÑ´Ù.

  1. ÇÁ·Î±×·¥ Äڵ带 ÇÑ ÁÙ ÇÑ Á٠öÀúÈ÷ »ìÆì°¡¸ç ¿À·ù°¡ ÀÖ´ÂÁö °Ë»çÇÑ´Ù. (Desk-checking)
  2. ÇÁ·Î±×·¥¿¡ ƯÁ¤ ÀÚ·áµéÀ» ÀÔ·ÂÇÏ¿© ±× ÀÚ·áµé¿¡ ´ëÇÑ Ã³¸® °á°ú°¡ Á¤È®ÇÑÁö °Ë»çÇÑ´Ù. (Testing)

À§ÀÇ µÎ ¹æ¹ýµµ ÇÁ·Î±×·¥ÀÇ Á¤È®¼º¿¡ ´ëÇÑ ½Å·Úµµ¸¦ ³ô¿©ÁÙ »Ó ¿Ïº®ÇÑ ÇÁ·Î±×·¥ ¿À·ù °Ë»ç ¹æ¹ýÀº ¾ø´Ù.

À§ ¾Ë°í¸®ÁòÀ» 1¿¡¼­ 1000 ±îÁöÀÇ µ¥ÀÌŸ·Î ½ÃÇèÇÑ °á°ú´Â Á¤È®ÇÔÀ» ¾Ë ¼ö ÀÖ´Ù.

È¿À²¼º: À§ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿© 1000ÀÌ prime number ÀÎÁö °Ë»çÇÏ·Á¸é 1 ºÎÅÍ 1000 »çÀÌÀÇ ¼ö¸¦ ¸ðµÎ °Ë»çÇÏ¿© 1000À» ³ª´­ ¼ö ÀÖ´ÂÁö °Ë»çÇÏ¿©¾ß ÇÑ´Ù. (1000000ÀÌ prime numberÀÎÁö °Ë»çÇÒ °æ¿ì´Â?) ±×·¯³ª 2·Î 1000À» ³ª´©¾î ¶³¾îÁüÀ» ¾Ë ¶§ 1000ÀÌ prime number°¡ ¾Æ´ÔÀ» ¹Ù·Î ¾Ë ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î À§ ¾Ë°í¸®Áò º¸´Ù ´õ È¿À²ÀûÀÎ ¾Ë°í¸®ÁòÀÌ Á¸ÀçÇÔÀ» ¾Ë ¼ö ÀÖ´Ù.

À§ ¾Ë°í¸®ÁòÀÇ °³¼± ¹æ¾È

À§ÀÇ °³¼± ¹æ¾ÈÀ» °í·ÁÇÑ »õ·Î¿î ¾Ë°í¸®Áò

bool IsPrime(int n)
{
   int  i;

   if (n % 2 == 0) return (FALSE);   // nÀÌ 2·Î ³ª´©¾îÁö¸é nÀº prime number°¡ ¾Æ´Ô
   for (i = 3; i <= sqrt(n); i += 2) {   // 3 ºÎÅÍ nÀÇ Á¦°ö±Ù±îÁö Ȧ¼ö¸¸ °Ë»ç
      if (n % i == 0) return (FALSE);
   }
   return (TRUE);   // À§ÀÇ °æ¿ì·Î ³ª´©¾îÁöÁö ¾ÊÀ¸¸é nÀº prime number?
}


À§ ÇÁ·Î±×·¥Àº Á¤È®ÇÏ°í È¿À²ÀûÀΰ¡?

ÃÖÁ¾ ÇÁ·Î±×·¥

bool  IsPrime(int n)
{
   int  i, limit;

   if (n <= 1)  return (FALSE);
   if (n == 2)  return (TRUE);
   if (n % 2 == 0)  return (FALSE);
   limit = sqrt(n) + 1;
   for (i = 3; i <= limit; i += 2) {
      if (n % i == 0)  return (FALSE);
   }
   return (TRUE);
}


À§ ¾Ë°í¸®Áò°ú ù¹ø° ¾Ë°í¸®ÁòÀÇ Â÷ÀÌ´Â? (¾Ë°í¸®Áò ºÐ¼®)

µÎ ¾Ë°í¸®ÁòÀÇ Àå´ÜÁ¡Àº? (¾Ë°í¸®ÁòÀÇ ºñ±³, Tradeoffs)

¾î¶² ¾Ë°í¸®ÁòÀ» ¼±ÅÃÇÒ °ÍÀΰ¡? (¾Ë°í¸®Áò ¼±Åà ±âÁØ)




¿¹ 2) µÎ ¾çÀÇ Á¤¼ö x, y »çÀÌÀÇ ÃÖ´ë°ø¾à¼ö (Greatest Common Divisor; GCD)¸¦ ±¸ÇÏ´Â ¾Ë°í¸®Áò

¾Ë°í¸®Áò 1) Brute-force algorithm

¾Ë°í¸®Áò 2) Euclid's algorithm


Á¦°ö±Ù, »ï°¢ÇÔ¼ö, Áö¼öÇÔ¼ö, logÇÔ¼ö, ¹ÌÀûºÐ ¹æÁ¤½Ä, ¿¬¸³¹æÁ¤½Ä µîÀ» °è»êÇÏ´Â ¾Ë°í¸®ÁòÀÌ Á¸ÀçÇϰųª library functionÀ¸·Î Á¦°øµÈ´Ù. (¼öÄ¡ Çؼ®; Numerical analysis)


Searching and Sorting

Searching: Array¿¡¼­ ƯÁ¤ ¿ä¼Ò¸¦ ã´Â ÀÛ¾÷

Sorting: Array¿¡ ÀúÀåµÈ °ªÀ» ƯÁ¤ ¼ø¼­¿¡ µû¶ó Á¤·Ä½ÃÅ°´Â ÀÛ¾÷


Searching

ƯÁ¤ °ª(key)À» °®´Â array element¸¦ ã´Â ¹®Á¦

¿¹) ƯÁ¤ °ª¿¡ ÇØ´çÇÏ´Â ¹Ì±¹ µ¿Àü À̸§ ã±â (findcoin.c)

°ª (cent)µ¿Àü À̸§
1penny
5nickel
10dime
25quarter
50half-dollar


Searching algorithm

Sorting

Array¿¡ ÀúÀåµÈ °ªÀ» ƯÁ¤ ¼ø¼­(º¸Åë ÀÛÀº °ª¿¡¼­ Å« °ª, ¶Ç´Â Å« °ª¿¡¼­ ÀÛÀº °ª)¿¡ µû¶ó Á¤·Ä

Sorting algorithm (ÀÛÀº °ª¿¡¼­ Å« °ª ¼øÀ¸·Î; ascending order)

Selection sort (sort.h, sort.c)

  1. Àüü array¿¡¼­ Á¦ÀÏ ÀÛÀº °ªÀ» ã¾Æ ù¹ø°¿¡ ÀúÀå
  2. µÎ¹ø°¿¡¼­ ¸¶Áö¸·±îÁöÀÇ ¹è¿­ °ªÁß Á¦ÀÏ ÀÛÀº °ªÀ» ã¾Æ µÎ¹ø°¿¡ ÀúÀå
  3. ...
  4. N-1¹ø°¿¡¼­ ¸¶Áö¸·±îÁöÀÇ ¹è¿­ °ªÁß Á¦ÀÏ ÀÛÀº °ªÀ» ã¾Æ N-1¹ø°¿¡ ÀúÀå


Bubble sort

  1. ¹è¿­ óÀ½ºÎÅÍ ³¡±îÁö ÀÎÁ¢ÇÑ ¿ä¼Ò °ªµéÀ» ºñ±³ÇÏ¿© ¾ÕÀÇ °ªÀÌ µÚÀÇ °ªº¸´Ù Å©¸é ¼­·Î ±³È¯ (swap)
  2. ¹è¿­ óÀ½ºÎÅÍ N-1±îÁö ÀÎÁ¢ÇÑ ¿ä¼Ò °ªµéÀ» ºñ±³ÇÏ¿© ¾ÕÀÇ °ªÀÌ µÚÀÇ °ªº¸´Ù Å©¸é ¼­·Î ±³È¯
  3. ...
  4. ¹è¿­ ù¹ø° °ª°ú µÎ¹ø° °ªÀ» ºñ±³ÇÏ¿© ù¹ø° °ªÀÌ µÎ¹ø° °ªº¸´Ù Å©¸é ¼­·Î ±³È¯

Quick sort, shell sort, heap sort, ...




½Ç½À 1) Prime number, GCD algorithm ±¸Çö

½Ç½À 2) ¹è¿­¿¡ ÀúÀåµÈ °ªÀ» Å©±â¼øÀ¸·Î Á¤·ÄÇÏ´Â ÇÁ·Î±×·¥ ÀÛ¼º

Insertion sort ¹æ¹ý »ç¿ë: (isort.c, tabins.c)