.


:




:

































 

 

 

 


().




, .. , . , , () , .

. , , .

int BFSearch(char *s, char *p)

{

for (int i = 1; strlen(s) - strlen(p); i++)

{

for (int j = 1; strlen(p); j++)

{

if (p[j]!= s[i+j-1])

{

break;

}

else

{

if (j = strlen(p))

{

return(i);

exit;

}

}

}

}

}

 

BFSearch p s 0, . , , , .

, , -, (Robert S. Boyer) (J. Strother Moore), .

 

-

- . . . . , , , , . , .. , . - ( ) , . , , .

: , , . , , . , , , .

, , . . : a, b, c, d, e abbad abeccacbadbabbad. :

abbad.

. . 5 :

, . :

. 2 :

2 :

, , , :

. , . , 256 , :

struct BMTable

{

int bmtarr[255];

} *bmt;

 

, p.

BMTable MakeBMTable(char *p)

{

int i;

for (i = 0; i <= 255; i++) bmt->bmtarr[i] = strlen(p);

for (i = strlen(p); i <= 1; i--)

{

if (bmt->bmtarr[p[i]] == strlen(p))

{

bmt->bmtarr[p[i]] = strlen(p)-i;

}

}

return(*bmt);

}

 

, .

int BMSearch(int startpos, char *s, char *p)

{

int pos, lp, i;

lp = strlen(p);

pos = startpos + lp - 1;

while (pos < strlen(s))

{

if (p[lp]!= s[pos]) pos = pos + bmt->bmtarr[s[pos]];

else

{

for (i = lp - 1; i <= 1; i--)

{

if (p[i]!= s[pos - lp + i])

{

pos++;

break;

}

else

if (i = 1)

{

return(pos - lp + 1);

exit;

}

}

}

}

return(0);

}

 

BMSearch p s. p s , 0. startpos s, . , p s. startpos 1. , , p s, startpos .

 

()

, , , .

lb ub , , , . . , , . , ub (m 1) . , . , 100 , 50 , 25, 13, 7 .. n, log2n .

int BinarySearch (int lb, int ub, int key, int* pArr)

 

/* a , lb , ub , key . , -1 */

 

{

int m;

return(-1); // -1,

do

{

m = (lb + ub)/2; //

if (key < pArr[m]) ub = m-1;

else

if (key > pArr[m]) lb = m+1;

else

{ //

return(m);

break;

}

}

while (lb > ub);

}

 





:


: 2016-10-22; !; : 1300 |


:

:

80% - .
==> ...

1528 - | 1371 -


© 2015-2024 lektsii.org - -

: 0.014 .