Algoritmi pentru regăsirea informaţiei Costel Cătălin Gărgăun Colegiul Henri Coandă Bacău, catalin_costel@yahoo.com Ana Nicoleta Grigoreanu Colegiul Henri Coandă Bacău, ananicoleta2002@yahoo.com Abstract Într-o definire - pe cât de sumară tot pe atât de informală - se poate spune că informația se constituie intr-o reprezentare a realității, dar și a reflecției și proiecției - care sunt operații tipice intelectului uman - prin intermediul unui set bine precizat și structurat de simboluri - de regulă accesibile simțurilor și rațiunii umane, dar și unora dintre dispozitive, precum cele de calcul automat (calculatoare). Informatia nu este nici conținut (stările unui sistem pot fi asimilate cu acesta), nici agent (semnalele transmise printr-un canal pot fi asimilate cu acesta), nici proprietate, nici instructiune, nici proces și nici metodă, ci informația se constituie într-o categorie de sine stătătoare, având o existență abstractă și subtilă - adică nematerială - categorie care este reflectată de stări, semnale și constituie un element esențial în procesul cunoașterii. 1. Introducere Odată cu introducerea tehnologiei informatice în cât mai multe domenii a intervenit şi problema organizării lor sub formă de structuri de date. Definirea structurilor de date necesare într-o aplicaţie este o activitate complexă care condiţionează în mare măsură necesarul de memorie, precum şi viteza de prelucrare şi uneori chiar efortul de proiectare şi implementare. Pentru realizarea ei trebuie să se ţină cont de o serie de factori cum ar fi: volumul datelor; operaţiile de prelucrare, mai ales cele de actualizare; durata de viaţă, utilizarea eficientă a spaţiului de memorare; complexitatea prelucrării asupra colecţiei; asigurarea integrităţii datelor. O altă problemă importantă este căutarea unor date în structurile create. Cu cât cantitatea de informaţie creşte cu atât trebuie algoritmi din ce în ce mai eficienţi, care să găsescă informaţia în cât mai scurt timp. 2. Introducere în teoria grafurilor În general, pentru situaţiile care necesită la rezolvare un oarecare efort mintal se caută, în primul rând, o metodă de reprezentare a lor care să permită receptarea întregii probleme dintr-o privire (pe cât posibil) şi prin care să se evidenţieze cât mai clar toate aspectele acesteia. În acest scop se folosesc imagini grafice gen diagrame, schiţe, grafice etc. O reprezentare dintre cele mai utilizate este cea prin grafuri. Acestea sunt utilizate în special pentru vizualizarea sistemelor şi situaţiilor complexe. În general, vom reprezenta componentele acestora prin puncte în plan iar relaţiile dintre componente prin arce de curbă cu extremităţile în punctele corespunzătoare. Este evident, totuşi, că această metodă are limite, atât din punct de vedere uman (prea multe puncte şi segmente vor face desenul atât de complicat încât se va pierde chiar scopul pentru care a fost creat claritatea şi simplitatea reprezentării, aceasta devenind neinteligibilă) cât şi din punct de vedere al tehnicii de calcul (un calculator nu poate "privi" un desen ca un om). Din acest motiv, alături de expunerea naiv-intuitivă a ceea ce este un graf, dată mai sus, se impune atât o definiţie riguroasă cât şi alte modalităţi de reprezentare a acestora, adecvate în general rezolvărilor matematice şi informatice.
Conferinţa Naţională de Învăţământ Virtual, ediţia a IX-a, 2011 69 3. Arbori Un graf conex şi fără cicluri se numeşte arbore. Un arbore are următoarele proprietăţi: Există un nod în care nu intră niciun arc, numit rădăcina arborelui. Cu excepţia rădăcinii, fiecare nod are proprietatea că în el intră un singur arc. Acesta leagă nodul respectiv de un alt nod numit predecesor sau părinte. Dintr-un nod pot ieşi unul sau mai multe arce. Fiecare astfel de arc, leagă nodul respectiv de un alt nod numit succesor sau fiu al nodului. Nodurile sunt organizate pe nivele, primul nivel fiind ocupat de nodul-rădăcină. Nodurile de pe ultimul nivel se caracterizează prin faptul că din ele nu mai iese nici un arc, şi se numesc noduri terminale sau frunze. Frunzele pot exista şi pe nivele diferite de ultimul nivel. Nodurile pot conţine o aşa-numită informaţie utilă, care poate fi de orice tip. De obicei eceste informaţii se mai numesc şi chei ale arborelui. 3.1. Arbori binari de căutare Un arbore cu proprietatea că fiecare nod, cu excepţia frunzelor, are cel mult doi descendenţi (succesori) se numeşte arbore binar. Arborii de căutare sunt structuri de date ce posedă multe operaţii specifice mulţimilor dinamice, între care menţionăm CAUTĂ, MINIM, MAXIM, PREDECESOR, SUCCESOR, INSEREAZĂ şi ŞTERGE. Figura 1. Un arbore binar de căutare cu 6 noduri şi de înălţime 2 şi un arbore binar de căutare mai puţin eficient care conţine aceleaşi chei şi are înălţimea 4
70 Universitatea din Bucureşti şi Universitatea Babeş-Bolyai din Cluj-Napoca Proprietatea arborelui binar de căutare ne permite să tipărim toate cheile în ordine crescătoare cu ajutorul unui algoritm recursiv simplu, numit traversarea arborelui în inordine (S-R-D, stânga - rădăcină - dreapta). Numele acestui algoritm derivă din faptul că cheia rădăcinii unui subarbore se tipăreşte între valorile din subarborele stâng şi cele din subarborele său drept. Similar, o traversare a arborelui în preordine (R-S-D) va tipări cheia rădăcinii înaintea cheilor din subarbori, iar o traversare în postordine (S-D-R) va tipări cheia rădăcinii după cheile din subarbori. Figura 2. Parcurgerile unui arbore binar 3.2. Arbori roşu-negru Un arbore roşu-negru este un arbore binar de căutare care are un bit suplimentar pentru memorarea fiecărui nod: culoarea acestuia poate fi ROŞU sau NEGRU. Un arbore binar de căutare este arbore roşu-negru dacă el îndeplineşte următoarele proprietăţi roşu-negru: Fiecare nod este fie roşu, fie negru. Fiecare frunză (NULL) este neagră. Dacă un nod este roşu, atunci ambii fii ai săi sunt negri. Fiecare drum simplu de la un nod la un descendent care este frunză conţine acelaşi număr de noduri negre. Figura 3. Arbore roşu negru [6]
Conferinţa Naţională de Învăţământ Virtual, ediţia a IX-a, 2011 71 Executând pe arbori roşu-negru având n chei operaţiile definite pe arbori de căutare ARBORE- INSEREAZĂ şi ARBORE-ŞTERGE, se poate întâmpla ca rezultatul efectuării lor să încalce proprietăţile roşu-negru enumerate. Pentru a reface aceste proprietăţi, atât culorile unora dintre nodurile arborelui cât şi structura pointerilor trebuie modificate. Structura pointerilor se modifică prin rotaţie, operaţie locală într-un arbore de căutare ce conservă ordonarea cheilor în inordine. Figura 4. Rotaţii la stânga şi Rotaţii la dreapta 3.3. Arbori AVL echilibraţi (G. M. Adelson-Velskii şi E. M. Landis) Un arbore binar se numeşte echilibrat (AVL) dacă înălţimea sub-arborelui din stînga fiecărui nod nu diferă cu mai mult de ± 1 de înălţinea subarborelui său din dreapta.
72 Universitatea din Bucureşti şi Universitatea Babeş-Bolyai din Cluj-Napoca Figura 5. Rotaţii la stânga şi Rotaţii la dreapta [1] 4. Algoritmul de căutare binară Vom presupune că în memoria calculatorului au fost stocate un număr de n înregistrări şi că dorim să localizăm o anumită înregistrare. Presupunem că fiecare înregistrare conţine un câmp special, numit cheie. Colecţia tuturor înregistrărilor se numeşte tabel sau fişier. Un grup mai mare de fişiere poartă numele de bază de date. În cazul unui algoritm de căutare se consideră un anumit argument K; iar problema este de a căuta acea înregistrare a cărei cheie este tocmai K. Sunt posibile două cazuri: căutarea cu succes (reuşită), cand înregistrarea cu cheia avută în vedere este depistată, sau căutarea fără succes (nereuşită), când cheia niciunei înregistrări nu coincide cu cheia după care se face căutarea. 5. Căutarea şi regăsirea informaţiei 5.1. Căutarea în fișiere și baze de date În fișiere, localizarea se face folosind instrumente puse la dispoziție de programul de aplicație cu care a fost creat fișierul. De exemplu, în foile de calcul se poate localiza informația folosind un filtru (meniul Data opțiunea Filter), iar în documentele create cu aplicația Microsoft Word se poate folosi caseta de dialog Find and Replace deschisă din meniul Edit-opțiunea Find. Sistemul de gestiune a bazelor de date furnizează 2 mecanisme importante pentru localizarea informațiilor în baza de date: Interogarea pe baza unui criteriu de căutare furnizat de utilizator, caută și găsește toate înregistrările care corespund criteriului specificat. Filtrul - pe baza unui criteriu de filtrare precizat de utilizator extrage din baza de date doar înregistrările care corespund criteriului specificat 5.2. Tehnici de căutare a informației pe Internet Serviciul de navigare Browserul permite regăsirea informațiilor prin 2 metode: După adresa URL a paginii web care conține informația. Prin urmărirea hiperlegăturilor din documente care conțin referințe către alte pagini.
Conferinţa Naţională de Învăţământ Virtual, ediţia a IX-a, 2011 73 În plus, utilizatorul mai este ajutat de următoarele mecanisme: Mecanismul semnelorde carte sau al favoritelor îi permite utilizatorului să întrețină o listă cu adresele favorite. Mecanismul istoricului browserul întreține o listă cu paginile web vizitate recent. Motoare de căutare Un motor de căutare este un program care accesează Internetul în mod automat şi frecvent şi care stochează titlul, cuvinte cheie şi parţial chiar conţinutul paginilor web într-o bază de date. În momentul în care un utilizator apelează la un motor de căutare pentru a găsi o anumită frază sau cuvânt, motorul de căutare se va uita în această bază de date şi în funcţie de anumite criterii de prioritate va crea şi afişa o listă de rezultate. Ele au un principiu de funcționare foarte simplu, bazându-se pe folosirea unui program special numit "crawler robot" (robot târâtor), care vizitează periodic paginile web de pe întreg internetul și culege din fiecare pagină web vizitată niște date, pe care le stochează în baza de date a motorului de căutare. Acest proces se numește indexarea paginilor web. Atunci când un utilizator caută paginile web care conțin un anumit cuvânt (sau o anumită sintagmă), motorul de căutare apelează la baza sa de date și alcătuiește o listă ordonată,cu paginile web respective. Alcătuirea listei de pagini care conțin o anumită sintagmă este un proces foarte complex, pentru că el implică sortarea paginilor după relevanța lor. Pentru a stabili ordinea de afișare, serviciul acordă fiecărei pagini găsite un anumit punctaj. În general, în atribuirea punctajului se ține cont: De câte ori apare cuvântul în pagină Poziția ocupată de cuvânt în pagină Câte cuvinte are pagina Dacă apare cuvântul în titlu Popularitatea site-ului (numărul de pagini care au legături către el).
74 Universitatea din Bucureşti şi Universitatea Babeş-Bolyai din Cluj-Napoca 6. Bibliografia [1] T.H.Cormen, C.E. Leiserson, R.R. Rivest Introducere în algoritmi, Editura Agora Cluj, 2008. [2] D.E. Knuth - Arta programării calculatoarelor sortare şi căutare, Editura Teora, 2006. [3] D.E. Knuth Tratat de programare a calculatoarelor, Editura Tehnică, 1976 [4] D. K. Michael, J. Tobler, J. Walter, C++, Editura Teora, 2008 [5] I.Tomescu - Data Structures, Editura Universităţii din Bucureşti, 2008. [6] http://gauss.ececs.uc.edu/redblack/redblack.html