Showing posts with label Bucket Addressing. Show all posts
Showing posts with label Bucket Addressing. Show all posts

Saturday, 16 August 2014

(#9)Bucket Addressing/ Perfect Hashing/Deletion

         මෙහිදී අප collide වන elements store කිරීම සඳහා වෙනම list එකක් හෝ table එකක් සූදානම් කරගෙන තබා ගනියි . එය bucket එක ලෙස හඳුන්වයි.  Collide වන elements link එකක් තබාගෙන bucket එකට add කිරීම සිදු කරයි.





Hash Table Organization







Perfect Hashing



Worste case එකද O(1) ට සමාන වන පරිදි hash table එකක් ගොඩනැගිය හැකිනම් එයට perfect hashing යැයි කියනු ලැබේ. මෙහිදී hash table එකේ collisions වැලැක්වීම සඳහා හැම slot එකකටම තවත් hash table එක බැගින් සම්බන්ධ කිරීම කරනු ලැබේ. මෙහිදී ප්‍රධාන hash table එක primary hash table ලෙසද අනිත් hash table එක secondary hash table (Sj) ලෙසද හඳුන්වනු ලබයි.





මෙහිදී collision විසදාගනු ලබන hash function එක outer hash function ලෙස හදුන්වනු ලබයි. එය පහත ලෙස නිර්මාණය කරයි.


                   h(k) = ( ( ak + b ) mod p )

මෙහි p යනු  key values වලට වඩා විශාල වන ඕනෑම ප්‍රථමක (prime ) සංඛ්‍යාවකි.

Sj  hash table එකේ j වන slot එකට ලැබෙන සියලුම keys ගබඩා  කරගනියි. එම hash table එකෙහි size ඒක mj ලෙස ගනිමු.
එවිට secondary hash function එක ,

           hj(k) = ( ( aj k + bj ) mod p ) mod mj  

 ලෙස වෙයි.
මෙහිදී secondary level එකේදී collisions ඇති නොවන පරිදි hash function එක තෝරාගැනීම වැදගත් වෙයි.


Deletion

· Chaining method  එකේදී link list එකේ ඇති element එක delete කිරීම මගින් අදාළ element එක delete කළ හැක.හේතුව chaining වලදී නිතරම collision එක ඇතිවූ slot එකේ සිට element එක ඇත්තටම store කළ ඇති slot එකට link එකක් තබාගැනීමයි.

· Open addressing කර ඇති hash table එකක elements delete කිරීම තරමක් අපහසු වෙයි. Collision එක ඇතිවූ slot එකේ සිට item එක store කරන slot එකට link එකක් තබා නොගැනීම එයට හේතුවයි. යම්කිසි slot එකකින් key එක delete කල පසු එහි NIL(null) node එකක් store කිරීමෙන් එය empty slot එකක් බවට පත්කළ නොහැකිය.





·Table එකක ඇති element එකක් delete කළ පසු එය empty බවට mark එකක් තැබිය හැක.එවිට නැවත item එකක් insert කිරීමට search කරගෙන යනවිට අදාළ slot එක empty slot එකක් ලෙස පෙන්වයි. නමුත් මෙහිදී කලින් store කර තිබූ item එක delete වීමක් සිදු නොවන අතර සිදු වන්නේ එම item එක උඩින් අලුත් item එක store වීමක් (overwrite) පමණි.

· විශාල items ප්‍රමාණයක් delete කිරීම search time එක වැඩි කරන අතර delete කරන ලද items test කිරීමට සිදුවීම එයට හේතුවයි.

·එම නිසා එලෙස items විශාල ප්‍රමාණයක් delete කර පසු table එක නැවතත් හිස්කිරීමක් පිරිසිදු කිරීමක් සිදු කලයුතුවෙයි.




Applications of Hash Tables







Friday, 7 March 2014

(#5)Pigeonhole Principle

Pigeonhole Principle


පරවියන් රඳවා තබනු ලබන කුඩා කුටි  Pigeonholes  ලෙස හඳුන්වයි.අපි  n පරවියන් ප්‍රමාණයක් m Pigeonholes ප්‍රමාණයකට දමන්නේනම්  n > m  වෙයිනම් අඩු තරමින් එක Pigeonhole එකක හෝ පරවියන් එකකට වැඩියෙන් රැදී සිටිය යුතුය. මෙය Pigeonhole principle  ලෙස හැඳින්වෙයි.

මෙය සම්භාවිතා මූලධර්ම ඇසුරෙන් මෙලෙස පැහැදිලි කරගතහැකිය. n පරවියන් ප්‍රමාණයක් අහඹු ලෙස m Pigeonholes ප්‍රමාණයකට 1/m  යන ඒකාකාර සම්භාවිතාවකින් යුතුව දමන්නේ නම් එක Pigeonhole එකක හෝ පරවියන් එකකට වඩා රඳවා තබාගැනීමේ සම්භාවිතාව   
      1 – ( mn/mn)  වෙයි.
       මෙහි  mn  = mCn   වෙයි.

මෙලෙස එක Pigeonhole එකකට පරවියන් එකකට වඩා යොමුවීමක් collision එකක් ලෙස හඳුන්වයි. මෙමෙ මූලධර්මය අපි hash tables වලටද යෝදාගන්නෙමු.පහත උදාහරණයෙන් පැහැදිලිකරගනිමු.

  • What is the probability that no two hash keys collide(එකම storage location එකකට hash keys දෙකක් යොමුවීම.)?

මෙහිදී අසනු ලබන්නේ keys දෙකක් එකම slot එකකට යොමු නොවීමේ සම්භාවීතාවයි.
 h(k) = k mod 5
slots  5ක් ඇති table එකක් සලකමු.

  • පළමු item එක දැමීමේදී slot 5ම හිස් නිසා collide වීමක් සිදු නොවේ.එම නිසා collide නොවීමේ සම්භාවිතාව = 5/5 = 1 වෙයි.
  • දෙවන item එක දැමීමේදී හිස්ව ඇත්තේ slot 4ක් පමණි.එම නිසා collide වීමේ සම්භාවිතාව  1/5 කි.
  • එමනිසා collide නොවීමේ සම්භාවිතාව  = 4/5 ක්  වෙයි.
මෙලෙස,
  • 3 වන item එක දැමීමේදී collide නොවීමේ සම්භාවිතාව  = 3/5
  • 4වන item එක දැමීමේදී collide නොවීමේ සම්භාවිතාව  = 2/5
  • 5 වන item එක දැමීමේදී collide නොවීමේ සම්භාවිතාව  = 1/5
එමනිසා collide නොවීමේ මුළු සම්භාවිතාව = 5/5 * 4/5 * 3/5 * 2/5 * 1/5
                                                                         = 0.0384

එමනිසා keys 5ක් add කිරීමේදී එක collision එකක්
හෝ ඇති වීමේ සම්භාවිතාව  = 1- P5  = 1- 0.0384 = 0.9616

Collisions

hashing  වලදී මෙම collision ඇති කිරීම මගින් keys ප්‍රමාණයට වඩා slots අඩුවෙන් ඇති table එකක වුවද අපිට සියලුම keys store කරගතහැකිය. එමගින් අවශ්‍යකරන memory space එක අඩුකරගතහැකිය. යම්කිසි hash table එකක ඇතිවන collisions ප්‍රමාණය අවම වෙයිනම් hash table එක හොඳින් ක්‍රියා කරන්නේයැයි කියනු ලැබේ.එමගින් O(1) search time එකක් ලබාගතහැකිය.මෙහි worste case එක O(n) විය හැකිය.එය දුර්වල hash table එකක් ලෙස හඳුන්වයි.එමෙන්ම මෙම collisions විසඳා ගැනීමටද අප ක්‍රමවේදයන් කිහිපයක් අනුගමනය කරයි.

Handling the Collisions

i.Open Addressing
ii.Chaining
iii.Bucket Addressing