ออกแบบ HashSet โดยไม่ใช้ไลบรารี built-in รองรับ add(x), contains(x), remove(x) ใช้ Bucket แบบรายการ (list) จัดการชนกัน
โครงสร้างข้อมูล
Bucket: รายการเก็บค่า มีเมธอดupdate,get,removeMyHashSet: อาร์เรย์ของ Bucket ขนาดkey_space = 2096ใช้key % key_spaceเป็น hash
ตัวอย่างการใช้งาน
add(1), add(3), contains(1)→True, contains(2)→False, add(2), contains(2)→True, remove(2), contains(2)→False
การติดตั้งใน Python
class Bucket:
def __init__(self):
self.bucket = []
def update(self, key):
for i, k in enumerate(self.bucket):
if k == key:
self.bucket[i] = key
return
self.bucket.append(key)
def get(self, key):
return key in self.bucket
def remove(self, key):
for i, k in enumerate(self.bucket):
if k == key:
del self.bucket[i]
return
class MyHashSet:
def __init__(self):
self.key_space = 2096
self.hash_table = [Bucket() for _ in range(self.key_space)]
def add(self, key):
self.hash_table[key % self.key_space].update(key)
def remove(self, key):
self.hash_table[key % self.key_space].remove(key)
def contains(self, key):
return self.hash_table[key % self.key_space].get(key)
# Test
ob = MyHashSet()
ob.add(1); ob.add(3)
print(ob.contains(1)) # True
print(ob.contains(2)) # False
ob.add(2)
print(ob.contains(2)) # True
ob.remove(2)
print(ob.contains(2)) # False