Hãy tưởng tượng một cây đỏ-đen. Có phải luôn luôn có một chuỗi các phần chèn và xóa tạo ra nó không?


41

Hãy giả sử định nghĩa sau đây về cây đỏ-đen:

  1. Nó là một cây tìm kiếm nhị phân.
  2. Mỗi nút được tô màu đỏ hoặc đen. Rễ có màu đen.
  3. Hai nút được kết nối bởi một cạnh không thể có màu đỏ cùng một lúc.
  4. Đây phải là một định nghĩa tốt về một lá NIL, như trên wiki. Lá NIL có màu đen.
  5. Một đường dẫn từ gốc đến bất kỳ lá NIL nào có cùng số nút đen.


Câu hỏi

Giả sử rằng bạn đã triển khai insertvà các deletethao tác cho cây đỏ-đen. Bây giờ, nếu bạn được cung cấp một cây đỏ đen hợp lệ, luôn có một chuỗi các hoạt động insertdeletecấu trúc nó?


Động lực

Câu hỏi này được thúc đẩy bởi câu hỏi này và bởi các cuộc thảo luận từ câu hỏi này .

Cá nhân, tôi tin rằng nếu bạn tưởng tượng một cây đen đỏ hợp lệ chỉ bao gồm các nút đen (ngụ ý rằng bạn đang tưởng tượng một cây cân bằng hoàn hảo), thì có một chuỗi insertvà các deletehoạt động xây dựng nó. Tuy nhiên,

  1. Tôi không biết làm thế nào để chứng minh chính xác điều đó
  2. Tôi cũng quan tâm đến trường hợp tổng quát hơn

Câu hỏi của bạn nghe có vẻ hơi tròn ... bất kỳ tập hợp thao tác chèn và xóa nào cũng sẽ tạo ra một cây đỏ-đen ... theo nghĩa đen là bất cứ điều gì, vì đỏ-đen chỉ là một định nghĩa. Là câu hỏi của bạn giới hạn trong một cây đen hoàn toàn?
JOX

2
Không, tôi nghĩ bạn hiểu lầm. Tất nhiên, bất kỳ tập hợp chèn và xóa nào cũng xây dựng một số cây đỏ đen. Câu hỏi là đây: có cây nào phù hợp với định nghĩa có thể xây dựng được bằng một số chuỗi chèn và xóa không? Nếu bạn được cung cấp một số cây, bạn có thể tạo lại một chuỗi các phần chèn và xóa không?
alisianoi

2
insertdelete(h+2)2h1h2h+11h2h1h

1
@AntonTrunov cảm ơn bạn, tôi sắp xếp để hiểu điều đó. Thế còn trường hợp của Cây Đỏ-Đen nói chung thì sao? Bạn nghĩ gì, có thể xây dựng bất kỳ Cây Đỏ-Đen nào với insertdeletehoạt động không?
alisianoi

2
a) Câu trả lời sẽ phụ thuộc vào việc thực hiện chính xác insertdelete; có thể có một số cách để thực hiện các hoạt động này. b) Vì cây RB thực chất là cây B bậc 4, nên người ta có thể nhìn vào đó để tìm cảm hứng. Các chi tiết có thể chứng minh sự khó khăn vì ánh xạ từ RB đến B (và / hoặc ngược) không phải là duy nhất.
Raphael

Câu trả lời:


2

Các hoạt động chèn và xóa trong cây đỏ đen bao gồm sự cân bằng cần thiết để duy trì các thuộc tính đỏ-đen.

Vấn đề với các cây đen đỏ không nghiêng (trái hoặc phải) là có nhiều cách để khôi phục màu đỏ đen sau khi xóa hoặc chèn cơ bản.
Nó không phải là chèn hoặc xóa làm biến đổi cây, mà là sự cân bằng lại và xoay xảy ra sau đó để bảo tồn / khôi phục màu đen đỏ của cây.

Mô tả cơ bản của cây đỏ đen không quy định tuyến đường nào có thể đi.
Có thể không thể tìm ra cách tái cấu trúc chính xác một cây đen đỏ nhất định, bởi vì việc tái cân bằng không cần phải xác định.

Điều này đã được 'giải quyết' với những cây đen đỏ nghiêng trái.
Chỉ có một cách cân bằng được thực hiện. Vì vậy, bất kỳ cây đen đỏ nghiêng nào có thể được xây dựng lại bằng cách sử dụng chèn và xóa, bởi vì việc cân bằng / xoay được thực hiện theo một cách xác định cụ thể.

Điều này không có nghĩa là cây RB nghiêng trái tốt hơn hoặc hiệu quả hơn, những gì chúng đạt được bằng một mặt bằng cách sử dụng các quy tắc cân bằng xác định, mặt khác chúng mất đi bởi mã cân bằng phức tạp hơn.


(h+2)2h1h2h+11h2h1h nhân lớp màu đỏ thấp nhất lên cây cho đến khi chạm tới gốc.

Tôi nghĩ rằng một thuật toán cân bằng hoàn chỉnh như Day-Stout-Warren sẽ hiệu quả hơn.


1
Sử dụng các hoạt động insertdeletetừ sách CLRS, bạn có thể xây dựng cây RB hợp lệ chỉ bao gồm các nút đen . Mẹo nhỏ là chèn nhiều nút hơn mức cần thiết và sau đó xóa những nút quá mức. Thuật toán sẽ loại bỏ các nút màu đỏ.
Anton Trunov

@AntonTrunov, bạn có một liên kết cho thuật toán đó không, sẽ rất tuyệt nếu đưa nó vào câu trả lời. Tôi không thể tìm thấy nó bằng cách sử dụng google-fu của tôi.
Johan

1
Thật không may, tôi không có một liên kết. Tôi đã cố gắng trả lời câu hỏi vào thời điểm đó và đưa ra một thuật toán cho trường hợp đặc biệt của tất cả các cây RB đen. Tôi sắp xếp mô tả nó trong bình luận đó, nhưng không cung cấp bằng chứng.
Anton Trunov

Bạn có ý gì khi nói "Điều này đã được" giải quyết "với những cây đen đỏ nghiêng trái." Ngay cả một cây đen đỏ nghiêng trái cũng có nhiều cách để lưu trữ các mặt hàng giống nhau.
user239558
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.