Skip to main content
การแกปญหาการชนกันดวย
                      
    Hashing Function
Hashing
• หลักการเก็บขอมลนี้ คอ การนําขอมลแตละตัวไปใสไวในตารางที่มี
  หลกการ กบขอมูลน คือ การนาขอมูลแตล ตวไปใสไวในตารางทม
  ดัชนีกํากับอยู โดยใชสูตรการคํานวณ และคาดัชนี ไดแก สูตรการ
  หาร การพับ การยกกําลัง
        การพบ การยกกาลง
ผลจากการใช Hashing Function
• การลดจํานวนครั้งของการเกิดการชนกัน (Collision) การชนกันจะ
  การลดจานวนครงของการ กดการชนกน                  การชนกนจ
  เกิดขึ้นเมื่อคาคียตางกัน 2 คีย
Hashing Function
• 1. วิธการหาร (Division Method)
        ี
  ▫ H(key) =key mod m+1
• เมื่อ m เปนเลขจํานวนเต็ม และฟงกชัน mod จะใหคาเปนเศษจาการ
                                                  
  หารคา key
• ตัวอยาง ถา key = 35 และ m=11
  ▫ H(35)=35 mod 11+1
  ▫ = 2+1
        2
  ▫= 3
Hashing Function

• 2. การวิเคราะหตวเลข (Digit Analysis)
                   ั
• เปนการเลือกตัวเลขเพียงบางหลักมาจากคาคีย เชน เลขทีบัตร
                                                       ่
  ประจําตัวเปนคีย 3-7503-00141-597 ตองการเก็บคียในตารางที่
  มีตําแหนง 1000 ตําแหนง การใชตัวเลข 3 หลัก การเลือกตัวเลข
  เราจะพิจารณาตัวเลขในตําแหนงทีมการกระจายมากที่สุด เพื่อ
                     ลข น หน ่มีก ก          มก
  หลีกเลี่ยงการชนกัน
Hashing Function

• 3. วิธการอาศัยการยกกําลังสอง (Midsquare Method)
        ี
• อาศัยการยกกําลัง โดยการนําคาคียมาคูณ ดวยตัวมันเอง แลวนําตัวเลขที่
  อยูตรงกลางมาใชเปนตําแหนงของขอมูล
• ตัวอยาง
• จงคํานวณหาตําแหนงที่อยููของชุดคีย (275,131,242,312,114) โดยใช
                                 ุ
  ตัวเลขหลักรอยเพียงหลักเดียว (ตารางมี 10 ชอง คือ 0-9)
• 2752 = 75625        H(key) = 6
• 1122 = 12544        H(key) = 5
• 2432 = 59049        H(key) = 0
• 3132 = 97969        H(key) = 9
• 1512 = 22801        H(key) = 8
• กรณีนี้จะไมมขอมลใดเกิดการชนกันเลย
  กรณนจะไมมขอมูลใดเกดการชนกนเลย
               ี
• ตัวอยาง
• จงคํานวณหาตําแหนงที่อยุของคีย (12,31,42,7,14) โดยเอาบิต
                           ุ
  6,5,4,3 มาใชเปนตําแหนง (มองในรูปตัวอเลขไบนารี
  b6,b5,b4,b3,b2,b1,b0)
     , , , , , , 0)
• 122 = 144         00001 0010 000            =0010 =2
• 312 = 961         001 11 1000 001           =1000 =8
• 422 = 1764        0 1101 1100 100 =1100 =10
• 72 = 49           00000 0110 001            =0110 =6
• 142 = 196         00001 1000 100            =1000 =8
• กรณีนี้จะมีขอมูลชนกันถึง 1 ครั้ง
              
Hashing Function

• 4. วิธีการพับ (Folding Method) มี 2 แบบ คือ
  ▫ 4.1 แบบที่ 1 การพับตามขอบเขต (Folding by Boundary)
    เปนวิธการแบงคีย ออกเปนสวนๆ โดยจะมีจํานวนหลักของ
           ี                             ๆ
    ตัวเลขเทากัน แลวนาทุกสวนมารวมกัน
                               ํ
  ▫ 4 2 แบบที่ 2 การพับโดยการเลื่อน (Folding by shifting)
    4.2 แบบท             การพบโดยการเลอน
    วิธีการพับอีกวิธีหนึ่งคือ การเลื่อนหรือสลับตําแหนงของตัวเลขใน
    สวนแบงทีี่เปนตััวชีี้เปนเลขคู
ตัวอยาง

• จงคํานวณหาตําแหนงขอมูลที่ประกอบดวยคาคีย ดังนี้ 3205,
  2345, 7148 ตามลักษณะแบบพับทั้ง 2 แบบแตตองการตําแหนง
  ซึ่งเปนตัวเลข 2 หลัก (จาก 0 ถึง 99) ดังนั้น เราอาจแบงขอมูล
  ออกเปน 2 ชุด ชุดละ 2 หลัก แลวนาขอมูลทั้ง 2 ชุดมารวมกัน
                                      ํ
  ทําใหไดตําแหนงที่ตองการ
คาคีย       พับแบบที1
                             ่      พับแบบที่ 2
3205             32+05=37        32+50=82
2345             23+45=68        23+54=77
7148             71+48=119       71+84=155
Hashing Function

• 5. การแปลงฐานเลข (Radix Conversion)
• กระจายคาคียใหเปนตําแหนงโดยใชวิธี การแปลงฐานเลข
                
• ตัวอยาง
  ตวอยาง
• 12.5 มีคาคีย 1234 ในฐาน 11 จะได
• (1*113)+(2*112)+(3*111)+(4*110) =1331+242+33+4
• =1610 ในฐาน 10
Hashing function