Các câu hỏi nổi bật trong cấu trúc dữ liệu chức năng thuần túy là gì?


51

Câu hỏi này được lấy cảm hứng từ một câu hỏi khác về những gì mới trong PFDS kể từ khi xuất bản cuốn sách của Okasaki năm 1998 .

Tôi sẽ bắt đầu với hai câu hỏi tôi có:

  • Có một cấu trúc dữ liệu tập hợp chức năng hoàn toàn tiếp cận tốc độ của bảng băm không? Đã thử chưa có.
  • Có những cây ngón tay hoàn toàn có chức năng với phần bổ sung O (1) không? Tốt nhất cho đến nay là O (lg lg n), được phát minh bởi Kaplan và Tarjan.

Những vấn đề cấu trúc dữ liệu chức năng thuần túy khác là mở?


Tôi hiểu ý bạn là cố gắng như trong cây băm chứ không phải là từ điển tổng quát hơn với các khóa là trình tự? FWIW, tôi nghĩ rằng không thể tiếp cận bảng băm cũ tốt ở đây.
Jon Harrop

Câu trả lời:


19

Tôi sẽ giải thích câu hỏi một cách tự do. Đối với cấu trúc dữ liệu theo kiểu Okasaki, ghi nhớ là một dạng đột biến ngầm có tác dụng phụ đối với thời gian chạy. Do đó, tôi sẽ đặt câu hỏi liên quan đến các cấu trúc dữ liệu liên tục theo nghĩa chặt chẽ hơn là các cấu trúc dữ liệu với việc thực hiện chức năng thuần túy, là một tập hợp con trước đây. Theo tôi, nghiêm ngặt, ý tôi là bạn có thể truy cập các phiên bản cũ hơn của cấu trúc dữ liệu mà không bị phạt, cây phiên bản có thể phân nhánh tùy ý, v.v.

Trong bối cảnh đó, tôi coi UNION-FIND dai dẳng là một vấn đề mở quan trọng. Có bài Conchon-Filliâtre đã được đề cập trong chủ đề khác. Một nhà bình luận đã đưa ra một vấn đề với cái gọi là mảng liên tục của họ: đó thực sự chỉ là bán kiên trì. Nhưng giả sử bạn thay thế nó bằng một hàm băm hoặc một số mảng thực sự bền bỉ khác hoạt động tốt hơn trong trường hợp xấu nhất (và có thể nói là trung bình) nhưng tồi tệ hơn trong trường hợp tốt nhất. Điều đó vẫn để lại một vấn đề quan trọng mở:

Bài viết đưa ra một bằng chứng chính thức về tính đúng đắn trong Coq. Nhưng họ không giải quyết được sự phức tạp được khấu hao cả chính thức hay không chính thức. Tôi không rõ lắm về sự đột biến phức tạp phía sau hậu trường dẫn đến sự phức tạp được khấu hao dự kiến ​​trong mọi trường hợp. Khi tôi nghĩ về nó lần cuối, tôi cảm thấy hơi tự tin rằng tôi có thể xây dựng một ví dụ mẫu nếu tôi nỗ lực vào nó. Ngay cả khi tôi sai về phần cuối cùng đó, việc thiếu một phân tích thích hợp là một khoảng cách lớn; rõ ràng là phân tích khấu hao cổ điển của Trajan về UNION-FIND không chuyển trực tiếp.


5
Một ứng cử viên cho các mảng hoàn toàn liên tục (nhưng không liên tục) được trình bày trong Các thử nghiệm liên tục liên tục để kiểm soát phiên bản hiệu quả . Các tác giả tuyên bố làm chậm O (lg lg n), đánh bại sự chậm lại O (lg lg m) của Dietz et al, trong đó m là số lượng các hoạt động đã được thực hiện trên mảng.
jbapple

1
Tôi cũng sẽ nói thêm rằng, mặc dù các cấu trúc khấu hao lười biếng của Okasaki thường đơn giản hơn nhiều so với các giải pháp thay thế, tôi không biết bất kỳ cấu trúc dữ liệu nào có thể được thực hiện theo cách đó cũng không thể được thực hiện (với cùng giới hạn, nhưng trường hợp xấu nhất) một cách thực sự thuần túy chức năng.
jbapple

12

Những vấn đề cấu trúc dữ liệu chức năng thuần túy khác là mở?

Đây là một:

Tương đương chức năng hoàn toàn của một bảng băm yếu là gì?


15
ừm ... OP đã hỏi những câu hỏi chưa được trả lời, vì vậy điều này sẽ đủ điều kiện là câu trả lời tiềm năng cho câu hỏi của OP.
Jason S

6
Được rồi, tôi sẽ cắn. Bảng băm yếu là gì?
Jeffε

4
Đó là bảng băm cho phép các phần tử của nó được thu gom rác nếu chỉ có nó (và các bản đồ yếu khác) có chứa các tham chiếu đến nó.
Havvy

3
@JonHarrop: thật dễ dàng để chứng minh rằng một phiên bản thuần túy của một tài liệu tham khảo yếu là không thể, vì các tài liệu tham khảo yếu làm cho ngữ nghĩa của ngôn ngữ không có tính xác định và ngôn ngữ chức năng thuần túy là xác định. Nếu bạn đánh dấu thêm tính không đặc biệt trong loại thì việc thực hiện thông thường sẽ hoạt động. Bạn cần các loại phụ thuộc (để chứng minh rằng việc triển khai đưa ra các câu trả lời giống nhau bất kể nội dung của tài liệu tham khảo) nếu bạn muốn che dấu hiệu quả một cách an toàn.
Neel Krishnaswami

5
@NeelKrishnaswami, tôi không nghĩ đó là trường hợp. Bạn có thể tạo các cấu trúc dữ liệu yếu không tạo ra tính không xác định, chẳng hạn như bảng yếu không hỗ trợ liệt kê (hoặc đếm). Xem wiki.ecmascript.org/doku.php?id=harmony:weak_maps để biết ví dụ.
Sam Tobin-Hochstadt
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.