Không có lý do đặc biệt nào, với kiến thức của tôi - tôi đoán lý do là vì rất nhiều ứng dụng được điều chỉnh cao dict
và set
triển khai (là bảng băm) hoạt động tốt. Chúng đủ tốt trong hầu hết các trường hợp. Có những tình huống chắc chắn mà bạn cần các đặc tính hiệu suất của cây tìm kiếm nhị phân cân bằng (giống như truyền tải theo thứ tự dựa trên khóa - thay vì thứ tự bổ sung), nhưng chúng đủ xa con đường bị đánh đập khiến mọi người hài lòng với việc lấy gói của bên thứ ba trong trường hợp đó.
Tôi đã có trải nghiệm tốt khi sử dụng gói bintrees trên PyPI. Điều này có triển khai thực hiện các cây nhị phân không cân bằng, AVL và màu đỏ-đen, trong cả Python thuần túy và các phần mở rộng được viết trong Cython.
Tôi nghĩ rằng phần còn lại của lý do cơ bản là tai nạn lịch sử. Nếu người viết bintrees đã vận động để đưa nó vào stdlib, và sẵn sàng đưa ra những ràng buộc áp đặt cho việc bảo trì và giải phóng, nó có thể sẽ đi vào. (Mặc dù sự phụ thuộc của Cython sẽ gây ra vấn đề, tôi đoán là .)
thuật toán phức tạp:
đối với các bảng băm (như dicts hoặc bộ), chèn và tra cứu là O (1), trong khi đối với một cây cân bằng này là O (log (n)). Trong quá trình truyền các khóa là O (n) trong một cây, nhưng để làm điều tương tự với bảng băm, bạn cần phải sắp xếp các khóa đầu tiên, vì vậy nó là O (n * log (n)). Khi bạn chọn loại cấu trúc dữ liệu nào để sử dụng, bạn cần phải suy nghĩ về những hoạt động bạn sẽ sử dụng và chọn sự cân bằng có ý nghĩa nhất trong ứng dụng của bạn.
Không có thư viện nào trong thư viện chuẩn. Tại sao một người không được bao gồm là không thể trả lời. Phần còn lại của câu hỏi của bạn là một yêu cầu cho các tài nguyên bên ngoài, đó là chủ đề ngoài chủ đề. –
Gần-dupe của http://stackoverflow.com/questions/2298165/pythons-standard-library-is-there-a-module-for-balanced-binary-tree –