2009-09-08 32 views
24

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?

+12

Đại diện OP của 666 xác nhận Cây AVL là Evil – SwDevMan81

+1

Tôi không cho rằng chúng tôi có thể upvote câu hỏi này sau đó? ;) –

Trả lời

19

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ư.

+4

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

+5

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. –

+3

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. –

8

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.

4

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.

+6

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

+2

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. –

+5

:: 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

2

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.

+0

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

Các vấn đề liên quan