±è»ó¿íÀÇ Vector, Hashtable Ŭ·¡½º ¼º´É ½ÇÇè ¿Ü
¡Ø °Á¿¡ ´ëÇÑ Áú¹®Àº '¹®ÀÇ°Ô½ÃÆÇ'¿¡¼ ÇØÁÖ¼¼¿ä.
¾È³çÇϼ¼¿ä? /^.^/ À̹ø °Á¿¡¼´Â ÀÚ·áÀÇ ÀúÀå ¹× °ü¸®¿¡ ¾²ÀÌ´Â ¹è¿ ƯÈ÷³ª ±× Å©±â°¡ Àý·Î ´Ã¾î³ª´Â µ¿Àû¹è¿ÀÎ VectorŬ·¡½º¿Í key°ªÀ¸·Î value°ªÀ» ã¾Æ°¡´Â °Ë»öŬ·¡½º HashtableÀÇ ¼º´É½ÇÇèÀ» Çغ¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. °ç´Ù¸®·Î ¹Ýº¹¹®¿¡¼ StringŬ·¡½º¿Í StringBuffer Ŭ·¡½ºÀÇ ÀÌ¿ëÀÌ ¼º´É¿¡ ¾ó¸¶¸¸Å Â÷À̸¦ º¸ÀÌ´ÂÁöµµ Á÷Á¢ ¾Ë¾Æº¸Áö¿ä. ¹®Á¦Á¦±â´Â HashtableÀº °³¹ßÀÚ¿¡°Ô µ¥ÀÌŸ °Ë»ö ¾Ë°í¸®Áò¿¡ ½Å°æÀ» ¾²Áö ¾Êµµ·Ï ÇØÁÖ´Â ¸Å¿ì À¯¿ëÇÑ Å¬·¡½ºÀÓÀ» ¾Ë°ÔµÈ µ¥¿¡¼ ½ÃÀ۵Ǿú½À´Ï´Ù. key°ªÀ¸·Î value°ªÀ» ¹Ù·Î ã¾Æ°¥ ¼ö ÀÖµµ·Ï ÇØÁÖ±â´Â ÇÏÁö¸¸ ½ÇÁ¦·Î ÀÌ°Ô ¾ó¸¶¸¸ÅÀÇ È¿¿ëÀ» °¡Áö°Ú´À³Ä¿¡ ´ëÇÑ Àǹ®À» °®°í ÀÖ´ø Â÷¿¡, ¼öÇÐÀûÀ¸·Î µûÁöÀÚ¸é, °Ë»ö¼Óµµ°¡ °ÅÀÇ O(1)¿¡
¶³¾îÁö´Â ÀڷᱸÁ¶¶ó´Â °ÍÀÌÁö¿ä. ¸®½ºÆ®³ª ¹è¿Àº Àû¾îµµ n¹øÀ» µÚÁ®¾ßÇϱ⠶§¹®¿¡ °Ë»ö¼Óµµ°¡ O(n)¿¡ ¹Ù¿îµå µÇ³ª, Çؽ¬Å×À̺íÀº
key°ªÀ» °¡Áö°í ¹Ù·Î ã¾Æ°¡¹Ç·Î °ÅÀÇ O(1)°¡ µË´Ï´Ù. Big O notationÀÇ Á¤È®ÇÑ Á¤ÀÇ´Â,f(x)¿Í
g(x)°¡ ÀÖÀ» ¶§, 0 <= f(n) <= c*g(n) (for all n larger than N, c>0)
À» ¸¸Á·Çϸé f(x)=O(g(x)) ·Î ³ªÅ¸³»´Â °ÍÀ» ¸»ÇÑ´ä´Ï´Ù. - ³ª¿ì´©¸® ÀÚ¹Ùµ¿¿¡¼ ¹ßÃé - ÀÌ·¯ÇÑ ³»¿ëÀ» º¸°í¼, ±×Á¦¼¾ß äÆùæÀ» ±¸¼ºÇÒ ¶§ Á¦¸ñÀ» Å°°ªÀ¸·Î HashtableÀ» Áñ°Ü ¾²´ø ÀÌÀ¯¸¦ ¾Ë°ÔµÈ °Å°Åµç¿ä. (Àúµµ ±× Àü±îÁö´Â ¼ÖÁ÷È÷ ±×³É ³²µéÀÌ ¾²´Ï±î ½èÁö¿ä.) ±×·¸´Ù¸é, µ¥ÀÌŸ°¡ 2´ÜÀ¸·Î ±¸¼ºµÇ¾îÀÖÀ» °æ¿ì¿¡´Â ¾î¶³±î? ÇÏ´Â ±Ã±ÝÁõÀÌ ÀÏ¾î ½ÇÇèÀ» ½ÃÀÛÇÏ°Ô µÇ¾ú½À´Ï´Ù. Áï, Hashtable¾È¿¡ ¶Ç HashtableµéÀ» ³Ö´Â °Å¿Í Vector¾È¿¡ ¶Ç Vector¸¦ ³Ö´Â °æ¿ì¸¦ ºñ±³Çغ¸´Â °ÍÀÌÁö¿ä. Hashtable¾È¿¡ ¶Ç HashtableÀ» ³Ö´À´Ù. ¹æ(Hashtable) ¾È¿¡ Ŭ¶óÀ̾ðÆ®(Hashtable)µéÀ» °ü¸®ÇÑ´Ù? ÀÌ°ÍÀÌ ¸¸Á·½º·¯¿î °á°ú°¡ ³ª¿À¸é Àú´Â ´ÙÀ½ ÇÁ·ÎÁ§Æ®¿¡ HashtableÀ» 3´ÜÀ¸·Î ÀÌ¿ëÇÒ Áöµµ ¸ð¸¨´Ï´Ù. ^_^ ±Ã±ÝÇϽÃÁö ¾ÊÀ¸½Ê´Ï±î? Àç¹Ì¾øÀ¸½Å°¡¿ä? ³ª°¡¿ê~! Àü Àç¹ÌÀִµ¥....^_^ Á¦°¡ ±Ã±ÝÇؼ ÇÊ¿äÇÑ ´ë·Î ÄÚµùÇØ ºñ±³¸¦ Ç߱⠶§¹®¿¡ ÀÐÀ¸½Ã´Â ºÐ²²´Â ÀûÀýÇÑ ºñ±³°¡ ¾Æ´ÒÁöµµ ¸ð¸¨´Ï´Ù. °¨¾ÈÇϽðí ÀÐÀ¸¼ÌÀ¸¸é ÁÁ°Ú½À´Ï´Ù. ^_^ ½ÃÀÛÇغ¼±î¿ä? ¾ÆÀÚÀÚÀã ½ÇÇè ÄÄÇ»ÅÍ »ç¾ç : CPU : À½, ¸ðÁö???? ¼¿·¯·Ð 400~ 500 Á¤µµÀÏ°Ì´Ï´Ù. --; RAM : 265M OS : win2k pro. ½ÇÇè¿¡ »ç¿ëµÈ ¼Ò½º : 2 °¡Áö ÀÔ´Ï´Ù
Å×ÀÌºí ±¸¼º
ÀÌ·± ½ÄÀÌ°í¿ä, ¾È¿¡ µé¾î°¡´Â Ç׸ñÀº °ª/°ª À¸·Î µÇ¾îÀִµ¥ ¾ÕÀÇ °ªÀº, µ¥ÀÌŸ¸¦ ÀÔ·ÂÇϴµ¥ °É¸®´Â ½Ã°£ÀÌ°í, µÚÀÇ °ªÀº µ¥ÀÌŸ¸¦ °Ë»ö ¹× Ãâ·ÂÇϴµ¥ °É¸®´Â ½Ã°£ÀÔ´Ï´Ù. ½Ã½ºÅÛ¿¡ Ãâ·ÂÇÏ´Â °ÍÀÌ ½Ã°£À» ¸¹ÀÌ Àâ¾Æ¸Ô±â ¶§¹®¿¡, ¼ø¼ö access ºñ±³¸¦ À§ÇØ µû·Î ºÐ¸®½ÃÄÑ µÎ¾ú½À´Ï´Ù. ¾Æ ÀÌ ¹è·Á½É. À½ 1000°³ ³Ñ°Ô Ãâ·ÂÇÒ ¶§¿¡´Â ´Ù¿îµµ µÇ³×¿ä. (1000°³¸é 2´ÜÀ̹ǷΠ1000x1000À̴ϱî..À½) ms (1/1000ÃÊ) ´ÜÀ§ÀÔ´Ï´Ù. Vector 30°³ÀÏ °æ¿ì
50
100
1000
10000
Hashtable °ú ºñ±³¼³¸í 30
50
100
1000
10000
(»¡°£) ±Û¾¾´Â String´ë½Å StringBufferÀ» »ç¿ëÇßÀ» ¶§ÀÇ ¼öÄ¡ÀÔ´Ï´Ù. Hashtable°ú VectorÀÇ Å×À̺íÀ» ºñ±³Çغ¸½Ã¸é, (Å×À̺íÀÇ Ã¹¹ø° row¸¦ º¸¼¼¿ä) ÀԷ¿¡¼, Vector°¡ 1.5 ¹è ºü¸¥ ¼Óµµ¸¦ º¸¿©ÁÖ°í ÀÖ½À´Ï´Ù. Ãâ·Â¿¡¼, ÄܼÖÃâ·ÂÀ» »« ¼ø¼ö access¿¡¼ key°ªÀ» ¸¸µé¾î¼ value°ªÀ» °¡Á®¿À´Â Hashtableº¸´Ù ÈξÀ Vector°¡ ºü¸¨´Ï´Ù. ºñ±³°¡ µÇÁö ¾ÊÀ» Á¤µµ±º¿ä. 10000 °³ µ¥ÀÌŸ¿¡¼´Â Àå³ÀÌ ¾Æ´Ñ ¼ÓµµÂ÷¸¦ º¸¿©ÁÖ°í ÀÖ½À´Ï´Ù. ÄܼÖÃâ·Â¿¡¼´Â ÀÌ»óÇÒ Á¤µµ·Î ±×´ÙÁö Â÷ÀÌ°¡ ³ªÁö ¾Ê´Â±º¿ä. Á¦°¡ ÄÚµù ¹Ì¼÷ÀÎÁö? StringBuffer Ŭ·¡½º ÀÌ¿ë°ú VectorÀÌ¿ë¿¡¼ µ¥ÀÌŸ ¼ö°¡ ¸Å¿ì Å©¸é ¸Þ¸ð¸® ºÎÁ·Çö»óÀÌ ³ªÅ¸³ª´õ±º¿ä. Ãʱâ¿ë·®À» Àâµç ¾ÈÀâµç... ÂÁ. 1000 x 1000 = 1,000,000 °³ µ¥ÀÌŸ¶ó...(¿À´Ã ½ÇÇè ¶§¹®¿¡ ´Ù¿î 5¹ø ¸ÔÀ½.) ±×·±µ¥ µÎ¹ø° row °Ë»öºÎºÐ¿¡¼´Â HashtableÀÌ ¶ÇÇÑ Àå³ÀÌ ¾Æ´Õ´Ï´Ù. 10000 ´ÜÀ§ µ¥ÀÌŸ¿¡¼µµ °ÅÀÇ 0¿¡ °¡±î¿î °Ë»ö½Ã°£À» º¸¿©Áִ±º¿ä. 10000°³ÀÇ HashtableÀ» ´Ù½Ã 10000°³ÀÇ Hashtable¿¡ ³Ö¾ú´Âµ¥µµ ¸»ÀÔ´Ï´Ù. ¹Ï¾îÁöÁö ¾ÊÀ» Á¤µµ±º¿ä. ¿©·¯ºÐ, °Ë»öÇÒ ¶§ Hashtable³²¹ßÇϼ¼¿ä ¤Ì.¤Ì ºÎ°¡ÀûÀ¸·Î »¡°£ ±Û¾¾´Â private void outputDataAll() for(int i = 0; i < nMap ; i++) À§¿¡¼ String¿¡ ÇØ´çÇÏ´Â ºÎºÐÀ» StringBuffer stb = new StringBuffer(ÀÏÁ¤°ª*nMap); stb.append(); ÀÌ°É·Î ´ëüÇؼ ½ÇÇèÇÑ °á°úÀ̸ç, ¿¹»ó´ë·Î StringBufferŬ·¡½º°¡ °è¼Ó »õ·Î¿î °´Ã¼ »ý¼º(ÀÚ¹Ù¿¡¼ °¡Àå ºñ¿ëÀÌ ¸¹ÀÌ µå´Â ÀÏÀÌÁÒ.)À» ÇÏ´Â StringŬ·¡½ºº¸´Ù ¿ùµîÇÑ ¼º´ÉÀ» º¸¿©ÁÖ°í ÀÖ½À´Ï´Ù. ÇѱÛÀÚ¸¸ ºÙÀ̴µ¥¿¡´Â 10000°³ µ¥ÀÌŸ ½ÇÇèÇÏ¸é ¾à 250¹è Â÷À̳´Ù°í ÇÏ´õ±º¿ä. ÇÏÁö¸¸, µ¥ÀÌŸ ¼ö°¡ Áõ°¡ÇÒ ¼ö·Ï ¸¹Àº ¾çÀÇ µ¥ÀÌŸ¿¡ ´ÙÀ½ µ¥ÀÌŸ¸¦ appendÇÏ´Â °úÁ¤¿¡¼ StringŬ·¡½º¿ÍÀÇ °ÝÂ÷°¡ Á¶±Ý¾¿ ÁÙ¾îµå´Â ¸ð½ÀÀ» º¸¿©ÁÖ¾úÀ¸¸ç, Å« µ¥ÀÌŸ¿¡¼´Â Á¦ ÄÚµù¹Ì¼÷?À¸·Î Å« ¹öÆÛ¿ë·®À» °¨´çÇÏÁö ¸øÇÏ°í ÄıîÁö ´Ù¿î½ÃÅ°´Â ¿ë°¨¼ºÀ» º¸¿©ÁÖ´õ±º¿ä... ÈæÈæ ¹°·Ð °³¹ßÀÚÀÇ ÆíÀǸ¦ À§ÇØ API¿¡ Ãß°¡µÈ Ŭ·¡½ºµéÀº ¿ì¸®°¡ ²À ÇÊ¿ä·Î ÇÏ´Â ±â´É ÀÌ¿Ü¿¡µµ ÀÌ°ÍÀú°Í ´Þ¶óºÙ¾îÀÖÀ¸´Ï ÇÊ¿äÇÑ ±â´É¸¸ °®Ãßµµ·Ï Á÷Á¢ ¸¸µé¾î ¾²´Â °Í º¸´Ù¾ß ¼º´ÉÀÌ ÃÄÁø´Ù´Â °Ç ÀÌ¹Ì ÁüÀÛÇϽðÚÁÒ? ÀÚ, ÀÌ ½ÇÇèÀÌ µµ¿òÀÌ µÇ¼Ì³ª ¸ð¸£°Ú³×¿ä. ±×·³ ´ÙÀ½ À̽𣿡 -_-V
|