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.0119 sec