¸¶. À̺Р°Ë»ö

¿ÀÇÁ¼ÂÀ¸·ÎºÎÅÍ ÁÙ¹øÈ£¿Í ¿­¹øÈ£¸¦ ã¾ÆÁÖ´Â GetRCFromOff ÇÔ¼ö´Â À¯Æ¿¸®Æ¼ ÇÔ¼öµé Áß¿¡ °¡Àå ÀÚÁÖ È£ÃâµÇ´Â ÇÔ¼öÀÌ´Ù. ¾ÕÀ¸·Î ´õ ´Ã¾î³ª°ÚÁö¸¸ ApiEdit9´Â 22 °÷¿¡¼­ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÁÙ¹øÈ£¸¦ ±¸ÇÏ°í ÀÖ´Ù. ÀÌ·¸°Ô ÀÚÁÖ È£ÃâµÇ´Â ÇÔ¼öÀε¥µµ °Ë»ö ¹æ¹ýÀÌ ´Ù¼Ò ºÒÇÕ¸®ÇÏ°Ô ÀÛ¼ºµÇ¾î ÀÖ¾î ¹®¼­°¡ Ä¿Áö¸é °Ë»ö ¼Óµµ°¡ ´À·ÁÁø´Ù. µû¶ó¼­ ÀÌ ÇÔ¼ö¸¦ ÃÖÀûÈ­ÇÏ¿© °Ë»ö ¼Óµµ¸¦ °³¼±Çϸé Àü¹ÝÀûÀÎ ¼Óµµ Çâ»óÀ» ±â´ëÇÒ ¼ö ÀÖ´Ù.

ÀÌ ÇÔ¼ö°¡ ÁÙ¹øÈ£¸¦ ã´Â ¹æ¹ýÀº °Ë»ö ¹æ¹ý Áß °¡Àå ´Ü¼øÇÑ ¼øÂ÷ °Ë»ö(Sequential Search)ÀÌ´Ù. ¹®¼­ÀÇ Ã¹ ÁÙºÎÅÍ °Ë»öÀ» ½ÃÀÛÇÏ¿© ¿øÇÏ´Â ÁÙÀ» ãÀ» ¶§±îÁö ÁÙ¹øÈ£¸¦ °è¼Ó Áõ°¡½ÃÄÑ °¡¸ç °Ë»öÇØ ³ª°£´Ù. 0¹ø ÁÙºÎÅÍ ¡®³Ê ÀÌ ¿ÀÇÁ¼Â °¡Áö°í ÀÖ¾î?¡¯¶ó´Â Áú¹®À» ´øÁö±â ½ÃÀÛÇؼ­ 1¹ø ÁÙ, 2¹ø ÁÙ, 3¹ø ÁÙ ½ÄÀ¸·Î °è¼Ó Áú¹®À» ÇØ ³ª°¡´Ù°¡ Yes¶ó´Â ´ë´äÀ» µéÀ» ¶§±îÁö °Ë»öÀ» ÇÏ´Â °ÍÀÌ´Ù. ¹®¼­°¡ ªÀ¸¸é ÀÌ ¹æ¹ýµµ È¿À²ÀûÀÌÁö¸¸ ¹®¼­ ±æÀÌ°¡ Ä¿Áö¸é ÀÚ¿¬È÷ °Ë»ö ¼Óµµ°¡ ´À·ÁÁú ¼ö¹Û¿¡ ¾ø´Ù.

ÀÌ ÇÔ¼ö°¡ °Ë»öÇÏ´Â ´ë»óÀÎ pLine ¹è¿­Àº ¿ÀÇÁ¼Â ¼ø¼­´ë·Î Á¤·Ä(Sort. Align°ú´Â ´Ù¸§)µÇ¾î Àִٴ Ư¡ÀÌ ÀÖÀ¸¸ç ÀÌ Æ¯Â¡À» ½ÊºÐ È°¿ëÇÏ¿© À̺Р°Ë»ö(Binary Search)À¸·Î ¾Ë°í¸®ÁòÀ» ¹Ù²Ù¸é ÈξÀ ´õ »¡¸® ¿øÇÏ´Â ÁÙÀ» ã´Â´Ù. À̺Р°Ë»öÀ̶õ Àüü ±¸°£À» ¹Ý¾¿ ³ª´©¾î °¡¸ç ã´Â °ªÀÌ ÀÖ´Â ±¸°£À» ¼±ÅÃÇØ ³ª°¡´Â °Ë»ö ¹æ¹ýÀÌ¸ç ¹®¼­°¡ Ä¿Á®µµ ºñ±³ Ƚ¼ö°¡ ±×¸® ¸¹Áö ¾Ê´Ù.

¿¹¸¦ µé¾î ¹®¼­°¡ ÃÑ 1000ÁÙÀ̶ó°í ÇÒ ¶§ 200¹ø° ÁÙÀ» °Ë»öÇØ¾ß ÇÑ´Ù°í Çغ¸ÀÚ. Àüü 1000ÁÙÀ» Àý¹ÝÀ¸·Î ³ª´©¸é 0~500, 500~1000 µÎ ±¸°£À¸·Î ³ª´©¾îÁø´Ù. ÀÌ ±¸°£ÀÇ °æ°èÀÎ 500ÀÇ °ªÀ» º¸°í ÀÌ °ªº¸´Ù ã´Â °ªÀÌ ´õ Å©´Ù¸é µÚÂÊ ±¸°£À» ¼±ÅÃÇÏ°í ÀÛ´Ù¸é ¾ÕÂÊ ±¸°£À» ¼±ÅÃÇÑ´Ù. ¹°·Ð 500ÀÌ Ã£´Â °ªÀÌ¸é ´õ ÀÌ»ó °Ë»öÇÒ ÇÊ¿äµµ ¾ø´Ù. ±×·¯¸é 0~499°¡ ¸ÕÀú ¼±ÅÃµÇ°í ´Ù½Ã ÀÌ ±¸°£À» ³ª´©¸é 0~250ÀÌ ¼±Åõǰí 125~250±¸°£ÀÌ ¼±Åõǰí ÀÌ·± ½ÄÀ¸·Î °è¼Ó ¹üÀ§¸¦ Á¼Çô ³ª°¡´Ù º¸¸é ¿øÇÏ´Â 200ÁÙÀ» ±Ý¹æ °Ë»öÇØ ³¾ ¼ö ÀÖ´Ù.

GetRCFromOff ÇÔ¼ö¸¦ ÀÌ ¹æ½Ä´ë·Î °Ë»öÇϵµ·Ï ¹Ù²Ù¾î º¸ÀÚ. ¿Ï¼ºµÈ ÄÚµå´Â ´ÙÀ½°ú °°´Ù. À̺Р°Ë»ö¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ¾Ë°í¸®Áò ¼­ÀûÀ» º¸¸é ¾î·ÆÁö ¾Ê°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ¸¹Ç·Î »ó¼¼ÇÑ ÄÚµå ºÐ¼®Àº »ý·«ÇÑ´Ù.

 

void GetRCFromOff(int nPos, int &r, int &c)

{

     int Upper,Lower;

 

     Lower=0;

     Upper=TotalLine-1;

     for (;;) {

          r=(Upper+Lower)/2;

 

          if (nPos > pLine[r].Start && nPos < pLine[r].End)

              break;

 

          if (nPos == pLine[r].Start) {

              if (pLine[r].nLine != 0 && bLineEnd==TRUE) {

                   r--;

              }

              break;

          }

 

          if (nPos == pLine[r].End) {

              if (buf[pLine[r].End] == 0 || buf[pLine[r].End] == ¡®\r¡¯ || bLineEnd == TRUE) {

                   break;

              }

          }

 

          if (pLine[r].Start > nPos) {

              Upper=r-1;

          } else {

              Lower=r+1;

          }

     }

 

     c=nPos-pLine[r].Start;

}

 

¼øÂ÷ °Ë»öÀ» ÇÒ ¶§¿Í ºñ±³Çغ¸¸é ¾Ë°í¸®Áò ¿Ü¿¡µµ ¸î °¡Áö ´Þ¶óÁø °ÍÀÌ Àִµ¥ ¿ÀÇÁ¼ÂÀÌ ÀÌ ÁÙ¿¡ ¼ÓÇß´ÂÁö ¹üÀ§¸¦ °Ë»çÇÒ ¶§ StartÀ§Ä¡´Â Á¦¿ÜµÈ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. nPos¿Í pLine[r].Start¸¦ ºñ±³ÇÏ´Â ¿¬»êÀÚ°¡ >=¿¡¼­ >·Î ¹Ù²î¾ú´Ù. ¿ÀÇÁ¼ÂÀÌ ÁÙÀÇ Ã³À½°ú °°´õ¶óµµ ÀÌ ÁÙÀÌ ÀÚµ¿°³ÇàµÈ ÁÙÀÌ°í bLineEnd°¡ TRUEÀ̸é ÀÌ ¿ÀÇÁ¼ÂÀº ÀÌÀü ÁÙÀÇ ³¡¿¡ ÀÖ´Â °ÍÀ̹ǷΠº°µµ·Î Á¶°Ç Á¡°ËÀ» ÇØ¾ß ÇÑ´Ù.

¼øÂ÷ °Ë»öÀ» ÇÒ ¶§´Â Start¸¦ ¹üÀ§¿¡ Æ÷ÇÔ½ÃÄѵµ »ó°ü¾ø´Âµ¥ ¿Ö³ÄÇϸé Ç×»ó À­ÁÙÀÌ ¸ÕÀú °Ë»çµÇ°í À­ÁÙ¿¡¼­ nPos°¡ End¿Í °°°í bLineEnd°¡ TRUEÀ̸é ÀÌ ¿ÀÇÁ¼ÂÀ» ¸ÕÀú ÀÚ½ÅÀÇ ÁÙ¿¡ Æ÷ÇÔ½ÃÅ°±â ¶§¹®ÀÌ´Ù. nPos°¡ Start¿Í °°¾ÆÁø Á¶°ÇÀº ÀÌ¹Ì À­ÁÙÀº ¾Æ´Ï¶ó´Â °¡Á¤ÀÌ ÀÖÀ¸¹Ç·Î nPos°¡ Start¿Í °°À» ¶§ ¹«Á¶°Ç ÀÌ ÁÙ¿¡ ¼ÓÇÑ ¿ÀÇÁ¼ÂÀ̶ó°í º¼ ¼ö ÀÖ¾ú´Ù.

±×·¯³ª À̺Р°Ë»öÀº ÁÙ¹øÈ£ ¼øÀ¸·Î Å×½ºÆ®¸¦ ÇÏ´Â °ÍÀÌ ¾Æ´Ï°í ±¸°£ÀÇ Áß°£Áß°£À» ÄîÄî Âñ·¯ º¸¸é¼­ ¡®ÀÌ ¿ÀÇÁ¼ÂÀÌ ´Ï ²¨¾ß? ¾Æ´Ï¸é ³Êº¸´Ù Ä¿, ÀÛ¾Æ?¡¯¸¦ Áú¹®Çϱ⠶§¹®¿¡ ¾î¶² ÁÙÀÌ ¸ÕÀú Å×½ºÆ®µÉÁö ¾Ë ¼ö°¡ ¾ø´Â °ÍÀÌ´Ù. ±×·¡¼­ nPos°¡ StartÀÎ °æ¿ì´Â ¹«Á¶°Ç ÁÙ ¹üÀ§¾È¿¡ ÀÖ´Ù°í È®½ÅÇÒ ¼ö ¾øÀ¸¸ç º°µµÀÇ Å×½ºÆ®°¡ ´õ ÇÊ¿äÇÏ´Ù. nLineÀÌ 0ÀÌ ¾Æ´Ï¶ó´Â Á¶°ÇÀº ÀÚµ¿°³ÇàµÈ ÁÙÀÇ ¼±µÎ¶ó´Â ¶æÀ̸ç ÀÌ »óÅ¿¡¼­ bLineEnd°¡ TRUEÀ̸é ÀÌ ÁÙ ¹Ù·Î ¾Õ ÁÙÀÇ ³¡ ¿ÀÇÁ¼ÂÀ̶ó°í ÆÇ´ÜÇÏ°Ô µÈ´Ù.

¾Ë°í¸®ÁòÀ» ¹Ù²Û ÈÄ ¿¹Á¦¸¦ ½ÇÇàÇغ¸¸é È¿°ú´Â °¡È÷ ³î¶ö¸¸ÇÏ´Ù. ¹®¼­ÀÇ ¾î´À ºÎºÐ¿¡¼­³ª ij·µÀ̵¿À̳ª ¼±Åÿ¡ Áö¿¬ÀÌ °ÅÀÇ ¾ø´Ù´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. 96000ÁÙÀ» ã´Âµ¥ 96000¹øÀ» ºñ±³Çß´ø °ÍÀ» 17¹ø Á¤µµ¸¸ ºñ±³Çϸé ãÀ» ¼ö ÀÖ°Ô µÇ¾ú±â ¶§¹®ÀÌ´Ù. ´õ±¸³ª ¼±ÅÃÇÒ ¶§´Â ÀÌ ÇÔ¼ö°¡ ÇÑ ¹ø È£ÃâµÇ´Â °Íµµ ¾Æ´Ï°í ¿©·¯ ¹ø ¹Ýº¹ÀûÀ¸·Î È£ÃâµÇ±â ¶§¹®¿¡ ¼Óµµ Çâ»ó È¿°ú°¡ ´õ¿í Å©´Ù.