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

โปรแกรมกำหนดโครงสร้างข้อมูลชุดโดยไม่ต้องใช้คลาสชุดไลบรารีใน Python


สมมติว่าเราต้องการใช้โครงสร้างข้อมูลชุดด้วยวิธีต่อไปนี้ -

  • ตัวสร้างเพื่อสร้างอินสแตนซ์ใหม่ของชุด
  • add(val) เพื่อแทรกค่าจำนวนเต็มเข้าไปในเซต
  • exists(val) เพื่อตรวจสอบว่า val อยู่ในเซตหรือไม่
  • remove(val) เพื่อลบ val ออกจากเซ็ต

ดังนั้น หากเราสร้างเซต s ให้เรียก s.add(10), s.add(20), s.add(10), s.exists(10), s.remove(10), s.exists( 10), s.exists(20) จากนั้นผลลัพธ์จะเป็น

  • สำหรับ s.add(10) จะแทรก 10
  • สำหรับ s.add(20) จะแทรก 20
  • 10 อยู่ใน s แล้ว ไม่มีอะไรเกิดขึ้น
  • s.exists(10) จะคืนค่าเป็นจริงเมื่อมี 10
  • ลบ 10 โดย s.remove(10)
  • s.exists(10) จะคืนค่าเท็จเพราะลบ 10 รายการและองค์ประกอบหนึ่งจะมีได้เพียงครั้งเดียว
  • s.exists(20) จะคืนค่าเป็นจริงเมื่อมี 20 อยู่

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดคอนสตรัคเตอร์
  • buckets :=แผนที่ว่างและจะเก็บรายการข้อมูล
  • กำหนดฟังก์ชัน add() นี่จะใช้เวลา val
  • ถ้ามีอยู่(val) จะเป็นเท็จ ดังนั้น
    • ใส่ val ที่ส่วนท้ายของ buckets[val]
  • กำหนดฟังก์ชั่นที่มีอยู่() นี่จะใช้เวลา val
  • คืนค่า จริง เมื่อ val อยู่ในบัคเก็ต[val] มิฉะนั้น เท็จ
  • กำหนดฟังก์ชัน remove() นี่จะใช้เวลา val
  • ลบที่เก็บข้อมูล[val]

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

from collections import defaultdict
class MySet:
   def __init__(self):
      self.buckets = defaultdict(list)

   def add(self, val):
      if not self.exists(val):
         self.buckets[val].append(val)

   def exists(self, val):
      return val in self.buckets[val]

   def remove(self, val):
      del self.buckets[val]

s = MySet()
s.add(10)
s.add(20)
s.add(10)
print(s.exists(10))
s.remove(10)
print(s.exists(10))
print(s.exists(20))

อินพุต

s = MySet()
s.add(10)
s.add(20)
s.add(10)
s.exists(10)
s.remove(10)
s.exists(10)
s.exists(20)

ผลลัพธ์

True
False
True