Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เพื่อใช้ตารางแฮชพร้อมโพรบกำลังสอง


ตารางแฮชเป็นโครงสร้างข้อมูลที่ใช้เก็บคู่คีย์-ค่า ฟังก์ชันแฮชถูกใช้โดยตารางแฮชเพื่อคำนวณดัชนีลงในอาร์เรย์ที่จะแทรกหรือค้นหาองค์ประกอบ การตรวจสอบกำลังสองเป็นเทคนิคการแก้ปัญหาการชนกันในตาราง Open Addressed Hash มันทำงานโดยใช้ดัชนีแฮชดั้งเดิมและเพิ่มค่าต่อเนื่องของพหุนามกำลังสองตามอำเภอใจจนกว่าจะพบช่องเปิด

นี่คือโปรแกรม C++ เพื่อใช้ Hash Tables ด้วย Quadratic Probing

อัลกอริทึม

สำหรับการค้นหาค่าคีย์:

เริ่มต้น ประกาศฟังก์ชัน SearchKey(int k, HashTable *ht) int pos =HashFunc(k, ht->s) intialize collisions =0 while (ht->t[pos].info !=Emp and ht->t [pos].e !=k) pos =pos + 2 * ++collisions -1 if (pos>=ht->s) pos =pos - ht->s ส่งคืน posEnd

สำหรับส่วนแทรก:

เริ่มต้น ประกาศฟังก์ชัน แทรก (int k, HashTable *ht) int pos =SearchKey(k, ht) if (ht->t[pos].info !=Legi) ht->t[pos].info =Legi ht->t[pos].e =kEnd.

สำหรับดิสเพลย์:

เริ่มต้น ประกาศฟังก์ชัน display(HashTable *ht) สำหรับ (int i =0; i s; i++) int value =ht->t[i].e if (!value) พิมพ์"ตำแหน่ง:" พิมพ์ตำแหน่งปัจจุบัน พิมพ์" องค์ประกอบ:Null" อื่นพิมพ์"ตำแหน่ง:" พิมพ์ตำแหน่งปัจจุบัน พิมพ์" องค์ประกอบ:" พิมพ์องค์ประกอบสิ้นสุด

สำหรับฟังก์ชันแฮช:

เริ่มต้น ประกาศฟังก์ชัน Rehash(HashTable *ht) int s =ht->s HashTableEntry *t=ht->t ht=beginningTable(2 * s) สำหรับ (int i =0; i  

โค้ดตัวอย่าง

#include #include #define T_S 10using เนมสเปซ std;enum ประเภทรายการ { Legi, Emp, Del}; โครงสร้าง HashTableEntry { int e; enum EntryType ข้อมูล; }; โครงสร้าง HashTable { int s; HashTableEntry *t; }; bool isPrime (int n) { if (n ==2 || n ==3) คืนค่าจริง; ถ้า (n ==1 || n % 2 ==0) คืนค่าเท็จ สำหรับ (int i =3; i * i <=n; i +=2) ถ้า (n % i ==0) คืนค่าเท็จ คืนค่าจริง;} int nextPrime (int n) { if (n <=0) n ==3; ถ้า (n % 2 ==0) n++; สำหรับ (; !isPrime( n ); n +=2); return n;}int HashFunc (int k, int s) { ส่งคืน k % s;} HashTable *initiateTable (int s) { HashTable * ht; ถ้า (s s =nextPrime(s); ht->t =ใหม่ HashTableEntry [ht->s]; if (ht->t ==NULL) { cout<<"ขนาดตารางเล็กเกินไป"<s; i++) { ht->t[i].info =Emp; ht->t[i].e =NULL; } return ht;}int SearchKey(int k, HashTable *ht) { int pos =HashFunc(k, ht->s); การชนกันของ int =0; ในขณะที่ (ht->t[pos].info !=Emp &&ht->t[pos].e !=k) { pos =pos + 2 * ++collisions -1; ถ้า (pos>=ht->s) pos =pos - ht->s; } ส่งคืน pos;} โมฆะ แทรก (int k, HashTable * ht) { int pos =SearchKey (k, ht); if (ht->t[pos].info !=Legi) { ht->t[pos].info =Legi; ht->t[pos].e =k; }} HashTable * Rehash (HashTable * ht) { int s =ht->s; HashTableEntry *t=ht->t; ht=initialTable(2 * s); สำหรับ (int i =0; i s; i++) { int value =ht->t[i].e; ถ้า (!value) cout<<"ตำแหน่ง:"<>ค; สวิตช์ (c) { กรณีที่ 1:cout <<"ป้อนขนาดของตารางแฮช:"; ซิน>>เอส; ht =initialTable(s); cout<<"ขนาดของตารางแฮช:"< ht->s) { cout<<"Table is Full, Rehash the table"<>วี; แทรก(v, ht); ผม++; หยุดพัก; กรณีที่ 3:แสดง (ht); หยุดพัก; กรณีที่ 4:ht =แฮชใหม่ (ht); หยุดพัก; กรณีที่ 5:ทางออก(1); ค่าเริ่มต้น:cout<<"\nป้อนตัวเลือกที่ถูกต้อง\n"; } } คืนค่า 0;}

ผลลัพธ์

1.Initialize size of the table2.Insert element into the table3.Display Hash Table4.Rehash The Table5.Exit Enter your choice:1Enter size of the Hash Table:4Table Size is Too SmallSize of Hash Table:51.Initialize size of the Hash Table:4Table Size is Too SmallSize of Hash Table:51.Initialize size of the table องค์ประกอบ table2.Insert ลงใน table3.Display Hash Table4.Rehash The Table5.Exit Enter your choice:1Enter size of the Hash Table:10Size of Hash Table:111.Initialize size of the table2.Insert element into the table3.แสดง Hash Table4 .Rehash The Table5.Exit Enter your choice:2Enter element to be insert:11.Initialize size of the table2.Insert element into the table3.Display Hash Table4.Rehash The Table5.Exit Enter your choice:2Enter element to be inserted:21.Initialize ขนาดของ table2.Insert element ลงใน table3.Display Hash Table4.Rehash The Table5.Exit Enter your choice:2Enter element to be insert:31.Initialize size of the table2.Insert element into the table3.Display Hash Table4.Rehash The Table5 .ExitEnter สิ่งที่คุณเลือก:2Enter องค์ประกอบที่จะอยู่ใน erted:41.Initialize size of the table2.Insert element into the table3.Display Hash Table4.Rehash The Table5.Exit Enter your choice:2Enter element to be insert:51.Initialize size of the table2.Insert element into the table3.Display Hash เริ่มต้น Table4.Rehash The Table5.Exit Enter your choice:2Enter element to be insert:61.Initialize size of the table2.Insert element into the table3.Display Hash Table4.Rehash The Table5.ExitEnter your choice:2Enter องค์ประกอบที่จะแทรก:71 เริ่มต้นขนาดของ table2.Insert องค์ประกอบลงใน table3.Display Hash Table4.Rehash The Table5.Exit Enter your choice:2Enter องค์ประกอบที่จะแทรก:81.Initialize ขนาดของ table2.Insert องค์ประกอบใน table3.Display Hash Table4.Rehash The Table5.Exit Enter your choice:2Enter element to be insert:91.Initialize size of the table2.Insert element into the table3.Display Hash Table4.Rehash The Table5.Exit Enter your choice:2Enter องค์ประกอบที่จะแทรก:101.Initialize ขนาดของ table2.Insert องค์ประกอบลงใน table3.Display Hash Table4.Rehash The Table5.Exit Enter your choice:2Enter element to be insert:111.Initialize size of the table2.Insert element into the table3.Display Hash Table4.Rehash The Table5.Exit Enter your choice:2Table is Full, ตารางที่ 3 แฮช table1.Initialize ขนาดของ table2.Insert element ลงใน table3.Display Hash Table4.Rehash The Table5.Exit Enter your choice:3Position:1 Element:11Position:2 Element:1Position:3 Element:2Position:4 Element:3Position:5 องค์ประกอบ:4ตำแหน่ง:6 องค์ประกอบ:5ตำแหน่ง:7 องค์ประกอบ:6ตำแหน่ง:8 องค์ประกอบ:7ตำแหน่ง:9 องค์ประกอบ:8ตำแหน่ง:10 องค์ประกอบ:9ตำแหน่ง:11 องค์ประกอบ:101.เริ่มต้นขนาดของตาราง2.แทรกองค์ประกอบลงในตาราง3.แสดงตารางแฮช 4 .Rehash The Table5.Exit ป้อนตัวเลือกของคุณ:41.Initialize size of the table2.Insert element into the table3.Display Hash Table4.Rehash The Table5.ExitEnter your choice:3Position:1 Element:NullPosition:2 Element:1Position:3 Element:2ตำแหน่ง:4องค์ประกอบ:3ตำแหน่ง:5องค์ประกอบ:4ตำแหน่ง :6 องค์ประกอบ:5ตำแหน่ง:7 องค์ประกอบ:6ตำแหน่ง:8 องค์ประกอบ:7ตำแหน่ง:9 องค์ประกอบ:8ตำแหน่ง:10 องค์ประกอบ:9ตำแหน่ง:11 องค์ประกอบ:10ตำแหน่ง:12 องค์ประกอบ:11ตำแหน่ง:13 องค์ประกอบ:Nullตำแหน่ง:14 องค์ประกอบ:NullPosition:15 องค์ประกอบ:NullPosition :16 องค์ประกอบ:Null ตำแหน่ง:17 องค์ประกอบ:NullPosition:18 องค์ประกอบ:NullPosition:19 องค์ประกอบ:NullPosition:20 องค์ประกอบ:NullPosition:21 องค์ประกอบ:NullPosition:22 องค์ประกอบ:NullPosition:23 Element:Null1.Initialize size of the table2.Insert element into the table3.Display Hash Table4.Rehash The Table5.ExitEnter your choice:2Enter element to be insert:201.Initialize size of the table2.Insert element into the table3.Display Hash Table4.Rehash The Table5.Exit Enter your choice:5