1 / 29

Hash table Хэш хүснэгт

Hash table Хэш хүснэгт. Лекц №11. Үндсэн асуудал. Хадгалсан бичлэгүүдийн хувьд дараах үйлдлүүдийг хийдэг. add new record Шинэ бичлэг нэмэх delete record Бичлэг устгах search a record by key Бичлэгийг түлхүүрээр хайх

anise
Télécharger la présentation

Hash table Хэш хүснэгт

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. Hash tableХэш хүснэгт Лекц №11

  2. Үндсэн асуудал • Хадгалсан бичлэгүүдийн хувьд дараах үйлдлүүдийг хийдэг. • add new record Шинэ бичлэг нэмэх • delete record Бичлэг устгах • search a record by key Бичлэгийг түлхүүрээр хайх • Эдгээр үйлдлийг үр ашигтайгаар гүйцэтгэх арга замыг олох шаардлагатай болсон

  3. Эрэмбэлээгүй массивUnsorted array • Бичлэг буюу record-уудыг массивт эрэмбэлэлгүйгээр хадгалсанаар: • add – Хамгийн сүүлийн бичлэг болгож нэмэхХурданO(1) • delete – Устгах мэдээллээ олоход Удаан, Нүдийг дүүргэхэд Хурдан (Хамгийн сүүлийн бичлэгийг оронд нь хийнэ) O(n) • search – Дараалсан хайлтУдаанO(n)

  4. Эрэмбэлсэн массивSorted array • Бичлэгүүдийг массивт эрэмбэтэйгээр хадгалсанаар • add – Бичлэгийг тохирох байранд нь оруулах. Бичлэгүүдийг шилжүүлэх үйлдэл хийдэг тул УдаанO(n) • delete – Устгасны дараа хоосон үлдсэн зайг хэрхэн дүүргэх вэ гэсэн асуудал гардаг. Бичлэгүүдийг шилжүүлдэг тулУдаанO(n) • search – Хоёртын хайлтХурданO(log n)

  5. Холбоост жагсаалт • Бичлэгүүдийг жагсаалтанд (эрэмбэлэлгүйгээр) хадгалсанаар: • add – Нэг л зангилаа руу ханддаг тул Хурдан O(1) • Delete - Устгасны дараа холбоосыг хэвээр үлдээхэд Хурданболовч тухайн устгах зангилааг хайж олоход УдаанO(n) • search – Дараалсан хайлтУдаанO(n)(Холбоост жагсаалт ашигласан үед элементүүд нь эрэмбэлэгдсэн байсан ч Хоёртын хайлтыг ашиглах боломжгүй юм.)

  6. Бусад аргууд • Илүү гүйцэтгэлтэй боловч илүү төвөгтэй • Hash table • Tree (BST, Heap, …)

  7. Hashing • Түлхүүрийг тусгай функцаар бага бүхэл тоо болгож өөрчилдөг • Уг функцыг Hash function гэнэ • Hash value: гаргаж авсан жижиг тоо ба индексийг төлөөлнө

  8. Хүснэгтийг массивт хадгалах studid name score 0012345 andy 81.5 0033333 betty 90 0056789 david 56.8 ... 9801010 peter 20 9802020 mary 100 ... 9903030 tom 73 9908080 bill 49 1,000 оюутны мэдээллийг хадгалаад Оюутны id буюу дугаараар нь хайх асуудал тулгарч болно.

  9. Хүснэгт байдалтай массив name score 0 : : : Бичлэгүүдийг маш том массивт хадгалж болно (index 0..9999999). index нь оюутны id болж ашиглагдана. 0012345 гэсэн id-тай оюутны мэдээлэл A[12345]-т хадгалагдана. 12345 andy 81.5 : : : 33333 betty 90 : : : 56789 david 56.8 : : : : : : 9908080 bill 49 : : : 9999999

  10. Хүснэгт байдалтай массив • Үүнийг мөн Шууд хаяглалттай буюу Direct-address, Hash Table гэдэг. • Uдах байрлал буюу slotбүр нь түлхүүр (key)-ээс хамаарна. •kтүлхүүртэй х элемент байгаа бол T [k] нь x-ыг заана. •Үгүй болT [k] хоосон буюу NULL байна.

  11. Хүснэгт байдалтай массивбуюу хэш хүснэгт • Бичлэгүүдийг индекс нь түлхүүрийг илэрхийлэх маш том массивт хадгалсан үед: • add – Маш хурданO(1) • delete - Маш хурданO(1) • search - Маш хурданO(1) • Гэвч энэ нь маш их санах ойг зарцуулна. Байх боломжгүй.

  12. Түлхүүрээс индексийг гаргах hashcode(key) 1. Буюу эерэг бүхэл тоог гаргах hash code түлхүүрийн утгаас гаргана түлхүүр болгонд өөр байх 2. Индексийн хязгаарт чиглүүлэлт хийнэ (to map) 0 ...Size-1 хүснэгтийн хэмжээ modula арифметикийг ихэвчлэн ашигладаг % size index = hashcode(key) % size

  13. Hashtable [0] Hashtable [1] Hashtable [2] . . . . . . Hashtable [n-2] Hashtable [n-1] v Хоосон орон зайг илэрхийлнэ v Хэш хүснэгт

  14. Hashtable [0] Hashtable [1] Hashtable [2] . . . . . . Hashtable [n-2] Hashtable [n-1] v Зай буюу Bucket руу хадгалах keyvalue3 Hashfunction(keyvalue1)  2 Hashfunction(keyvalue2)  n-1 keyvalue1 Hashfunction(keyvalue3)  0 Hashfunction(keyvalue4)  n-2 keyvalue4 keyvalue2

  15. cat Bucket 2 cougar coyote horse Bucket 7 hippopotamus Жишээ Үсгийн дарааллыг ашиглах (0-ээс эхэлнэ) 26 зай буюу хувинтай Cat Dog Elephant Frog Grasshopper Hippopotamus Horse Cougar Coyote Zebra

  16. Hash FunctionХэш функц Hash(key) = (2 * int(key) modulus 10) Cat Dog Elephant Frog (2* (3+1+20)) % 10 = 48 % 10 = 8 (2*(4+15+7)) % 10 = 52 % 10 = 2 (2*(5+12+5+16+8+1+14+20) )% 10 = 162 % 10 = 2 (2*(6+18+15+7)) % 10 = 92 % 10 = 2 Modulus гэдэг нь хуваагаад үлдэгдэл авах үйлдэл

  17. Hash functionХэш функц function Hash(key: KeyType): integer; Hash гэдэг шидэт функцтай байна гэж төсөөлье. Энэ нь 1000 бичлэгийн түлхүүр буюу key (оюутны id)-ыг 0..999 гэсэн бүхэл тоо руу чиглүүлдэг, (хувиргадаг). (Ингэхдээ 2 ялгаатай түлхүүрт ижил дугаар олгодоггүй.) H(‘0012345’) = 134 H(‘0033333’) = 67 H(‘0056789’) = 764 … H(‘9908080’) = 3

  18. Hash functionХэш функц 0 name score Бичлэгийг хадгалахын тулд Hash(stud_id)-ыг ажиллуулж, Hash(stud_id) индекстэй массивын элемент болгож хадгална. Оюутныг хайхын тулд Hash(target stud_id) дах байрлалыг мэдэж байхад л хангалттай : : : 3 9908080 bill 49 : : : 67 0033333 betty 90 : : : 134 0012345 andy 81.5 : : : 764 0056789 david 56.8 : : : 999 : : :

  19. Perfect Hashfunction-тай Хэш хүснэгт • Доорх боломжыг олгохоор индексийг үүсгэдэг функцыг perfect буюу төгс функц гэдэг. • add – Маш хурданO(1) • delete - Маш хурданO(1) • search - Маш хурданO(1) • Гэвч энэхүү функцыг загварчлахад маш хүндрэлтэй (боломжит түлхүүрийн хэмжээ нь том үед)

  20. Hash functionХэш функц • Энэ нь түлхүүрийг тухайн хязгаар доторх индекс рүү чиглүүлдэг. • Зорилтот шаардлагууд: • Тооцоолоход хялбар ба хурдан байх • Тархсан байсан ч зөрчил үүсэх магадлал маш их тул зайлсхийх function Hash(key: KeyType);

  21. CollisionЗөрчил • Ерөнхийдөө зөрчилөөс зайлсхийж чаддаггүй • Collision resolution – 2 ялгаатай түлхүүр ижил тоогоор илэрхийлэгдэх явдал хэр их тохиолдож байгаа нь H(‘0012345’) = 134 H(‘0033333’) = 67 H(‘0056789’) = 764 … H(‘9903030’) = 3 H(‘9908080’) = 3

  22. Hash FunctionХэш функц • Perfect hash function буюу Төгс хэш функц гэдэг нь түлхүүр бүрт ялгаатай утга буюу индексийг боловсруулж өгдөг. Ийм функц Маш ховор • Дараах тохиолдолд зөрчилөөс зайлсхийх боломжтой: • Түлхүүрийн тоо > Хэш хүснэгтийн хэмжээ • Зөрчилөөс зайлсхийхийн тулд: Хэш хүснэгтийн мөр бүрд түлхүүрүүдийг байрлуулахаар сонгож чаддаг хэш функцыг сонгох.

  23. Зөрчилөөс зайлсхийх:Multiple Congruency Method • Түлхүүрийг бүхэл тоо болгож өөрчлөх • Их анхны тоогоор үржүүлэх • Дээрх үр дүнгээ хүснэгтийн хэмжээнд хуваах int(key) primeNumber * int(key) (primeNumber * int(key)) % TableSize

  24. Hashing Буюу Хэшийг үүсгэх • Хэш функцад тавигддаг шаардлагууд: • Тооцоолоход хялбар • Түлхүүрийг аль болох тархаах • Маш их зөрчил нь  Гүйцэтгэлийг бууруулдаг • Үр дүн 0 байж болох учир Хэш хүснэгт нь 0-ээс эхэлж индекслэгддэг

  25. Open Bucket Hash TableНээлттэй үүртэй хэш хүснэгт Bucket – Хэш хүснэгтийн үүр буюу орон зай Open-bucket hash table: Хадгалах орон зай нь Ганц өгөгдлийн элементэд л зориулагдсан байдаг Түлхүүрийг хувиргасны дүнд home bucketбуюу хадгалах үүр гардаг

  26. Closed Bucket Hash Table: ChainingХаалттай үүртэй хэш хүснэгт Closed-bucket hash table: Үүр буюу хадгалах орон зай нь өгөгдлийн элементүүдийн цуглуулгад зориулагдсан байдаг

  27. Зөрчилийг шийдэх • 2 түлхүүрт Хэшийн ижил орон зайг тодорхойлсон утга гарсан тохиолдолд зөрчил үүснэ. Түүнийг шийдэх 2 арга байдаг: • Hashing with Chaining: Хэш хүснэгтийн үүр бүр нь ижил индекстэй түлхүүрүүд бүхий бичлэгүүдийн холбоост жагсаалтыг заасан заагчыг агуулдаг • Hashing with Open Addressing: Хэш хүснэгтийн үүр бүр нь зөвхөн ганц түлхүүрийг агуулдаг. Хэрэв шинэ түлхүүр нь мэдээлэл хадгалагдсан үүр рүү чиглүүлэгдвэл (индекс нь давхардвал) хоосон орон зайг олтол хүснэгтийн орон зайнуудыг шалгадаг.

  28. Hash Functions - Example int hash(char * key) { int val = 0; while(*key != '\0') { val = (val << 4) + (*key); key++; } return val; } int compress(int index, int size) { return abs(index % size); }

  29. Даалгавар Дараах ойлголтуудыг судал • Гинжтэй хэш хүснэгт (chained) • Нээлттэй хаягтай хэш хүснэгт (open addressed) • Хэш функцуудыг бичнэ үү

More Related