The Algorithm Design Manual Second Edition


String Pattern Matching



Download 5,51 Mb.
Pdf ko'rish
bet49/488
Sana31.12.2021
Hajmi5,51 Mb.
#273936
1   ...   45   46   47   48   49   50   51   52   ...   488
Bog'liq
2008 Book TheAlgorithmDesignManual

2.5.3

String Pattern Matching

Pattern matching is the most fundamental algorithmic operation on text strings.

This algorithm implements the find command available in any web browser or text

editor:


Problem: Substring Pattern Matching

Input: A text string and a pattern string p.

Output: Does contain the pattern as a substring, and if so where?

Another way to think about it is in terms of upper and lower bounds. We have



terms at most, each of which is at most n

1. Thus, S(n≤ n(n−1) = O(n

2

). We



have n/2 terms each that are bigger than n/2. Thus S(n)

≥ (n/2)×(n/2) = Ω(n

2

).



Together, this tells us that the running time is Θ(n

2

), meaning that selection sort



is quadratic.


44

2 .


A L G O R I T H M A N A L Y S I S

a   a   b   a   b   b   a

          a

               a   b   b   a

     a   b   b

a   b


Figure 2.6: Searching for the substring abba in the text aababba.

Perhaps you are interested finding where “Skiena” appears in a given news

article (well, I would be interested in such a thing). This is an instance of string

pattern matching with as the news article and p=“Skiena.”

There is a fairly straightforward algorithm for string pattern matching that

considers the possibility that may start at each possible position in and then

tests if this is so.

int findmatch(char *p, char *t)

{

int i,j;


/* counters */

int m, n;

/* string lengths */

m = strlen(p);

n = strlen(t);

for (i=0; i<=(n-m); i=i+1) {

j=0;

while ((j

j = j+1;

if (j == m) return(i);

}

return(-1);



}

What is the worst-case running time of these two nested loops? The inner while

loop goes around at most times, and potentially far less when the pattern match

fails. This, plus two other statements, lies within the outer for loop. The outer loop

goes around at most n

− m times, since no complete alignment is possible once we

get too far to the right of the text. The time complexity of nested loops multiplies,

so this gives a worst-case running time of O((n

− m)(+ 2)).

We did not count the time it takes to compute the length of the strings using

the function strlen. Since the implementation of strlen is not given, we must guess

how long it should take. If we explicitly count the number of characters until we




2 . 5

R E A S O N I N G A B O U T E F F I C I E N C Y



45

hit the end of the string; this would take time linear in the length of the string.

This suggests that the running time should be O(+ (n

− m)(+ 2)).

Let’s use our knowledge of the Big Oh to simplify things. Since + 2 = Θ(m),

the “+2” isn’t interesting, so we are left with O(+ (n

− m)m). Multiplying

this out yields O(nm



− m

2

), which still seems kind of ugly.



However, in any interesting problem we know that n

≥ m, since it is impossible

to have as a substring of for any pattern longer than the text itself. One

consequence of this is that m

≤ 2= Θ(n). Thus our worst-case running time

simplifies further to O(nm



− m

2

).



Two more observations and we are done. First, note that n

≤ nm, since m ≥ 1

in any interesting pattern. Thus nm = Θ(nm), and we can drop the additive



n, simplifying our analysis to O(nm

− m

2

).



Finally, observe that the

−m

2

term is negative, and thus only serves to lower



the value within. Since the Big Oh gives an upper bound, we can drop any negative

term without invalidating the upper bound. That n



≥ m implies that mn ≥ m

2

,



so the negative term is not big enough to cancel any other term which is left. Thus

we can simply express the worst-case running time of this algorithm as O(nm).

After you get enough experience, you will be able to do such an algorithm

analysis in your head without even writing the algorithm down. After all, algorithm

design for a given task involves mentally rifling through different possibilities and

selecting the best approach. This kind of fluency comes with practice, but if you

are confused about why a given algorithm runs in O((n)) time, start by writing

it out carefully and then employ the reasoning we used in this section.




Download 5,51 Mb.

Do'stlaringiz bilan baham:
1   ...   45   46   47   48   49   50   51   52   ...   488




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish