logo

Алгоритам за подударање узорака у Ц

Паттерн Матцхинг се широко користи у рачунарству и многим другим областима. Алгоритми за подударање узорака се користе за тражење образаца унутар већег текста или скупа података. Један од најпопуларнијих алгоритама за подударање шаблона је Боиер-Мооре алгоритам, који је први пут објављен 1977. У овом чланку ћемо расправљати о алгоритмима за подударање узорака у Ц-у и како они функционишу.

Шта је алгоритам за подударање шаблона?

Алгоритми за подударање узорака се користе за проналажење образаца унутар већег скупа података или текста. Ови алгоритми функционишу тако што упоређују образац са већим скупом података или текстом и утврђују да ли је образац присутан или не. Алгоритми за подударање узорака су важни јер нам омогућавају да брзо тражимо обрасце у великим скуповима података.

наћи у мапи Ц++

Алгоритам за подударање шаблона грубе силе:

Бруте Форце Паттерн Матцхинг је најједноставнији алгоритам за усклађивање узорака. Подразумева поређење карактера шаблона са ликовима текста један по један. Ако се сви знакови поклапају, алгоритам враћа почетну позицију шаблона у тексту. Ако није, алгоритам се помера на следећу позицију у тексту и понавља поређење док се не пронађе подударање или до краја текста. Временска сложеност алгоритма грубе силе је О (МКСН) , где М означава дужину текста и Н означава дужину шаре.

Наивни алгоритам за подударање образаца:

Алгоритам за наивно подударање узорака је побољшање у односу на алгоритам Бруте Форце. Избегава непотребна поређења тако што прескаче неке позиције у тексту. Алгоритам почиње да упоређује образац са текстом на првој позицији. Ако се знакови поклапају, помера се на следећу позицију и понавља поређење. Ако се знакови не поклапају, алгоритам прелази на следећу позицију у тексту и поново упоређује образац са текстом. Временска сложеност Наивног алгоритма је такође О (МКСН) , али је у већини случајева бржи од алгоритма Бруте Форце.

Кнутх-Моррис-Пратт алгоритам:

Тхе Кнут-Морис-Прат (КМП) алгоритам је напреднији алгоритам за подударање узорака. Заснован је на запажању да када дође до неслагања, неке информације о тексту и обрасцу могу да се користе да би се избегла непотребна поређења. Алгоритам унапред израчунава табелу која садржи информације о обрасцу. Табела одређује колико знакова шаблона може да се прескочи када дође до неслагања. Временска сложеност КМП алгоритам је О(М+Н) .

Боиер-Мооре алгоритам:

Један од најпопуларнијих алгоритама за подударање узорака је Боиер-Мооре алгоритам. Овај алгоритам су први пут објавили 1977. Роберт С. Боиер и Ј Стротхер Мооре. Тхе Боиер-Мооре алгоритам пореди образац са већим скупом података или текста с десна на лево уместо са лева на десно, као код већине других алгоритама за подударање шаблона.

Тхе Боиер-Мооре алгоритам има две главне компоненте: правило лошег карактера и правило доброг суфикса. Правило лошег карактера функционише тако што упоређује карактер у обрасцу са одговарајућим знаком у подацима или тексту. Ако се знакови не поклапају, алгоритам помера образац удесно док не пронађе знак који се подудара. Правило доброг суфикса пореди суфикс шаблона са одговарајућим суфиксом података или текста. Ако се суфикси не поклапају, алгоритам помера образац удесно док не пронађе одговарајући суфикс.

Тхе Боиер-Мооре алгоритам је познат по својој ефикасности и широко се користи у многим апликацијама. Сматра се једним од најбржих доступних алгоритама за подударање шаблона.

Имплементација Боиер-Мооре алгоритма у Ц:

За имплементацију Боиер-Мооре алгоритма у Ц-у, можемо почети дефинисањем правила лошег карактера. Можемо користити низ за чување последњег појављивања сваког знака у обрасцу. Овај низ може одредити колико далеко морамо померити образац удесно када дође до неслагања.

Ево примера како можемо да применимо правило лошег карактера у Ц:

водени жиг у речи

Ц код:

 void bad_character_rule(char *pattern, int pattern_length, int *bad_char) { int i; for (i = 0; i <no_of_chars; i++) bad_char[i]="-1;" for (i="0;" i < pattern_length; bad_char[(int) pattern[i]]="i;" } pre> <p>In this example, we first initialize the array to -1 for all characters. We then iterate through the pattern and update the array with the last occurrence of each character in the pattern.</p> <p>Next, we can implement the good suffix rule. We can use an array to store the length of the longest suffix of the pattern that matches a suffix of the data or text. This array can be used to determine how far we need to move the pattern to the right.</p> <hr></no_of_chars;>