Bucketing คืออะไร?
Hash Table เป็น 2D Array แทน 1D Array แต่ละ Entry (Bucket) จุได้ M Items (M = Constant, ไใช่จำนวนข้อมูลทั้งหมด)
ปัญหาของ Bucketing
- Wasted Space มาก (หลาย Bucket ไม่เต็ม)
- ถ้าเกิน M → ต้องมี Strategy อื่น (Overflow Handling)
- ไม่เหมาะ Memory-based แต่ทำได้ถ้า Disk-based Buckets
Load Factor λ = N / (M × Y) โดย N = Items, M = Locations, Y = Buckets/Location
λ > 1 ได้ แต่ λ 越大 → Collision Chance 越高 λ > 1 → Guarantee ≥ 1 Collision (Pigeonhole Principle)
Complexity Analysis
| Operation | Worst-case Time | หมายเหตุ |
|---|---|---|
| Successful Search | O(Y) | 掃描 Bucket ทั้ง Y Slots |
| Unsuccessful Search | O(Y) | 掃描 Bucket ทั้ง Y Slots |
| Insertion | O(Y) | สมมติ Success, ไม่ Handle Failed Insertion ดี |
| Deletion | O(Y) | 掃描หา Item แล้วลบ |
| Storage | O(M × Y) | Fixed Size 2D Array |
สรุป
Bucketing เรียบง่าย เหมาะ Disk-based (Block = Bucket) แต่ Memory-based ใช้ Chaining/Open Addressing ดีกว่า เพราะ Space Efficiency และ Flexibility สูงกว่า