2013-07-08 31 views
8

Đây là cuộc tập trận 2,65 của SICP:Tôi có hiểu nhầm ý nghĩa của bài tập 2.65 của SICP không?

Sử dụng kết quả của bài tập 2.63 và 2.64 cho Θ (n) triển khai của công đoàn thiết lập và ngã tư-thiết cho bộ thực hiện như (cân bằng) cây nhị phân.

Trong chương "Đặt làm danh sách thứ tự" và thực hiện 2.62, chúng tôi đã có tập hợp công đoàn và giao điểm cho các danh sách có thứ tự. Tôi đã tìm kiếm trên Internet, câu trả lời của 2.65 quá đơn giản để chấp nhận, họ chỉ chuyển đổi cây nhị phân thành các danh sách và vẫn sử dụng tập hợp công đoàn và giao điểm cho các danh sách có thứ tự.

Theo ý kiến ​​của tôi, chúng ta cần chuyển đổi các bộ thành cây nhị phân và viết lại tập hợp liên hiệp và tập hợp giao điểm cho cây nhị phân.

Vì vậy, tôi có hiểu nhầm ý nghĩa của bài tập 2.65 của SICP không? Hay có câu trả lời hay không?

Trả lời

3

Câu trả lời "đơn giản" là chính xác trong trường hợp này: bài tập được giải quyết bằng cách chuyển đổi cây thành danh sách (trên thực tế, đã đặt hàng danh sách vì chúng tôi đang thực hiện sắp xếp trật tự cây), sau đó sử dụng đơn đặt hàng- thiết lập các thủ tục, và cuối cùng chuyển đổi các tập kết quả trở lại thành cây. Tại sao điều này lại đúng? vì quy trình được mô tả đạt được độ phức tạp O(n) được yêu cầu bằng các quy trình đã tồn tại - không cần phải phát minh lại bánh xe!

Mặc dù câu trả lời "trực tiếp" có thể được viết bằng cách thao tác cây, nhưng nó sẽ rất phức tạp, và sẽ rất khó (nếu không thể!) Để thực hiện trong O(n) mà không sử dụng thao tác đột biến - trong cuốn sách, chúng tôi chưa sử dụng set!, set-car! hoặc set-cdr!.

+1

Ya đó là những gì tôi đã nhận là tốt, chủ yếu là do sự ràng buộc cây kết quả phải được cân bằng. Nếu bạn đang sử dụng một cây tự cân bằng như màu đỏ-đen nó có thể không phải là lớn của thỏa thuận, nhưng cách dễ nhất để xây dựng một cây cân bằng là bắt đầu từ một danh sách theo thứ tự. – WorBlux

2

Bạn nói đúng, bạn có thể sử dụng các ví dụ trước đó từ văn bản làm hướng dẫn để viết các triển khai hiệu quả của union-setintersection-set cho cây nhị phân cân bằng. Tuy nhiên, văn bản cho bạn biết rõ ràng để sử dụng kết quả từ hai bài tập trước, vì vậy nó hướng dẫn bạn hướng tới một giải pháp cụ thể. Giải pháp đó (chuyển đổi cây nhị phân thành một danh sách để giảm vấn đề với một giải pháp đã được giải quyết) đã là O (n), đó là thứ tự tốt nhất mà bạn có thể gặp phải với vấn đề này.