Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Design HashSet ใน Python: สร้าง HashSet แบบกำหนดเอง

ออกแบบ HashSet โดยไม่ใช้ไลบรารี built-in รองรับ add(x), contains(x), remove(x) ใช้ Bucket แบบรายการ (list) จัดการชนกัน

โครงสร้างข้อมูล

  • Bucket: รายการเก็บค่า มีเมธอด update, get, remove
  • MyHashSet: อาร์เรย์ของ 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