This is an old revision of the document!
Soluții Laborator 5: Analiza probabilistă în Hashing
Această pagină conține explicații și răspunsuri pentru întrebările din laboratorul 5.
Exemplul 1: Paradoxul zilelor de naștere
Întrebare 1: Pentru ce valoare a lui n probabilitatea ca două persoane să aibă aceeași zi de naștere depășește 0.5?
Răspuns: Probabilitatea depășește 0.5 în jurul lui n = 23. Acest rezultat este contraintuitiv — chiar și într-un grup mic, șansele de coliziune sunt mari.
Explicație: Probabilitatea ca toate zilele să fie distincte este:
$$ P(\text{distincte}) = \frac{k!}{(k-n)! k^n} $$
Pentru = 365$, dacă evaluăm numeric:
- n = 20$ → P(\text{coliziune}) \approx 0.41$
- n = 23$ → P(\text{coliziune}) \approx 0.507$
- n = 30$ → P(\text{coliziune}) \approx 0.706$
Legătură cu hashing: Fiecare zi ≈ un slot hash, iar fiecare persoană ≈ un element inserat. La fel ca în hashing, chiar și cu multe sloturi disponibile, coliziunile devin probabile după doar \\( \sqrt{k} \\) inserări (ordine \\( O(\sqrt{k}) \\)).
Întrebare 2: Cum se aseamănă acest fenomen cu coliziunile într-o tabelă hash?
Răspuns: În ambele cazuri, avem o alocare aleatoare într-un spațiu finit de valori. Coliziunile apar mult mai devreme decât ne-am aștepta, iar acest lucru afectează eficiența căutărilor.
Explicație scurtă: Dacă spațiul are dimensiune \\( k \\), atunci după doar \\( \sqrt{k} \\) inserări, probabilitatea unei coliziuni devine semnificativă (≈50%). Asta înseamnă că pentru o tabelă hash cu \\( 10^6 \\) sloturi, e foarte probabil să apară coliziuni deja după câteva mii de inserări.
Exemplul 2: Problema colecționarului de cupoane
Întrebare 1: Cum crește numărul așteptat de extrageri odată cu \\( n \\)?
Răspuns: Numărul mediu de extrageri crește aproximativ proporțional cu \\( n \ln n \\).
Explicație:
$$ E[T] = n H_n = n (1 + \tfrac{1}{2} + \tfrac{1}{3} + \dots + \tfrac{1}{n}) \approx n (\ln n + \gamma) $$
unde \\( \gamma \approx 0.577 \\) este constanta lui Euler–Mascheroni. De exemplu:
| n | E[T] teoretic | E[T] simulat |
| —- | ————— | ————– |
| 10 | 29.3 | ≈ 29 |
| 50 | 224.5 | ≈ 225 |
| 100 | 518.7 | ≈ 520 |
Astfel, timpul așteptat crește mai repede decât liniar, dar mult mai lent decât pătratic.
Întrebare 2: Ce analogie există între această problemă și procesul de „umplere” a unei tabele hash?
Răspuns: Problema colecționarului de cupoane este echivalentă cu procesul de inserare în hash până când toate sloturile sunt ocupate. Fiecare „cupon” reprezintă un slot distinct, iar fiecare extragere corespunde unei inserări.
Explicație: La început, găsim ușor sloturi libere (șanse mari de succes). Pe măsură ce tabela se umple, șansele de a găsi un slot nou scad — apar tot mai multe „coliziuni”. În medie, este nevoie de aproximativ \\( n \ln n \\) inserări pentru a umple toate sloturile.
Concluzie generală
- Coliziunile apar mai devreme decât ne-am aștepta (≈\\( \sqrt{k} \\) inserări).
- Umplerea completă a unei tabele hash necesită în jur de \\( n \ln n \\) inserări.
- Aceste două fenomene definesc limitele probabilistice ale hashing-ului eficient.