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

ใช้ Trie (ทรีคำนำหน้า) ใน Python


สมมติว่าเราต้องสร้างโครงสร้าง tri โดยมีการดำเนินการพื้นฐานสามอย่าง เช่น เมธอด insert(), search(), startWith() เราสามารถสรุปได้ว่าอินพุตทั้งหมดเป็นตัวพิมพ์เล็ก ตัวอย่างเช่น หากเราเรียกใช้ฟังก์ชันดังนี้ เราจะเห็นผลลัพธ์

  • Trie trie =ใหม่ Trie()
  • trie.insert(“apple”)
  • trie.search("apple") //ค่านี้จะคืนค่าเป็น true
  • trie.search(“app”) // ค่านี้จะคืนค่าเป็นเท็จ
  • trie.startsWith("app") //ค่านี้จะคืนค่าเป็น true
  • trie.insert(“แอพ”)
  • trie.search("app") //ค่านี้จะกลับมาเป็น true

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

  • เริ่มแรกสร้างพจนานุกรมหนึ่งคำที่เรียกว่า child
  • วิธีการแทรกจะเป็นเช่น −
  • ปัจจุบัน :=ลูก
  • สำหรับแต่ละตัวอักษร l ในคำ −
    • ถ้า l ไม่มีอยู่ในปัจจุบัน แสดงว่าปัจจุบัน[l] :=พจนานุกรมใหม่
    • ปัจจุบัน :=ปัจจุบัน[l]
  • ปัจจุบัน[#] =1
  • วิธีการค้นหาจะเป็นเช่น −
  • ปัจจุบัน :=ลูก
  • สำหรับแต่ละตัวอักษร l ในคำ −
    • ถ้า l ไม่มีอยู่ในปัจจุบัน ให้คืนค่าเท็จ
    • ปัจจุบัน :=ปัจจุบัน[l]
  • คืนค่า true ถ้า current[#] =1 มิฉะนั้น false
  • เมธอด beginWith จะเป็น −
  • ปัจจุบัน :=ลูก
  • สำหรับแต่ละตัวอักษร l ในคำ −
    • ถ้า l ไม่มีอยู่ในปัจจุบัน ให้คืนค่าเท็จ
    • ปัจจุบัน :=ปัจจุบัน[l]
  • คืนค่า True

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

ตัวอย่าง

class Trie(object):
   def __init__(self):
      self.child = {}
   def insert(self, word):
      current = self.child
      for l in word:
         if l not in current:
            current[l] = {}
         current = current[l]
      current['#']=1
   def search(self, word):
      current = self.child
      for l in word:
         if l not in current:
            return False
         current = current[l]
      return '#' in current
   def startsWith(self, prefix):
      current = self.child
      for l in prefix:
         if l not in current:
            return False
         current = current[l]
      return True
ob1 = Trie()
ob1.insert("apple")
print(ob1.search("apple"))
print(ob1.search("app"))
print(ob1.startsWith("app"))
ob1.insert("app")
print(ob1.search("app"))

อินพุต

ob1 = Trie()
ob1.insert("apple")
print(ob1.search("apple"))
print(ob1.search("app"))
print(ob1.startsWith("app"))
ob1.insert("app")
print(ob1.search("app"))

ผลลัพธ์

True
False
True
True