Tại sao không lập trình chức năng nghiên cứu cây động?


19

Cây động đóng vai trò quan trọng trong việc giải quyết các vấn đề như dòng chảy mạng, đồ thị động, vấn đề tổ hợp ("Cây năng động trong thực tiễn" của Tarjan và Werneck) và gần đây hợp nhất từ ​​điển ("Từ điển hợp nhất đơn giản" của Adam Karczmarz),

Bằng cây động, tôi đề cập đến định nghĩa được nêu trong bài báo "Cấu trúc dữ liệu cho cây động" của Sleator & Tarjan năm 1983. Vài nỗ lực đã được công bố trong lĩnh vực nghiên cứu lập trình chức năng kể từ đó.

  1. Edward Kmett đã triển khai một phiên bản của cây ST chủ yếu là bản dịch của bản sao C ++, xem Cây cắt liên kết .
  2. Chris Okasaki đã viết một triển khai hạn chế của cây Splay trong cuốn sách nổi tiếng "Cấu trúc dữ liệu chức năng thuần túy" của mình.
  3. Ralf Hinze và Ross Paterson đã giới thiệu một cấu trúc dữ liệu chức năng gọi là 2-3 cây ngón tay nhưng với mục đích hơi khác so với định nghĩa ban đầu về cây động.

Việc thực hiện (và có lẽ là hiệu suất) của cây động được chia theo ba cách tiếp cận:

  1. Tuyến tính hóa, trong đó cây ET (Euler tour) đóng một vai trò lớn. Không tìm thấy một nghiên cứu hoàn toàn chức năng.
  2. Phân rã đường dẫn, trong đó cây ST là lá cờ đầu, vừa tìm thấy phiên bản của Kmett.
  3. Cây co lại, trong đó cây Top, cây topo và cây RC là người chơi. Không tìm thấy một nghiên cứu hoàn toàn chức năng.

Phân tích và thực hiện chức năng hoàn toàn có thể được tìm thấy trên Splay, AVL, cây đỏ đen, nhưng đó không phải là cây động. Cái trước được coi là cấu trúc dữ liệu bóng (còn gọi là ảo hoặc phụ) của cái sau.

Vì vậy, câu hỏi của tôi là:

Các lý do (nhược điểm, điểm yếu) để cộng đồng nghiên cứu Lập trình chức năng không tham gia vào cấu trúc dữ liệu cây động là gì?


14
Tôi không hiểu làm thế nào điều này có thể được trả lời mà không cần thành lập một Ủy ban cộng đồng lập trình chức năng có thẩm quyền để hình thành các ý kiến ​​chính thức. Chúng ta không thể định dạng lại câu hỏi sao cho có câu trả lời nào đó ở đây? Theo như tôi có thể nói, OP chỉ nên đi và thực hiện các cây năng động của mình trong Haskell hoặc bất cứ điều gì và sau đó quay lại đây để báo cáo rằng nó đã được thực hiện sau tất cả.
Andrej Bauer

Cập nhật lên @AndrejBauer: OP đã thực hiện và triển khai các cây năng động của mình trong Haskell: arxiv.org/abs/1908.11105
jbapple

Câu trả lời:


-1

"Trong khoa học máy tính, lập trình chức năng là một mô hình lập trình. Phong cách xây dựng cấu trúc và các yếu tố của các chương trình máy tính coi việc tính toán là đánh giá các chức năng toán học và tránh thay đổi dữ liệu trạng thái và có thể thay đổi." - Wikipedia

"Thay đổi trạng thái và dữ liệu có thể thay đổi" hay nói cách khác là "động".

Vì vậy, câu hỏi của bạn giống như hỏi tại sao bên trái không đúng.


1
Các chương trình chức năng có thể biểu diễn dữ liệu động với cấu trúc dữ liệu liên tục. Câu hỏi này là tại sao sự phát triển của các cấu trúc dữ liệu liên tục cho một vấn đề nhất định chưa được nghiên cứu. Câu hỏi có ý nghĩa.
Tái lập lại
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.