ตารางแฮช Hash Table.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
คณิตคิดเร็วโดยใช้นิ้วมือ
Advertisements

โปรแกรมฝึกหัด การเลื่อนและคลิกเมาส์
วิชา องค์ประกอบศิลป์สำหรับคอมพิวเตอร์ รหัส
Lists Data Structure LAUKHWAN NGAMPRASIT LAUKHWAN NGAMPRASIT.
การซ้อนทับกัน และคลื่นนิ่ง
Chapter 2 Root of Nonlinear Functions
DSP 6 The Fast Fourier Transform (FFT) การแปลงฟูริเยร์แบบเร็ว
Hashing Function มีหลายฟังก์ชั่น การเลือกใช้ขึ้นอยู่กับความเหมาะสมของข้อมูล ตัวอย่างของฟังก์ชั่นแฮชมีดังนี้ 1. Mod คือการนำค่าคีย์มา mod ด้วยค่า n ใด.
NUMBER SYSTEM เลขฐานสิบ (Decimal Number) เลขฐานสอง (Binary Number)
คณิตศาสตร์และสถิติธุรกิจ
จำนวนนับใดๆ ที่หารจำนวนนับที่กำหนดให้ได้ลงตัว เรียกว่า ตัวประกอบของจำนวนนับ จำนวนนับ สามารถเรียกอีกอย่างว่า จำนวนเต็มบวก หรือจำนวนธรรมชาติ ซึ่งเราสามารถนำจำนวนนับเหล่านี้มา.
ระบบเลข และการแทนรหัสข้อมูล
กลุ่มสาระการเรียนรู้ คณิตศาสตร์ โรงเรียนบ้านหนองกุง อำเภอนาเชือก
C Programming Lecture no. 6: Function.
การออกแบบโปรแกรมอย่างมีโครงสร้าง Structured Design
Addressing Modes Assembly Programming.
A.5 Solving Equations การแก้สมการ.
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
บทที่ 3 ตัวดำเนินการ และ นิพจน์
จำนวนทั้งหมด ( Whole Numbers )
Searching.
ประชากร และกลุ่มตัวอย่าง
บทที่ 2 อาร์เรย์ อาร์เรย์ คือ ชุดของตัวแปรเดียวกัน ซึ่งสมาชิกของอาร์เรย์จะเป็นตัวแปรพื้นฐาน จำนวนสมาชิกในอาร์เรย์มีขนานแน่นอน และสมาชิกของอาร์เรย์แต้ละตัว.
เครื่องมือช่วยในการจับประเด็น รวบรวมความคิดให้เป็นหมวดหมู่
แนวทางการปฏิบัติโครงการจูงมือ น้องน้อยบนดอยสูง 1.
โครงสร้างข้อมูลแบบคิว
จำนวนเต็มกับการหารลงตัว
ณัฏฐวุฒิ เอี่ยมอินทร์
ทักษะการตัดสินใจ นัทธี จิตสว่าง 28 มีนาคม 2553.
สัปดาห์ที่ 7 การแปลงลาปลาซ The Laplace Transform.
วิธีสายงานวิกฤต Critical Path Method แบบ Activity on Arrow.
บทที่ 3 การวิเคราะห์ Analysis.
สถาปัตยกรรมคอมพิวเตอร์ (Computer Architecture)
การแจกแจงปกติ.
เทคนิคการสืบค้น Google
การดำเนินการทดสอบทางการศึกษาแห่งชาติ (O-NET)
บทที่ 3 การทำงานกับฟอร์ม (Form)
โปรแกรม Microsoft Access
บทที่ 3 การทำงานกับฟอร์ม (Form)
บทที่ 9 สถิติที่ใช้ในการประเมินผล
ลิงค์ลิสต์ (Linked List)
ค21201 คณิตศาสตร์เพิ่มเติม 1
F M B N สมบัติของจำนวนนับ ตัวคูณร่วมน้อย (ค.ร.น.).
สรุปสถิติ ค่ากลาง ค่าเฉลี่ยเลขคณิต เรียงข้อมูล ตำแหน่งกลาง มัธยฐาน
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
วิวัฒน์ ชินนาทศิริกุล
School of Information Communication Technology,
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
โครงสร้างข้อมูล Queues
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
จำนวนจริง จำนวนอตรรกยะ จำนวนตรรกยะ เศษส่วน จำนวนเต็ม จำนวนเต็มบวก
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
การค้นในปริภูมิสถานะ
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
วิธีเรียงสับเปลี่ยนและวิธีจัดหมู่
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
โครงสร้างข้อมูลแบบ สแตก (stack)
ต้นไม้ Tree [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
การค้นในปริภูมิสถานะ
Week 13 Basic Algorithm 2 (Searching)
การแบ่งแยกและเอาชนะ Divide & Conquer
การแบ่งแยกและเอาชนะ Divide & Conquer
หลักการทั่วไปเกี่ยวกับการเขียนโปรแกรม
บทที่ 10 การค้นหาข้อมูล (Searching)
Hashing Sanchai Yeewiyom
ใบสำเนางานนำเสนอ:

ตารางแฮช Hash Table

แนวคิดพื้นฐานของตารางแฮช เป็นโครงสร้างที่มีประสิทธิภาพต่อการจัดเก็บข้อมูลเพื่อการค้นหา การเพิ่ม และ การลบข้อมูล โดยไม่มีการดำเนินการที่เกี่ยวกับลำดับของข้อมูล อาศัยฟังก์ชันการคำนวณเลขที่อยู่ของข้อมูล ที่เรียกว่า “ฟังก์ชันแฮช” (Hash Function) ซึ่งมีหน้าที่แปลงคีย์ของข้อมูลไปเป็นเลขที่อยู่ (Address) ในช่องในตารางแฮช ฟังก์ชันแฮชที่ดีจะใช้สามารถคำนวณเลขที่อยู่ได้รวดเร็ว มีพฤติกรรมกระจาย อย่างสม่ำเสมอ และแปลงคีย์ไปเป็นเลขที่อยู่ของตารางที่มีขนาดเล็ก

Hashing เป็นเทคนิคการสร้างตารางเก็บค่าคีย์แบบหนึ่ง ช่วยให้สามารถค้นหาข้อมูลใน ตารางนั้นได้ง่ายและรวดเร็วยิ่งขึ้น โดยอาศัยเทคนิคของการแปลงค่าคีย์เป็น เลขที่อยู่ (Address) ของข้อมูลนั้นในตาราง Hashing Function Key Address

คุณสมบัติของฟังก์ชันแฮชที่ดี คํานวณตำแหน่งที่อยูไดรวดเร็ว ในเวลาคงตัว (เวลาแปรตามขนาดของคีย์) สามารถกระจายค่าตำแหน่งที่อยู่ต่าง ๆ ที่ไม่ซ้ำกัน หรือ ซ้ำกันน้อยที่สุด

Hashing Function Division Hashing Digit Hashing Mid Square Hashing Fold Hashing Fold Shift Boundary Shift Rotation Hashing

Division Hashing

Key Concept เป็นฟังก์ชันโมดูลาในรูปแบบ K mod N ตำแหน่งที่อยู่ (Address) คือ ค่าเศษที่เหลือจากการหาร K/N K mod N + L0 Key Address H(K) = K mod N + L0 K คือ ค่าคีย์ของข้อมูล N คือ ขนาดของตาราง L0 คือ ค่าคงที่ที่ปรับเพื่อปรับค่าตำแหน่งที่อยู่เริ่มต้น

Ex. ให้คำนวณหาตำแหน่งของคีย์ต่อไปนี้ กำหนดให้ใช้ตารางแฮชขนาด 7 และมีตำแหน่งที่อยู่เริ่มต้นเป็น 0 Address ?? Key 31 42 51 14 12 3 7 17 Data cat rat bat toy man big boy zoo เทคนิค Division Hashing

Division Hashing :: Example Key :: K 31 42 51 14 12 3 7 17 Address 3 2 5 Hash Table 42, 14, 7 1 2 51 3 31, 3, 17 4 5 12 6 H(K) = K mod 7 เกิดการซ้ำกันของคีย์ที่ได้จากการคำนวณทั้งหมด 4 ครั้ง

Digit and Mid Square Hashing

Digit Hashing :: Key Concept เป็นการเลือกค่าคีย์มาจากบางตำแหน่งเท่านั้น เช่น ค่าคีย์มีทั้งหมด 6 ตำแหน่ง แต่ต้องการจัดเก็บในตารางแฮชเพียง 3 ตำแหน่ง อาจเลือกตำแหน่งที่ 1, 3 และ 4 มาเป็นค่าเลขที่อยู่ในตารางแฮช Key ตำแหน่ง 1, 3 และ 4 Address 379452 3 7 9 4 5 2 394 121276 1 2 1 2 7 6 112 378845 3 7 8 8 4 5 388 160252 1 6 0 2 5 2 102 045128 0 4 5 1 2 8 051 เทคนิค Digit Hashing

Mid Square Hashing :: Key Concept Address 379452 143983820304 8382 121276 014707868176 0789 378845 143523534025 2353 160252 025680703504 8070 045128 002036536384 3653 เทคนิค Mid Square Hashing

Digit Square เป็นการใช้เทคนิค Digit Hashing ร่วมกับ Mid Square Hashing Key Square (1, 3, 5, 7) Address 379452 143983820304 1388 121276 014707868176 0408 378845 143523534025 1325 160252 025680703504 0587 045128 002036536384 0235 เทคนิค Digit Square Hashing

Fold Hashing

Key Concept แบ่งคีย์ออกเป็นส่วนๆ แล้วนำส่วนต่างๆ เหล่านี้มา "รวม" กัน Summation Exclusive OR Fold Hashing มี 2 วิธีได้แก่ Fold Shift Boundary Shift เทคนิค Fold Hashing

Fold Shift :: Summation กำหนดให้แบ่งกลุ่ม ๆ กลุ่มละ 3 หลัก Key 2 2 1 7 3 6 5 2 2 1 7 3 6 5 7 3 6 5 Address 9 6 2 เทคนิค Fold Shift Hashing

Boundary Shift :: Summation กำหนดให้แบ่งกลุ่ม ๆ กลุ่มละ 3 หลัก Key 2 2 1 7 3 6 5 2 2 1 7 3 6 5 6 3 7 5 Address 3 5 8 เทคนิค Boundary Shift Hashing

Rotation Hashing

Rotation Hashing Left Rotation Right Rotation 3 7 9 4 5 2 3 7 9 4 5 2

เทคนิคการเลือกใช้ Hashing Function จะต้องคำนึงถึงสิ่งต่อไปนี้ ค่า H(K) ที่ใช้ต้องเป็นฟังก์ชันที่คำนวณง่าย ไม่เสียเวลามาก Address ที่ได้จาก H(K) ต้องทำให้เกิดการซ้ำกันน้อยที่สุด ขนาดของตารางควรมีขนาดใหญ่กว่า ขนาดของข้อมูลชุดที่มีอยู่จริง ๆ เพราะถ้า ช่วงฟังก์ชันมีขนาดใหญ่ ย่อมทำให้โอกาสที่จะเกิดการชนกันน้อยลง

การชนกันของคีย์และการแก้ปัญหา

การชนกันของคีย์ (Collision) การชนกันของคีย์ คือ การที่นำคีย์ไปผ่าน Hashing Function แล้ว ได้ตำแหน่งแอดเดรสเป็นค่าเดียวกัน H(k1) = H(k2) เมื่อเกิดการชนกันขึ้น ( collision) ระหว่าง k1 และ k2 โดยมี ฟังก์ชัน H เป็นตัวแปลงค่า เราต้องมีวิธีจัดการกับเหตุการณ์นี้ เพื่อให้ k1 และ k2 สามารถอยู่รวมกันได้ โดยต้องหาที่อยู่ให้กับ k1 และ k2 ใหม่แล้วแต่ว่า ใครมาก่อนมาหลัง

การแก้ปัญหาการชนกันของคีย์ เทคนิคเพื่อจัดการกับการชนกันที่นิยมใช้มาก มี 2 เทคนิค คือ Chaining เป็นหลักการที่ใช้พอย์เตอร์แบบลิงค์ลิสต์หรือใช้แอดเดรสถัด ๆ ไปในอาร์เรย์ chain มีขนาดคงที่ chain มีขนาดไม่เท่ากัน (ขนาดขึ้นกับจำนวนคีย์ที่อยู่ใน chain นั้น) Rehashing ( Open Addressing )

Chaining :: ขนาดคงที่ แบ่งตารางข้อมูลที่ใช้ถูกแบ่งออกเป็นส่วน ๆ (bucket) จำนวน n bucket แต่ละ bucket มีขนาด m ช่อง ถ้าคีย์ใดมีแอดเดรสซ้ำกัน ให้เก็บในตำแหน่งถัดไปใน Bucket เดียวกัน ถ้า bucket ใดถูกใช้จนหมด (Bucket เต็ม) ให้ถ่ายเทไปอยู่ในส่วน overflow ซึ่งอาจเป็นอีกอาร์เรย์หนึ่ง หรืออาจเป็น bucket ที่ถัด จาก bucket n โดยอาจมีมากกว่า 1 bucket

Chaining :: ขนาดคงที่ ตัวอย่าง จงแปลงคีย์ต่อไปนี้ให้เป็นแอดเดรส และให้หลีกเลี่ยงการชนโดยใช้ Bucket โดยกำหนดให้แต่ละ Bucket มี 4 ช่อง และตารางนี้มีทั้งหมด 5 Bucket ฟังก์ชันที่ใช้คือ H(K) = K mod 5+1 ชุดคีย์ ( 42 , 51, 82, 14, 2, 15, 5, 6, 62, 25, 37, 21)

Chaining :: ขนาดคงที่ 15 5 25 51 6 21 42 82 2 62 14 Bucket#เต็ม 37 Overflow Key H(K) 42 3 51 2 82 3* 14 5 3** 15 1 1* 6 2* 62 3*** 25 1** 37 3**** 21 2** Bucket#เต็ม

Chaining :: ขนาดไม่คงที่ จะอาศัย linked list ขนาด n ตัว แต่ละตัวสำหรับค่า address ค่าหนึ่ง แต่ละโหนดที่เก็บค่า คีย์ จะมี 2 ส่วนคือ สำหรับเก็บคีย์ และ ส่วนเก็บพอยน์เตอร์ ตัวอย่าง จงสร้างตารางสำหรับ key ต่อไปนี้ ชุดคีย์ ( 42 , 49 , 82, 14, 2, 15, 5, 6 ) กำหนดฟังก์ชั่น H(K) = K mod 7 +1 ให้ใช้หลักการหลีกเลี่ยงการชนกันแบบ chaining (ขนาดไม่คงที่) H(42) = 1 H(2) = 3 H(49) = 1 H(15) = 2 H(82) = 6 H(5) = 6 H(14) = 1 H(6) = 7

Chaining :: ขนาดไม่คงที่ H(K) = K mod 7 +1 Key H(K) 42 1 49 82 6 14 2 3 15 5 7 1 42 49 14 2 15 3 2 4 5 6 82 5 7 6

K -------- > H1 (K) -------- > H2 (H1 (K) ) Rehashing เป็นเทคนิคหนึ่งใช้หลักการ Open Addressing “ถ้าเกิดการชนกันขึ้นระหว่างคีย์ K1 และ K2 เนื่องจากการใช้ฟังก์ชันแฮชชิ่ง H1 ให้ทำการคำนวณที่อยู่ของ K2 ใหม่ โดยใช้ ฟังก์ชันแฮชชิ่ง H2” K -------- > H1 (K) -------- > H2 (H1 (K) ) ฟังก์ชัน H2 อาจเป็นฟังก์ชันใหม่หรือเหมือนกับ H1 ก็ได้

H(K) = K mod 7 +1 Key H(K) 42 1 49 82 6 14 2 3 15 5 7 Key 1 42 2 3 4 5