Note de curs, clasele 11-12, 12 octombrie 2012

From Algopedia
Jump to navigationJump to search

Teme din urmă

  • discuția implementărilor pentru ce am predat ultima dată:
    • structuri de mulțimi disjuncte
    • parcurgeri Euler
    • LCA offline / online
    • RMQ
  • discuție despre importanța implementării, ca să nu fie prima implementare chiar în timpul concursului

Tabele hash

  • definiție
  • proprietate fundamentală: dorim căutare rapidă
  • exemplu: se dau V(n), S, să se spună dacă există a, b în V pentru care a + b = S
    • idem pentru suma a trei numere
  • reprezentare cu vector direct (pentru spațiu mic de chei)
    • problemă: Se dă un arbore cu rădăcină reprezentat printr-un vector de tați. Să se găsească înălțimea arborelui
  • când spațiul de chei U ≫ n, convertirea cheii k în h(k)
  • coliziuni -> înlănțuire
  • inserare: O(1) dacă nu trebuie căutat în prealabil
  • căutare cu succes: O().
    • listele mai lungi (acolo unde există mai multe coliziuni) vor fi căutate mai des, dar tot O()
  • funcții hash, proprietăți: să fie independente de pattern-uri în date, să folosească toți biții
    • rele: % 9 (permutarea cifrelor), % 2p (numai ultimii doi biți)
    • împărțire: un număr prim nu prea apropiat de puteri ale lui 2.
    • înmulțire: , A recomandat golden ratio
  • compromisuri pentru mărimea tabelei: mică -> coliziuni, mare -> risipă de memorie
  • birthday paradox: când mă aștept să am prima coliziune?
  • open address hashing

Teme

  • design la un LRU cache care să facă operațiile de inserare / căutare / evacuare în O(1)
  • cele mai mici k elemente dintr-un vector de n, cu două variante (se cer sortate sau nesortate).
    • enumerați câte metode vă dau prin cap și analizați complexitățile (sortare, select, min-heap, max-heap)
  • să se inițializeze un vector cu o valoare implicită x în O(1) (evident, este o inițializare lazy).