Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk melaksanakan pepohon carian binari dalam Python

Bagaimana untuk melaksanakan pepohon carian binari dalam Python

WBOY
WBOYasal
2023-06-10 08:57:131347semak imbas

Binary Search Tree (BST) ialah algoritma carian berdasarkan pepohon binari. Cirinya ialah nilai dalam subpokok kiri setiap nod dalam pokok adalah lebih kecil daripada nilai nod ini, manakala nilai dalam subpohon kanan lebih besar daripada nilai nod ini. Oleh itu, kerumitan masa operasi carian dan sisipan BST ialah O(logN).

Kaedah melaksanakan pepohon carian binari dalam Python agak mudah, kerana Python mempunyai dua struktur data terbina dalam, senarai dan kamus, yang kedua-duanya boleh digunakan untuk melaksanakan pepohon binari. Di sini kami akan menerangkan cara melaksanakan pepohon carian binari menggunakan senarai.

Pertama, kita perlu mentakrifkan kelas Nod untuk mewakili nilai, subpokok kiri dan subpokok kanan setiap nod:

class Node:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

Seterusnya, kita boleh menentukan kelas Pokok carian binari, yang mengandungi dua kaedah: masukkan dan cari. Dalam kaedah sisipan, kita mulakan dari nod akar dan bandingkan nilai nod satu demi satu Jika nilai yang baru dimasukkan adalah lebih kecil daripada nilai nod semasa, teruskan mencari di subpohon kiri, jika tidak, cari. dalam subpokok kanan. Apabila subpokok kiri (atau kanan) nod didapati kosong, ini bermakna nod yang akan dimasukkan harus diletakkan pada kedudukan ini.

class BinarySearchTree:
    def __init__(self):
        self.root = None
    
    def insert(self, value):
        new_node = Node(value)
        if self.root is None:
            self.root = new_node
        else:
            current_node = self.root
            while True:
                if value <= current_node.value:
                    if current_node.left is None:
                        current_node.left = new_node
                        break
                    else:
                        current_node = current_node.left
                else:
                    if current_node.right is None:
                        current_node.right = new_node
                        break
                    else:
                        current_node = current_node.right
    
    def search(self, value):
        current_node = self.root
        while current_node is not None:
            if value == current_node.value:
                return True
            elif value < current_node.value:
                current_node = current_node.left
            else:
                current_node = current_node.right
        return False

Kini, kita boleh mencipta pepohon dan memasukkan berbilang nod, dan kemudian menguji fungsi carian:

bst = BinarySearchTree()
bst.insert(9)
bst.insert(3)
bst.insert(12)
bst.insert(1)
bst.insert(4)
bst.insert(10)
bst.insert(15)

print(bst.search(4))  # True
print(bst.search(7))  # False

Seperti yang anda lihat, untuk pepohon carian binari ini, apabila kita mencari 4 , mengembalikan Benar; dan apabila kita mencari 7, ia mengembalikan Salah, menunjukkan bahawa 7 tiada dalam pokok.

Apabila melaksanakan pepohon carian binari, anda perlu memberi perhatian kepada beberapa isu. Pertama, kerumitan masa operasi penyisipan dan carian bergantung pada ketinggian pokok, jadi dalam operasi praktikal, adalah sangat penting untuk mengekalkan ketinggian pokok sekecil mungkin. Kedua, untuk set data yang besar, pepohon carian binari mungkin menjadi tidak seimbang (iaitu, menjadi lebih seperti senarai daripada pepohon), menghasilkan carian yang lebih perlahan, jadi algoritma yang lebih maju seperti pepohon carian binari seimbang diperlukan.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pepohon carian binari dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn