1 / 14

Tabele De Dispersie

Tabele De Dispersie. Tehnica dispersiei este o tehnica foarte puternica pentru implementarea tipurilor de date bazate pe secvente de chei (de exemplu, tipul abstract tabela)

unity
Télécharger la présentation

Tabele De Dispersie

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tabele De Dispersie Tehnica dispersiei este o tehnica foarte puternica pentru implementarea tipurilor de date bazate pe secvente de chei (de exemplu, tipul abstract tabela) Folosind aceasta tehnica, se poate ajunge in situatii practice ca performantele operatiilor de cautare de chei sa se invarta frecvent in jurul valorii O(1) Cu alte cuvinte, cautarea intr-o tabela de dispersie este, de multe ori, mai performanta decat cautarea binara intr-o tabela ordonata Evident, sunt si situatii practice in care performantele cautarii intr-o tabela de dispersie sunt mai slabe decat intr-o tabela ordonata folosind cautarea binara La proiectarea unei tabele de dispersie urmarim maximizarea numarului situatiilor de primul tip si minimizarea numarului situatiilor de al doilea tip Tabele De Dispersie

  2. Tabele De Dispersie • Sa presupunem ca dorim sa implementam o structura de date capabila sa memoreze numere intregi • Renuntam la implementarea cu tabela ordonata, deoarece o eventuala cautare intr-o astfel de tabela nu va putea depasi decat intamplator performanta O(log2N), unde N reprezinta numarul de elemente din tabela • Vom folosi o tabela de dispersie TD avand P intrari, unde valoarea P este, de obicei, mult mai mica decat numarul potential al valorilor care trebuie memorate • Presupunem ca dorim sa memoram numere mai mici decat N = 100, si alocam in acest sens o tabela de dispersie cu P = 11 intrari • Se observa ca valoarea P este mult mai mica decat N (numarul potential al valorilor care trebuie memorate) Tabele De Dispersie

  3. Tabele De Dispersie • In continuare, vom alege o functie de dispersie, adica o aplicatie h definita pe multimea 0 .. N-1 cu valori in multimea 0 .. P-1 • De regula, in cazul tabelelor de dispersie de numere intregi, aceasta functie este functia “modulo P”, deoarece ea are intotdeauna valori in intervalul 0 .. P-1 • Astfel: h:{0, 1, 2, …, N-1}->{0, 1, 2, …, P-1}, h(X) = X mod P • Cu alte cuvinte, functia h realizeaza corespondenta dintre o valoare X din multimea {0, 1, 2, …, N-1} si o pozitie in tabela de dispersie TD (aceasta pozitie este o valoare din multimea {0, 1, 2, …, P-1}) Tabele De Dispersie

  4. Tabele De Dispersie • Sa luam un caz concret: • Dorim sa inseram in tabela de dispersie de mai sus (cu P=11 intrari) valoarea 34 • Calculam h(34) = 34 mod 11 = 1 • Deci valoarea 34 trebuie plasata in celula cu indicele 1 Index: 0 1 2 3 4 5 6 7 8 9 10 TD: - - - - - - - - - - - Index: 0 1 2 3 4 5 6 7 8 9 10 TD: - 34 - - - - - - - - - Tabele De Dispersie

  5. Tabele De Dispersie • Se procedeaza identic pentru insertia cheilor 96 (celula 8), 7 (celula 7), 48 (celula 4), 87 (celula 10) si 25 (celula 3) • Tabela de dispersie devine: • Se observa ca, desi tabela nu este ordonata, orice operatie de cautare se executa foarte rapid, cu o performanta O(1) • Astfel, daca dorim cautarea valorii 48, e de ajuns sa calculam h(48) = 48 mod 11 = 4 si sa inspectam celula TD[4] Index: 0 1 2 3 4 5 6 7 8 9 10 TD: - 34 - 25 48 - - 7 96 - 87 Tabele De Dispersie

  6. Tabele De Dispersie • Marea problema care apare este faptul ca aceasta metoda poate duce la aparitia de coliziuni • Spre exemplu, daca in tabela TD se doreste insertia cheii 59, ar trebui calculata valoarea h(59) = 59 mod 11 = 4, dar celula TD[4] este deja ocupata de valoarea 48 • Aceasta situatie este falimentara pentru o tabela de dispersie si ea trebuie rezolvata intr-un fel sau altul • Motivul pentru care apar coliziuni este acela ca, de regula, functiile de dispersie nu sunt injective – adica exista mai multe valori diferite in intervalul 0 .. N-1 pentru care, daca se calculeaza functia h, se ajunge la acelasi rezultat Tabele De Dispersie

  7. Tabele De Dispersie • In functie de modul in care se rezolva situatiile de coliziune, tabelele de dispersie se impart in: • Tabele de dispersie folosind dispersia deschisa • Tabele de dispersie folosind dispersia inchisa. Acestea mai pot fi: • cu adresare liniara • cu adresare patratica • In continuare vom exemplifica tehnica dispersiei deschise si tehnica dispersiei inchise cu adresare liniara Tabele De Dispersie

  8. Tabele De Dispersie • Dispersia deschisa propune prelungirea tabloului TD “pe verticala” in cazul aparitiei unei coliziuni • Astfel, daca valorile 48 si 59 au aceeasi valoare 4 pentru functia h, cele doua valori se vor inlantui intr-o lista asociata cu celula TD[4] Index: 0 1 2 3 4 5 6 7 8 9 10 TD: - - - - - 34 25 48 7 96 87 67 84 59 12 29 Tabele De Dispersie

  9. Tabele De Dispersie • Pentru a implementa dispersia deschisa, tabela TD va avea ca elemente pointeri spre inceputurile unor liste inlantuite • Atunci cand se doreste, de exemplu, cautarea valorii 29, se calculeaza valoarea functiei de dispersie h(29) = 29 mod 11 = 7 si tot ce ramane de facut este parcurgerea listei inlantuite cu inceputul in celula TD[7] – daca in aceasta lista nu se gaseste valoarea 29, inseamna ca aceasta valoare nu se gaseste in intreaga tabela de dispersie • Chiar daca performanta cautarii nu mai este O(1), ea este oricum mult mai buna decat in cazul unui tablou liniar si creste cu cat valoarea P este mai mare • Aceasta implementare se numeste “deschisa” deoarece spatiul ocupat de tabela de dispersie este alocat dinamic, pe masura ce se insereaza noi chei, deci nu este fix Tabele De Dispersie

  10. Tabele De Dispersie • Dispersia inchisa, pe de alta parte, nu prelungeste tabela TD pe verticala, ci foloseste doar cele P intrari alocate static • In cazul aparitiei unei coliziuni, aceasta tehnica propune gasirea unei celule libere in tabela de dispersie si plasarea valorii care a cauzat coliziunea in aceasta celula libera • De exemplu, insertia valorii 59 in tabela de mai sus s-ar face la pozitia 59 mod 11 = 4 • Cum aceasta celula este ocupata de valoarea 48, valoarea 59 va fi plasata intr-o celula libera din tabela TD Index: 0 1 2 3 4 5 6 7 8 9 10 TD: - 34 - 25 48 - - 7 96 - 87 Tabele De Dispersie

  11. Tabele De Dispersie • Diferitii algoritmi de gasire a unei celule libere impart tehnica dispersiei inchise in mai multe subtehnici: • Dispersia inchisa cu adresare liniara • Dispersia inchisa cu adresare patratica • Vom exemplifica dispersia inchisa cu adresare liniara • Astfel, daca valoarea 59 trebuie inserata in celula 4 si aceasta este ocupata, se parcurge tabela TD liniar inspre dreapta incepand cu celula 4 si prima celula libera este cea in care se insereaza valoarea 59 • Daca se ajunge la sfarsitul tabelei, cautarea se continua de la inceput Index: 0 1 2 3 4 5 6 7 8 9 10 TD: - 34 - 25 48 59 - 7 96 - 87 Tabele De Dispersie

  12. Tabele De Dispersie • Valoarea 59 ajunge astfel in celula 5, chiar daca valoarea functiei de dispersie h pentru 59 este diferita de 5!!! • Acelasi algoritm va duce la plasarea valorii 51 in celula 9 deoarece celula 7 este ocupata si a valorii 76 in celula 0, deoarece celula 10 este ocupata • Intrucat celula 10 este ultima din tabela, cautarea primei celule libere se continua de la inceputul tabelei Index: 0 1 2 3 4 5 6 7 8 9 10 TD: 76 34 - 25 48 59 - 7 96 51 87 Tabele De Dispersie

  13. Tabele De Dispersie Index: 0 1 2 3 4 5 6 7 8 9 10 • Cautarea cheii 51 se face in felul urmator: • Se cauta in tabela la pozitia h(51) = 51 mod 11 = 7 • Daca TD[7] nu contine valoarea 51, se continua printr-o cautare liniara inspre dreapta incepand cu celula 7, pana la gasirea valorii 51 • In cazul atingerii sfarsitului tabelei, se continua de la inceput • Daca se reajunge in celula 7 fara a gasi valoarea 51, se trage concluzia ca aceasta nu se afla in tabela TD: 76 34 - 25 48 59 - 7 96 51 87 Tabele De Dispersie

  14. Tabele De Dispersie • Se observa ca, in cel mai rau caz, cautarea intr-o tabela de dispersie cu dispersie inchisa se reduce la o cautare liniara • Totusi, aceasta situatie in care se parcurge toata tabela apare, de regula, numai pentru cheile care nu se afla in tabela • Daca o cheie se afla in tabela, chiar daca nu pe locul sau normal, ea va fi gasita relativ rapid, deoarece nu se afla prea departe de locul sau normal, tinand cont de modul in care s-a facut insertia • In cazul dispersiei inchise cu adresare patratica, cautarea unei celule libere nu se face liniar, ci folosind un algoritm patratic Tabele De Dispersie

More Related