Tôi đã đọc số article từ Steve Yegge về những người độc thân. Trong đó, ông đề cập đến giáo viên của mình nói với ông rằng AVL Trees là điều xấu xa. Chỉ có cây đỏ và đen là giải pháp tốt hơn?Có phải AVL Trees Evil?
Trả lời
Cái ác từ quan điểm gì?
Giống như mọi khi: không có công cụ không tốt, chỉ có những thợ thủ công xấu.
Trong bộ nhớ của mình, cây AVL có chèn/xóa chậm hơn nhưng truy xuất nhanh hơn Đỏ/đen. Chủ yếu là do thuật toán số dư.
Chính xác. Nếu bạn cần một bản đồ ghi nhiều lần, nhiều cây AVL khó đánh bại. Theo tôi, chúng cũng dễ thực hiện một cách chính xác hơn. – erickson
Bản đồ ghi một lần-đọc nhiều hơn giống như một mảng đã sắp xếp cho tôi ... Bản đồ ghi ít khi đọc nhiều hơn một cây AVL. Tuy nhiên ngay cả trong những trường hợp đó chắc chắn phải xem xét một mảng được sắp xếp. Các chi phí liên tục thấp hơn đáng kể, vì vậy bạn sẽ cần nhiều mục trước khi một cây AVL tốt hơn cả cây đỏ/đen và một mảng được sắp xếp. –
Cây AVL tuy nhiên rất dễ hiểu. IME, cây RB không được hiểu bởi người triển khai của chúng - chúng chỉ tuân theo các quy tắc; họ không thực sự hiểu được những gì đang diễn ra, theo khái niệm. –
Không, cây AVL chắc chắn không phải là điều ác trong mọi khía cạnh. Họ là một cấu trúc cây tự cân bằng hoàn toàn hợp lệ. Chúng có các đặc tính hiệu suất khác nhau so với cây Đỏ-Đen chắc chắn và điển hình là những khác biệt này dẫn đến việc người ta chọn một cây đỏ đen trên cây AVL. Nhưng điều này không làm cho họ xấu xa.
Tôi chắc chắn rằng cây AVL là cái ác giống như cách GOTO là xấu hoặc BUBBLE SORT là điều xấu.
Thuật toán không phải là điều ác, nhưng các thuật toán cũng không nhảy lên và xuống để cho bạn biết khi nào chúng cũng phù hợp.
Goto không phải là một thuật toán và thực sự không phải là một so sánh hợp pháp. – Imagist
Vấn đề với phân loại bong bóng là không có sự đánh đổi thực sự làm cho nó vượt trội hơn. Bạn không thể nói điều đó cho cây AVL. –
:: snark :: Bubble sắp xếp sử dụng rất ít mã, và dễ dàng nhận ra trong một máy Turing truyền thống. – dmckee
Splay Trees mát hơn nhiều. :)
Không, chúng không phải là điều xấu, chỉ có một chút khéo léo để lập trình.
AVL Cây http://www.eternallyconfuzzled.com/tuts/datastructures/jsw_tut_avl.aspx
Đỏ Đen liên kết cây từ đó quá.
Dưới đây là rất nhiều thông tin về sự khác biệt giữa Red-Black và AVL-Trees:
http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=22948
và một bài báo so sánh các cấu trúc khác nhau:
http://www.stanford.edu/~blp/papers/libavl.pdf
Nói tóm lại - AVL nhanh hơn để tìm kiếm, Red-Black nhanh hơn để chèn.
Liên kết sương mù là xấu. Nội dung là gây hiểu nhầm. Cây AVL không yêu cầu phép quay O (log n) để cân bằng lại. Tối đa 2. – Jesse
- 1. Có nhiều Inheritance Evil?
- 2. Trees trong Haskell
- 3. Binary Search Trees
- 4. Haskell Bản đồ cho Trees
- 5. Cây tìm kiếm nhị phân trên cây AVL
- 6. cân bằng cây AVL (C++)
- 7. Đơn vị kiểm tra Biểu Trees
- 8. Thực hành truyền đối tượng mẹ làm tham chiếu cho tương tác đối tượng cha mẹ có phải là Evil?
- 9. Git - Broken Links, Missing & Dangling Trees
- 10. Khi nào sử dụng Kd-Trees?
- 11. Sự khác biệt giữa Tries và Trees?
- 12. .NET được xây dựng trong AVL-Tree?
- 13. trọng lượng không cân bằng cây AVL
- 14. Cân bằng một cây nhị phân (AVL)
- 15. Ghép/Kết hợp/Nối hai cây AVL
- 16. Tại sao một ExecutorService được tạo thông qua newCachedThreadPool evil?
- 17. Rebinding: b và: e in evil-normal-state-map
- 18. Xử lý các khóa trùng lặp trong một cây AVL
- 19. Ví dụ của Wikipedia về cây AVL không cân bằng thực sự không cân bằng như thế nào?
- 20. Cách tạo cây AVL bị lệch càng tốt?
- 21. Sự khác biệt giữa cây đỏ-đen và cây AVL
- 22. Sự khác biệt giữa cây AVL và cây trồng
- 23. Làm thế nào để thiết lập Evil Bit trên lưu lượng gửi đi
- 24. Sự khác biệt giữa Viper, Vimpulse và Evil cho Emacs là gì?
- 25. Whats một trường hợp sử dụng tốt cho .net 4.0 Expression Trees?
- 26. Do btrees và b + trees chỉ lưu trữ dữ liệu ở các lá?
- 27. Tại sao gói này thực thi gói AVL thành con trỏ trong triển khai 64 bit nhưng không phải 32 bit?
- 28. Khi nào nên chọn cây RB, cây B hoặc cây AVL?
- 29. Giá trị "trái" và "phải" có ý nghĩa gì trong các tệp xml tầng tầng?
- 30. Tại sao triển khai dựa trên cây đỏ đen cho TreeMap java?
Đại diện OP của 666 xác nhận Cây AVL là Evil – SwDevMan81
Tôi không cho rằng chúng tôi có thể upvote câu hỏi này sau đó? ;) –