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