À̺Р°Ë»öÀº ±¸°£ÀÇ Áß°£°ª°ú ۰ªÀÇ ´ë¼Ò¸¦ ±¸ºÐÇÏ¿© Å×À̺íÀ» Àý¹Ý¾¿ ³ª´² °¡¸ç ºñ±³ÇÏ´Â ¹æ¹ýÀÌ´Ù. ¼øÂ÷ °Ë»öÀÌ »óµî ºñ±³¸¸ ÇÏ°í ¼ø¼´ë·Î °Ë»öÇϴµ¥ ºñÇØ À̺Р°Ë»öÀº ´ë¼Ò ºñ±³¸¦ ÅëÇØ ±¸°£À» ³ª´² ºñ±³ÇÏ´Â Á» ´õ Áö´ÉÀûÀÎ ¹æ¹ýÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù. ÇÑ ¹ø ºñ±³ÇÒ ¶§¸¶´Ù Å×À̺íÀÇ ±æÀ̰¡ Àý¹Ý¾¿ ÁÙ¾î µé±â ¶§¹®¿¡ °Ë»ö È¿À²Àº ¾ÆÁÖ ÁÁÀ¸¸ç Å×À̺íÀÌ À¢¸¸Å Ä¿µµ ´À·ÁÁöÁö ¾Ê´Â´Ù.
¿µÇÑ »çÀü¿¡¼ girlÀ̶ó´Â ´Ü¾î¸¦ ã´Â´Ù°í ÇØ º¸ÀÚ. ¼øÂ÷ °Ë»öÀº »çÀüÀÇ Ã³À½ºÎÅÍ a, ab, aba, abc, ace µîµîÀÇ ´Ü¾î¸¦ ºñ±³ÇÏ¸é¼ girlÀÌ ³ª¿Ã ¶§±îÁö ã´Â ºñÈ¿À²ÀûÀÎ ¹æ¹ýÀÌ´Ù. À̺Р°Ë»öÀº »çÀüÀÇ Áß°£ ºÎºÐÀ» ÆîÃÄ girlº¸´Ù ´õ Å©¸é ¾ÕÂÊÀ¸·Î, ÀÛÀ¸¸é µÚÂÊÀ¸·Î °¡¸é¼ Á¡Á¡ ¹üÀ§¸¦ Á¼Çô °¡¸ç °Ë»öÇÏ´Â ¹æ¹ýÀÌ´Ù. ÀϹÝÀûÀ¸·Î »çÀüÀ» °Ë»öÇÒ ¶§ ¿ì¸®´Â À̺Р°Ë»ö ¹æ¹ýÀ» »ç¿ëÇÏ¸ç ±×·¡¼ »çÀüÀÌ ¾Æ¹«¸® Ä¿µµ ´Ü¾î¸¦ ã´Â ¼Óµµ°¡ ºü¸£´Ù.
À̺Р°Ë»öÀÌ °¡´ÉÇÏ·Á¸é Å×À̺íÀÇ ¸ðµç ÀÚ·á°¡ ¿À¸§Â÷¼øÀ¸·Î ¿µÇÑ »çÀüó·³ Á¤·ÄµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù´Â Á¦¾àÀÌ ÀÖ´Ù. ±×·¡¼ ÀڷḦ »ðÀÔÇÒ ¶§ Ç×»ó ´ÙÀ½ °Ë»öÀ» À§ÇØ Á¦ À§Ä¡¿¡ »ðÀÔÇØ¾ß ÇÏ´Â °ü¸®»óÀÇ ¾î·Á¿òÀÌ ÀÖÁö¸¸ ±× ´ë°¡·Î ºü¸¥ °Ë»ö ¼Óµµ¸¦ º¸Àå ¹ÞÀ» ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¿À¸§Â÷¼øÀ¸·Î Á¤·ÄµÇ¾î ÀÖ´Â Á¤¼ö ¹è¿¿¡¼ Áß°£ÂëÀÇ Å°°ªÀ» À̺Р°Ë»öÀ¸·Î ã´Â´Ù.
|
¿¹ Á¦ : BinarySearch |
#include <Turboc.h>
int BinarySearch(int *ar,unsigned num,int key)
{
unsigned Upper,Lower,Mid;
Lower=0;
Upper=num-1;
for (;;) {
Mid=(Upper+Lower)/2;
if (ar[Mid]==key) return Mid;
if (ar[Mid]>key) {
Upper=Mid-1;
} else {
Lower=Mid+1;
}
if (Upper<=Lower) {
return -1;
}
}
}
void main()
{
int ar[]={2,6,13,19,21,21,23,29,35,48,62,89,90,95,99,102,109,208,629};
unsigned num;
int key,idx;
num=sizeof(ar)/sizeof(ar[0]);
key=29;
idx=BinarySearch(ar,num,key);
if (idx == -1) {
puts("ã´Â °ªÀÌ ¾ø½À´Ï´Ù.");
} else {
printf("ã´Â °ªÀº %d¹øÂ°¿¡ ÀÖ½À´Ï´Ù.\n",idx);
}
}
ar ¹è¿ÀÌ °Ë»ö ´ë»ó Å×À̺íÀ̸ç 19°³ÀÇ Á¤¼öµéÀÌ Å©±â¼øÀ¸·Î Àß ³ª¿µÇ¾î ÀÖ´Ù. BinarySearch ÇÔ¼ö´Â ÀÌ ¹è¿¿¡¼ key¸¦ ã´Âµ¥ ¿¹Á¦ÀÇ °æ¿ì 29¶ó´Â ¼ö°¡ Ű °ªÀ¸·Î ÁÖ¾îÁ³´Ù. ÀÌ ÇÔ¼ö°¡ ar¿¡¼ 29¸¦ ã´Â °úÁ¤Àº ´ÙÀ½°ú °°´Ù.

ÃÖÃÊ Lower°¡ ¹è¿ÀÇ Ã³À½, Upper°¡ ¹è¿ÀÇ ³¡À» °¡¸®Å°°í Mid´Â ÀÌ µÑÀÇ Áß°£ÀÎ ar[9]¸¦ °¡¸®Å°°í ÀÖ´Ù. ÀÌ »óÅ¿¡¼ ar[9]ÀÇ °ª 48°ú ã°í Àִ Ű°ª 29¸¦ ºñ±³ÇØ º¸´Ï 48ÀÌ ÈξÀ ´õ Å©´Ù. ±×·¯¹Ç·Î ã´Â °ªÀÌ 48º¸´Ù ´õ ¾Æ·¡ÂÊ¿¡ ÀÖÀ»¸®°¡ ¸¸¹«Çϸç Upper°¡ 48ÀÇ ¹Ù·Î À§ÀÎ ar[8]·Î À̵¿ÇÔÀ¸·Î½á °Ë»ö ¹üÀ§°¡ Àý¹ÝÀ¸·Î ÁÙ¾îµç´Ù. ۰ªÀÌ ar[9]º¸´Ù ´õ ÀÛÀ¸¹Ç·Î ar[9]µµ °Ë»ö ´ë»ó¿¡¼ Á¦¿ÜµÊÀ» À¯ÀÇÇϵµ·Ï ÇÏÀÚ. Upper°¡ Mid·Î °¡´Â °ÍÀÌ ¾Æ´Ï¶ó Mid-1·Î °¡´Âµ¥ ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é °Ë»ö ¹üÀ§¸¦ »¡¸® Á¼Èú ¼ö ¾øÀ½Àº ¹°·ÐÀ̰í Ű¿Í ÀÏÄ¡ÇÏ´Â °ªÀÌ ¾øÀ» ¶§ ¹«ÇÑ ·çÇÁ¿¡ ºüÁú ¼öµµ ÀÖ´Ù.
´ÙÀ½ ·çÇÁ¸¦ µ¹ ¶§ Mid´Â »õ·Î¿î Lower¿Í UpperÀÇ Áß°£ ÁöÁ¡ÀÎ ar[4]·Î À̵¿Çϸç ÀÌ »óÅ¿¡¼ ar[4]ÀÇ °ª 21°ú ۰ª 29¸¦ ºñ±³ÇØ º¸´Ï ۰¡ ´õ Å©´Ù. ÀÌ °æ¿ì¿¡´Â ar[4]ÀÌÀü¿¡´Â ã´Â ۰¡ ¾ø´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ¸¸ç Lower°¡ ar[5]·Î À̵¿ÇÑ´Ù. ÀÌ·± ½ÄÀ¸·Î °è¼Ó Àý¹Ý¾¿ °Ë»ö ¹üÀ§¸¦ ÁÙ¿© ³ª°¡´Ù º¸¸é ¾ðÁ¨°¡´Â Mid À§Ä¡¿¡¼ ۰ªÀ» ãÀ» ¼ö ÀÖ´Ù. ¸¸¾à ã´Â ۰¡ ¹è¿¿¡ ¾ø´Ù¸é Lower¿Í Upper°¡ °°¾ÆÁö°Å³ª ¾Æ´Ï¸é Lower°¡ ´õ Ä¿Áö´Â »óŰ¡ µÇ´Âµ¥ À̶§´Â ãÁö ¸øÇß´Ù´Â -1À» ¸®ÅÏÇÏ¸é µÈ´Ù.
À̺Р°Ë»öÀº ¹üÀ§¸¦ °è¼Ó Àý¹Ý¾¿ ÁÙ¾î °¡¸é¼ °Ë»öÇϱ⠶§¹®¿¡ Å×À̺íÀÌ Ä¿µµ ºñ±³ ȸ¼ö°¡ ¸¹Áö ¾ÊÀº °ÍÀÌ ÀåÁ¡ÀÌ´Ù. ¹è¿ Å©±â°¡ nÀÏ ¶§ ÃÖ¾ÇÀÇ °æ¿ì¶óµµ log2n¹ø ºñ±³ÇÏ¸é ¿øÇÏ´Â °ªÀ» ãÀ» ¼ö ÀÖ´Ù. ±Ø´ÜÀûÀÎ °æ¿ì nÀÌ 40¾ïÀ̶ó ÇÏ´õ¶óµµ ±â²¯ 32¹ø¸¸ ºñ±³ÇÏ¸é µÇ¹Ç·Î ¼øÂ÷ °Ë»ö°ú´Â ºñ±³ÇÒ ¹Ù°¡ ¾Æ´Ï´Ù. À̺Р°Ë»öÀÌ ÀÌ·¸°Ô ¼Óµµ°¡ ºü¸¥ ÀÌÀ¯´Â ÀÚ·á°¡ Å©±â¼øÀ¸·Î Á¤·ÄµÇ¾î Àֱ⠶§¹®ÀÌ´Ù.
±×·¡¼ À̺Р°Ë»ö¿¡ »ç¿ëÇÒ ÀÚ·á´Â »ðÀÔÇÒ ¶§µµ ¹Ýµå½Ã ÀÌ Á¶°ÇÀ» Áö۵µ·Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¸¸¾à Áß°£¿¡ Á¤·ÄµÇÁö ¾ÊÀº ÀÚ·á°¡ ÀÖ´Ù¸é ´ë¼Ò ºñ±³ ¿¬»ê¹®ÀÇ °á°ú¸¦ ½Å·ÚÇÒ ¼ö ¾øÀ¸¹Ç·Î À̺Р°Ë»ö ¾Ë°í¸®ÁòÀº Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê´Â´Ù. Á¤·ÄµÇ¾î ÀÖÁö ¾Ê´Ù¸é Á¤·ÄÇÑ ÈÄ À̺Р°Ë»öÀ» ÇϵçÁö ¾Æ´Ï¸é óÀ½ºÎÅÍ Á¤·Ä »óŸ¦ À¯ÁöÇϵµ·Ï ÀڷḦ °ü¸®ÇØ¾ß ÇÏ´Â ºÎ´ãÀÌ ÀÖ´Ù. ´ÙÇàÈ÷ ¿ø·¡ºÎÅÍ Á¤·ÄµÇ¾î ÀÖ´Â ÀÚ·áµµ ¸¹ÀÌ Àִµ¥ ÀÌ·± ÀÚ·á¿¡ ´ëÇØ¼´Â ¹Ù·Î À̺Р°Ë»ö ¾Ë°í¸®ÁòÀ» ¾µ ¼ö ÀÖ´Ù.
¶ÇÇÑ Ã³À½ºÎÅÍ ¼ø¼´ë·Î °Ë»öÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó Áß°£ ºÎºÐÀ» ÄîÄî Âñ·¯º¸´Â ½ÄÀ̹ǷΠ۰ªÀÌ Áߺ¹µÉ °æ¿ì ¾î¶² ۰¡ °Ë»öµÉÁö ¾Ë ¼ö ¾ø´Â ¸ÍÁ¡ÀÌ ÀÖ´Ù. À§ ¿¹¿¡¼ ۸¦ 21·Î ¹Ù²Ü °æ¿ì µÎ °³ÀÇ 21Áß ¾î¶² °ªÀÌ °Ë»öµÉ °ÍÀΰ¡¸¦ ¿¹ÃøÇÒ ¼ö ¾øÀ¸¸ç Å×À̺í Å©±â°¡ °¡º¯ÀûÀÏ ¶§´Â »óȲ¿¡ µû¶ó °Ë»öµÇ´Â °ªÀÌ ´Þ¶óÁø´Ù. ŰÀÇ Áߺ¹À» ÇØ°áÇϵçÁö ¾Æ´Ï¸é À̺Р°Ë»öÀ¸·Î À쫆 ̣Àº ÈÄ ¾Æ·¡ À§ÀÇ ·¹Äڵ带 ¼øÂ÷ °Ë»öÇÏ¿© Áߺ¹µÈ °ª Áß Çϳª¸¦ ¼±ÅÃÇØ¾ß ÇÑ´Ù.
À̺Р°Ë»öÀº º¹À⼺¿¡ ºñÇØ È¿À²ÀÌ ±²ÀåÈ÷ ÁÁ±â ¶§¹®¿¡ °Ë»ö ¾Ë°í¸®Áò Áß¿¡´Â °¡Àå ½Ç¿ëÀûÀ̰í ÀÚÁÖ »ç¿ëµÈ´Ù. ±×·¡¼ C Ç¥ÁØÀº ¶óÀ̺귯¸® Â÷¿ø¿¡¼ À̺Р°Ë»ö ÇÔ¼ö¸¦ Á¦°øÇϴµ¥ ¹Ù·Î ´ÙÀ½ ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇØ¼µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
void *bsearch( const void *key, const void *base, size_t num, size_t width, int ( __cdecl *compare ) ( const void *elem1, const void *elem2 ) );
key´Â ã°íÀÚ ÇÏ´Â °ªÀ̰í base´Â ¹è¿ ¼±µÎ ¹øÁö, numÀº ¿ä¼Ò °³¼ö, width´Â ¿ä¼ÒÀÇ Å©±âÀÌ´Ù. ±×¸®°í compare´Â »ç¿ëÀÚ°¡ ÁöÁ¤ÇÏ´Â ºñ±³ ÇÔ¼öÀε¥ ºñ±³ ´ë»óÀÌ µÇ´Â µÎ °³ÀÇ °ªÀ» Àü´ÞÇÑ´Ù. compare ÇÔ¼ö´Â ÀÌ µÎ °ªÀ» ºñ±³ÇØ º¸°í ù ¹øÂ° Àμö°¡ ´õ ÀÛÀ¸¸é À½¼ö, °°À¸¸é 0, ´õ Å©¸é ¾ç¼ö¸¦ ¸®ÅÏÇØ¾ß ÇÑ´Ù. ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇØ »ç¿ëÇϱâ À§ÇØ void *¸¦ »ç¿ëÇϸç ŸÀÔº°·Î ºñ±³ÇÏ´Â ¹æ¹ýÀÌ ´Ù¾çÇϹǷΠºñ±³ ÇÔ¼ö¸¦ µû·Î Àü´ÞÇÑ´Ù´Â Á¡ÀÌ Á¶±Ý º¹ÀâÇÏÁö¸¸ »ç¿ëÇϱâ´Â ±²ÀåÈ÷ ½¬¿î ÆíÀÌ´Ù. ¾ÕÀÇ ¿¹Á¦¸¦ bsearch ÇÔ¼ö·Î ´Ù½Ã ÀÛ¼ºÇØ º¸ÀÚ.
|
¿¹ Á¦ : bsearch |
#include <Turboc.h>
int compare(const void *elem1,const void *elem2)
{
return (*(int *)elem1 - *(int *)elem2);
}
void main()
{
int ar[]={2,6,13,19,21,21,23,29,35,48,62,89,90,95,99,102,109,208,629};
unsigned num;
int key;
int *ptr;
num=sizeof(ar)/sizeof(ar[0]);
key=29;
ptr=(int *)bsearch(&key,ar,num,sizeof(int),compare);
if (ptr==NULL) {
puts("ã´Â °ªÀÌ ¾ø½À´Ï´Ù.");
} else {
printf("ã´Â °ªÀº %d¹øÂ°¿¡ ÀÖ½À´Ï´Ù.\n",ptr-ar);
}
}
À̺Р°Ë»ö ¾Ë°í¸®Áò ±¸ÇöÀº bsearch ÇÔ¼ö ³»ºÎ¿¡¼ ÇÏ¸ç »ç¿ëÀÚ´Â ÀÌ ÇÔ¼ö°¡ Àü´ÞÇÏ´Â °ªÀ» ºñ±³Çؼ ±× °á°ú¸¸ ¸®ÅÏÇÏ¸é µÈ´Ù. compare ÇÔ¼ö´Â µÎ Á¤¼öÀÇ ´ë¼Ò °ü°è¸¦ ºñ±³ÇØ¾ß ÇϹǷΠ´Ü¼øÈ÷ µÎ °ªÀÇ Â÷¸¦ ¸®ÅÏÇÏ¸é µÈ´Ù. ¸¸¾à °Ë»ö ´ë»óÀÌ ¹®ÀÚ¿À̶ó¸é strcmp(i) ÇÔ¼ö·Î ºñ±³ÇÑ °ªÀ» ¸®ÅÏÇÏ¸é µÈ´Ù. °á°ú´Â ¾ÕÀÇ ¿¹Á¦¿Í µ¿ÀÏÇ쵂 bsearch ÇÔ¼ö´Â ¾î¼Àºí¸®·Î ÀÛ¼ºµÇ¾î ÀÖ°í °íµµ·Î ÃÖÀûȵǾî ÀÖÀ¸¹Ç·Î ÈξÀ ´õ ºü¸£°í ¾ÈÁ¤ÀûÀÌ´Ù.
Á» ´õ ¹ßÀüµÈ À̺Р°Ë»ö ¹æ¹ýÀ¸·Î ÇǺ¸³ªÄ¡ ¼ö¿À» »ç¿ëÇϰųª º¸°£À» ÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù. ÀÌ ¹æ¹ýµéÀº ¹üÀ§¸¦ ÁÙÀÏ ¶§ ۰¡ ¾ø´Ù°í ÆÇ´ÜµÇ´Â ºÎºÐÀ» ºü¸£°Ô °Ç³Ê¶ÜÀ¸·Î½á ´Ü¼ø À̺Р°Ë»ö¿¡ ºñÇØ¼´Â ¼Óµµ°¡ Á¶±Ý ´õ ºü¸£´Ù. ±×·¯³ª ¾Ë°í¸®ÁòÀÌ ´Ù¼Ò º¹ÀâÇÏ°í ¼ÓµµÂ÷µµ ¸¹ÀÌ ³ª´Â ÆíÀº ¾Æ´Ï¹Ç·Î À̺Р°Ë»öÀÌ ÇÊ¿äÇÒ ¶§´Â Ç¥ÁØ bsearch ÇÔ¼ö Á¤µµ¸é ´ëü·Î ÃæºÐÇÏ´Ù.
À̺Р°Ë»öÀº Áß°£ ºÎºÐÀ» ºü¸£°Ô ¾×¼¼½ºÇÒ ¼ö ÀÖ¾î¾ß ÇϹǷΠ¹è¿¿¡ ´ëÇØ¼¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¬°á ¸®½ºÆ®´Â ¸ñ·Ï»óÀÇ ÀÓÀÇ ³ëµå·Î ¹Ù·Î À̵¿ÇÏ´Â ´É·ÂÀÌ ¾ø±â ¶§¹®¿¡ ¾Æ¹«¸® Á¤·ÄµÇ¾î ÀÖ´õ¶óµµ À̺Р°Ë»öÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. ¿¬°á ¸®½ºÆ®´Â ¼øÂ÷ÀûÀ¸·Î¸¸ °ªÀ» ÀÐÀ» ¼ö ÀÖÀ¸¹Ç·Î ¿À·ÎÁö ¼øÂ÷ °Ë»ö¸¸ °¡´ÉÇÑ ÀÚ·á ±¸Á¶ÀÌ´Ù.