Algoritm naiv de potrivire a șirurilor în Python: exemple, caracteristici și avantaje și dezavantaje
Publicat: 2020-05-14Când este nevoie de a găsi un model de intrare într-un șir de caractere, codificatorii și programatorii folosesc algoritmul de potrivire a șirurilor. De obicei, în cazul unui șir scurt, programatorii python preferă să folosească abordarea naivă în care programul verifică fiecare poziție din șirul de intrare pentru modelul de interogare. În cazul în care se potrivește, a dat o ieșire cu numărul poziției.
Unul dintre cele mai mari motive pentru care se folosește algoritmul naiv de potrivire a șirurilor este că este rapid și oferă rezultate destul de precise. În plus, nu necesită preprocesare. În orice caz, vom discuta despre aceste avantaje într-o etapă ulterioară în această postare. Să înțelegem mai întâi algoritmul de căutare a modelelor folosind abordarea naivă.
Cuprins
Algoritmul naiv de căutare a modelelor
În căutarea naivă a modelului de șir, programul testează poziția modelului de intrare P [1……i] într-un șir de caractere T [1…..m].
Rețineți că lungimea textului sau șirului introdus va fi întotdeauna mai mare sau egală cu cea a modelului.
Iată algoritmul naiv de căutare a modelelor pentru diferite limbaje de programare.
Începe

pat = model Size
str = dimensiunea șirului
pentru i = 0 la (str – pat), do
pentru j = 0 pentru a pat, face
dacă text[i+j] ≠ model[j], atunci
rupe bucla
Terminat
dacă j == pat, atunci
afișați poziția lui i ca model găsit
Terminat
Sfârșit
Acest algoritm este unul destul de important în informatică, deoarece ajută la obținerea rezultatelor căutării ca rezultat.
Citiți: Tipuri de algoritmi AI pe care ar trebui să le cunoașteți
Exemple de potrivire naivă de șiruri pe Python
Iată un exemplu în care abordarea naivă de căutare a modelelor este utilizată într-un cod python.
# Program Python pentru potrivirea șirurilor naive
# Algoritm de căutare
căutare def (P, T):
X = len(P)
Y = len(T)
# O buclă pentru a schimba P[] unul câte unul */
pentru i în interval (X – Y + 1):
j = 0
# Pentru indexul i actual, verificați
# pentru potrivirea modelului */
pentru j în intervalul (0, X):
dacă (txt[i + j] ! = P[j]):
pauză
dacă (j == X – 1):
imprimare („Model găsit în poziție”, i)
# Cod șofer
if __name__ == '__main__':
T = „UPGRADEDUBUPGRAABUPGRADEDU”
P = „ACTUALIZARE”
căutare (P, T)
Ieșire :
Model găsit la poziția 0
Model găsit la poziția 17
Explicație: Prima poziție este a 0- a poziție. Deoarece modelul „UPGRAD” a fost observat pentru prima dată aici, rezultatul a arătat că modelul se găsește în poziția 0.
În mod similar, următorul model a fost găsit la poziția 17.
Cel mai bun caz de căutare naivă de modele
Există doar un singur caz cel mai bun pentru algoritmul de căutare a modelului naiv, spre deosebire de cele mai rele două cazuri.
Cel mai bun caz apare atunci când primul caracter din textul modelului nu se află nicăieri în șirul de intrare.
Exemplu:
T [] = „UPGRADEDUHIJKLUPGRA”;
P [] = „TUPGRA”;
Și, prin urmare, numărul de modele de potrivire caz este O(n).
Cel mai rău caz de căutare naivă de modele
Există două cazuri cele mai grave în abordarea naivă a căutării șirurilor.
- Când toate caracterele din model sunt aceleași cu cele din șirul de intrare.
T [] = „EEEEEEEEEEEEEEEE”;

P [] = „EEE”;
- Când doar ultimul caracter din model diferă de șirul de intrare.
T [] = „EEEEEEEEEEED”;
P [] = „EEEED”;
În astfel de cazuri, numărul de comparații în O(m*(n-m+1)).
Caracteristicile algoritmului de potrivire a șirurilor naive
Algoritmul de potrivire a șirurilor este menit să găsească toate aparițiile unui model dat într-un text.
Iată care sunt caracteristicile de top ale algoritmului.

- Este cea mai simplă metodă dintre toate de a căuta modele într-un text introdus. Verifică toate caracterele unul câte unul din șirul de caractere dat.
- Găsește potrivirile exacte ale șirului – fie că este vorba de apariții mai exacte sau mai exacte ale modelului.
- Este mai folosit când există text mic. În plus, nu necesită nicio etapă de preprocesare.
- Această metodă de căutare nu ocupă spațiu suplimentar pentru a lucra și a căuta modelele din șir.
Citiți și: Structura datelor și algoritmul în Python
Avantajele căutării naive de modele
- Nu sunt necesare faze de preprocesare în abordarea căutării naive, deoarece timpul de rulare al acesteia este egal cu timpul de potrivire.
- Nu este nevoie de spațiu suplimentar de operare.
- Comparațiile tiparelor cu șirurile se pot face în orice ordine.
Dezavantajele potrivirii naive șiruri
Există un singur dezavantaj al abordării naive de potrivire a șirurilor, și anume că este ineficientă. Acest lucru se datorează faptului că atunci când a găsit o poziție, nu o mai folosește pentru a găsi cealaltă poziție. Se întoarce la punctul de plecare și caută din nou modelul. Și astfel, nu folosește din nou informațiile din tura precedentă.
Concluzie
Algoritmul naiv de potrivire a șirurilor este abordarea cea mai preferată pentru a găsi pozițiile respectivelor modele într-un text dat din diverse motive, cum ar fi nicio cerință de pre-procesare, nici spațiu suplimentar pentru operare etc. Cu toate acestea, nu poate fi utilizat pentru texte destul de mari, deoarece a ineficienței sale de a efectua operațiuni mari mai rapid.
Sperăm că această postare v-a oferit o idee substanțial bună despre abordarea naivă de căutare a modelelor în python. Pentru a afla despre utilizările acestei abordări și pentru a obține o înțelegere mai largă a subiectului, luați legătura cu experții de la upGrad. Avem cursuri special concepute pentru persoanele care doresc să-și extindă setul de abilități. Contactează-ne astăzi!
Dacă sunteți interesat să aflați mai multe despre AI, învățarea automată, consultați Diploma PG de la IIIT-B și upGrad în Învățare automată și AI, care este concepută pentru profesioniști care lucrează și oferă peste 450 de ore de formare riguroasă, peste 30 de studii de caz și sarcini, Statut de absolvenți IIIT-B, peste 5 proiecte practice practice și asistență pentru locuri de muncă cu firme de top.
Ce este un algoritm naiv de potrivire a șirurilor?
Un algoritm naiv de potrivire a șirurilor este unul care pur și simplu compară cele două șiruri caracter cu caracter. Acest algoritm naiv este folosit de multe programe de calculator timpurii care implementau funcții simple de căutare a fișierelor. Cu alte cuvinte, șirurile sunt comparate caracter cu caracter și algoritmul se oprește odată ce este găsită o nepotrivire. Acesta este o modalitate nepotrivită de a face potrivirea șirurilor, deoarece este lentă și risipă de memorie. Acest lucru este foarte ineficient, deoarece numărul de șiruri dintr-un text este uriaș, dar interogarea de căutare este de doar câteva caractere.
Care sunt limitările algoritmilor naivi pentru potrivirea șirurilor?
Nesatisfacerea celor 8-regine și problemele conexe ca NP-complete arată că algoritmii naivi de potrivire a șirurilor au limitări. Algoritmul naiv de potrivire a șirurilor nu vă va oferi soluția. În cazul potrivirii șirurilor, este nevoie de timp exponențial. Deci, dacă aveți n șiruri pentru a fi potrivite, va dura 2n timp pentru a finaliza. Pentru a rezolva această problemă a fost dezvoltat un algoritm care a făcut problema potrivirii șirurilor fezabile. Acest algoritm, care este un algoritm de timp exponențial, se numește algoritm Aho-Corasick. Acest algoritm funcționează pe principiul programării dinamice.
Cum putem optimiza algoritmii naivi de potrivire a șirurilor?
Optimizarea algoritmilor naivi de potrivire a șirurilor se face în două moduri:
1) Căutare în baza de date șiruri: aceasta este cea mai bună soluție pentru căutarea în baze de date. Este rapid, dar necesită un buget uriaș.
2) Încercări: Acestea sunt o alternativă excelentă la baza de date, deoarece pot fi făcute din memorie, ceea ce le menține la un buget redus. Puteți reprezenta cu ușurință șirul într-o formă de arbore binar. Apoi, treceți prin copac și verificați rezultatul. Dacă descoperi că ești la capătul copacului, ai găsit o potrivire bună. Nu este nevoie să te întorci la începutul copacului. Acest algoritm este rapid, dar nu permite compararea șirurilor lungi.