U E D R , A S I H C RSS

Data Structure/String

ฐ€žฅ ธฐ๋ณธ Œจ„ด ๋งคนญ •Œ ๋ฆฌ˜

~cpp 
int nfind(char *strstr,char *ptnptn)
{
	int str_len=strlen(str);    // ๋ฌธž—ด˜ ธธด
	int ptn_len=strlen(ptn);	// Œจ„˜ ธธด
	
	int str_count=0;			// นดšด„ฐ
	int ptn_count=0;

	while(1)
	{
		if(strstr[str_count]==ptnptn[ptn_count])	// ๋ฌธž ๋น„ต•„œ ฐ™„•Œ
		{
			ptn_count++;		// Œจ„ณผ ŠคŠธ๋ง„ ฐ€๋ฅด‚ค๋Š” ฑธ •œœ ฐ€
			str_count++;
		}
		else
		{
			if(ptn_count==0)
				str_count++;
			ptn_count=0;		// ๋‹ค๋ฅผ๋•Œ๋Š” Œจ„€ 0œผ๋กœ 
		}

		if(ptn_count==ptn_len)  // Œจ„ด ๋ฌธž—ด ๋‚ด— žˆ„•Œ ‹œž‘ œ„˜ ๋ฆฌ„ด 
			return str_count-ptn_len+1;

		else if(str_count==str_len)	// Œจ„ด ๋ฌธž—ด ๋‚ด— —†„•Œ ฑฐง“(๋‹ค ๋Œ•˜๋Š”๋ฐ นดšดŠธฐ€ 
			return -1;		// ™„„ฑ ๋˜ง€ •Š•˜„떄
	}
}

  • š”ฑด ฑ ‹‹•„œ ๋งŒ๋“ค–ด ๋ดคŠต๋‹ˆ๋‹ค. ๋ญ”ฐ€ ฝ”๋“œฐ€ ข€ ๋”๋Ÿฌšดฑฐ ฐ™ธด •˜ง€๋งŒ..-.-;; •žœผ๋กœ ณต๋ถ€๋ฅผ œ๋…„ žˆ๋ฉด †ŒŠค๋ฅผ ๋ณดธฐ  „—  œ †œผ๋กœ ๋งŒ๋“ค–ด๋ณด๋Š” —ฐŠต„ •˜   •ฉ๋‹ˆ๋‹ค.
  • Time Complexity๋Š” O(mn) ž…๋‹ˆ๋‹ค.(m=๋ฌธž—ด˜ ธธด, n=Œจ„˜ ธธด)
  • ฒƒ๋ณด๋‹ค ๋” ๋‚ณ€ ๋ฐฉ๋ฒ•œผ๋กœ Failure Function„ “ฐ๋Š” ๋ฐฉ๋ฒ•žˆ ธ.(O(m+n))
  • š”ฒƒ€ ๋ฐ‘—..^^;
    • Failure Function „ค๋ช… ข€ •ฃผ‹ค ๋ถ„? ๋Œ€ฒด จ ๋†“€ ฒƒ„ ๋ณด•„๋„ œ๋…žกžˆงˆ •Š๋Š”ตฐš”. f(j)ฐ’–ด๋–ค ณผ •„ ฑฐณ„œ ๋‚˜˜ค๋Š”ฑดฐ€š”? -Leonardong
      • Failure Function
        j 0 1 2 3 4 5 6 7 8 9
        pattern a b c a b c a c a b
        f(j) -1 -1 -1 0 1 2 3 -1 0 1

      • f(j) = largest i such that i < j and ๋ฌธ์ž์—ด์˜ 0 ~ i๋ฒˆ์งธ = ๋ฌธ์ž์—ด์˜ (j - i) ~ j๋ฒˆ์งธ, if such an i exists

        f(j) = -1(Otherwise)

        j = 5 ผ๋•Œ, pattern = abcabc —ฌธฐ„œ abcabcด๋ฏ€๋กœ i = 2  i < j์ด๋ฏ€๋กœ f(5) = 2

        j = 4 ผ๋•Œ, pattern = abcab —ฌธฐ„œ abcabด๋ฏ€๋กœ i = 1  i < j ์ด๋ฏ€๋กœ f(4) = 1

        j = 3 ผ๋•Œ, pattern = abca —ฌธฐ„œ abcaด๋ฏ€๋กœ i = 0  i < j ์ด๋ฏ€๋กœ f(3) = 0

        ฐ™€ ฒƒ—†๋Š” ฒฝšฐ - abcabcac f(j) = -1 -- ™ฉžฌ„ 
         ๋งˆ›Œ.^^ผ๋ฐ C๋กœ fail() ตฌ˜„ ๋ถ€๋ถ„€ ๋” ‹ ธฐ•˜‹ค. ใ…กใ…ก; --Leonardong


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:05
Processing time 0.0116 sec