¼Ò¹Ú¹ý¿¡ µû¸£´Â ij¸¯ÅÍ ¶óÀÎ Á¶ÇÕ


ÇÔ¼ö¸í
naiveMatch  ¼Ò¹Ú¹ý¿¡ µû¸£´Â ij¸¯ÅÍ ¶óÀÎ Á¶ÇÕ
Çü½Ä
char *naiveMatch(char *text, int len, char *pattern, int patlen);
Àμö
text     (ÀÔ·Â) ÅؽºÆ®
len      (ÀÔ·Â) ÅؽºÆ®ÀÇ ±æÀÌ
pattern  (ÀÔ·Â) Á¶ÇÕ ÆÐÅÏ
patlen   (ÀÔ·Â) Á¶ÇÕ ÆÐÅÏÀÇ ±æÀÌ
ÇÔ¼öÄ¡
Á¶ÇÕ ÆÐÅÏÀÌ ÅؽºÆ®·ÎºÎÅÍ ¹ß°ßµÇ¾úÀ» °æ¿ì´Â ±× Æ÷ÀÎÅÍ,
¹ß°ßµÇÁö ¾Ê¾Ò´ø °æ¿ì´Â 0 (NULL).
ÁÖÀÇ »çÇ×

¿ë·Ê(naiveMatch-test.c )

ÇÁ·Î±×·¥(naiveMatch.c )
char *naiveMatch(char *text, int len, char *pattern, int patlen)
{
    char c;
    char *tp, *pp;
    char *textEnd, *patEnd;

    if (patlen == 0)  return text;
    if (len < patlen) return NULL;

    textEnd = text + len - patlen + 1;
    patEnd  = pattern + patlen;

    c = *pattern++;
    while (text ! = textEnd) {
        if (*text++ == c) {
            tp = text;
            pp = pattern;
            do if (pp == patEnd) return text - 1;
            while (*tp++ == *pp++);
        }
    }

    return NULL;
}
¼³¸í
ij¸¯ÅÍ ¶óÀÎÀÇ Á¶ÇÕÀº, ij¸¯ÅÍ ¶óÀÎÀÇ Å½»öÀ̶ó°íµµ ÇÑ´Ù. ÅؽºÆ®·Î ºÒ¸°´Ù ij¸¯ÅÍ ¶óÀξȿ¡, ÆÐÅÏÀ¸·Î ºÒ¸®´Â ij¸¯ÅÍ ¶óÀο¡ ÀÏÄ¡ÇÏ´Â ºÎºÐÀÌ ÀÖÀ»±î ¾î¶§ ÀÎÁö¸¦ Á¶»çÇÏ´Â ¹®Á¦ÀÌ´Ù. ±×·¯ÇÑ ºÎºÐÀÌ ¹ß°ßµÇ¾úÀ» °æ¿ì¿¡´Â, ±× Àå¼Ò¸¦ ´ë´äÇÑ´Ù. ÅؽºÆ®¡¤¿¡µðÅÍ¿¡ À־ÀÇ Å½»ö Ä¿¸àµå³ª µ¥ÀÌŸº£À̽º ¿¡ À־ÀÇ °Ë»ö µî¿¡ »ç¿ëµÇ¾î »ç¿ë ºóµµ°¡ ¸¹Àº Á¶ÀÛÀÏ °ÍÀÌ´Ù.

ÅؽºÆ®¿¡ Á¶ÇÕ ÆÐÅÏÀ» °ÅµìÇØ, ÀÏÄ¡ÇÒÁö ¾î¶³Áö¸¦ Á¶»çÇÑ´Ù. ÀÏÄ¡ÇÏ´Â°Å¾ß Â÷¸é °ÅµìÇÏ´Â À§Ä¡¸¦ ¿À¸¥ÂÊÀ¸·Î 1°³¾Ê°íµé ÇØ ¹Ýº¹ÇÑ´Ù.

ÀÌ ¹æ¹ýÀÇ °è»ê·®Àº, ÃÖ¾ÇÀÇ °æ¿ì O(mn)ÀÌ´Ù. ´Ù¸¸, m, n´Â °¢°¢ ÅؽºÆ®, Á¶ÇÕ ÆÐÅÏÀÇ ±æÀ̸¦ ³ªÅ¸³½´Ù.

°ü·Ã ÇÔ¼ö
KMP¹ý¿¡ µû¸£´Â ij¸¯ÅÍ ¶óÀÎ Á¶ÇÕ, RK¹ý¿¡ µû¸£´Â ij¸¯ÅÍ ¶óÀÎ Á¶ÇÕ, BM¹ý¿¡ µû¸£´Â ij¸¯ÅÍ ¶óÀÎ Á¶ÇÕ, Á¤±Ô Ç¥Çö¿¡ ÀÇÇÑ Ä³¸¯ÅÍ ¶óÀÎ Á¶ÇÕ