2001: Cây Hash lý tưởng , và tiền thân 2000 của nó, Tìm kiếm Trie hiệu quả nhanh và không gian , bởi Phil Bagwell : Rõ ràng được sử dụng như một khối xây dựng cơ bản trong thư viện tiêu chuẩn của Clojure.
2001: Một kỹ thuật triển khai đơn giản cho hàng đợi tìm kiếm ưu tiên , bởi Ralf Hinze : một kỹ thuật thực sự đơn giản và đẹp mắt để thực hiện cơ sở hạ tầng quan trọng này (hữu ích, trong thuật toán Dijkstra). Việc thực hiện là đặc biệt đẹp và dễ đọc do sử dụng nhiều "mẫu xem".
2002: Bootstrapping mảng linh hoạt một phía , bởi Ralf Hinze : Tương tự như danh sách truy cập ngẫu nhiên của Okasaki, nhưng chúng có thể được điều chỉnh để thay đổi sự đánh đổi thời gian giữa cons
và lập chỉ mục.
2003: Các công cụ mới có thể catenable và không catenable , bởi Radu Mihaescu và Robert Tarjan : Một tác phẩm mới về một số tác phẩm cũ (của Kaplan và Tarjan) mà Okasaki trích dẫn ( Phiên bản mới nhất của tác phẩm Kaplan & Tarjan đã được xuất bản năm 2000 ). Phiên bản này đơn giản hơn trong một số cách.
2005: đống Maxiphobic ( giấy và mã ), bởi Chris Okasaki : Được trình bày không phải là một cấu trúc mới, hiệu quả hơn, mà là một cách để dạy các hàng đợi ưu tiên.
2006: Hoàn toàn là chức năng tồi tệ nhất Thời gian liên tục Các danh sách được sắp xếp có thể điều chỉnh được , bởi Gerth Stølting Brodal, Christos Makris, và Kostas Tsichlas : Trả lời một câu hỏi nổi bật của Kaplan và Tarjan bằng cách chứng minh cấu trúc với O (lg n) chèn, tìm kiếm và xóa và O (1) concat.
2008: Các thử nghiệm liên tục liên tục để kiểm soát phiên bản hiệu quả , bởi Erik D. Demaine, Stefan Langerman và Eric Price : Trình bày một số cấu trúc dữ liệu để thử điều hướng và sửa đổi hiệu quả gần các lá. Một số là hoàn toàn chức năng. Những người khác thực sự cải thiện cấu trúc dữ liệu lâu dài của Dietz et al. cho các mảng hoàn toàn liên tục (nhưng không liên tục hoặc hoàn toàn chức năng). Bài viết này cũng trình bày các cây cắt liên kết hoàn toàn chức năng , đôi khi được gọi là "cây năng động".
2010: Thuật toán xóa hoàn toàn chức năng mới cho cây đỏ đen , bởi Matt Might : Giống như thuật toán chèn cây đỏ đen của Okasaki, đây không phải là cấu trúc dữ liệu mới hoặc hoạt động mới trên cấu trúc dữ liệu, mà là một cách mới, đơn giản hơn để viết một hoạt động đã biết.
2012: RRB-Plants: Các vectơ bất biến hiệu quả , bởi Phil Bagwell và Tiark Rompf : Một phần mở rộng cho Hash Array Mapped Tries, hỗ trợ nối vector bất biến, chèn và chia thời gian O (lg n), trong khi duy trì chỉ mục, cập nhật và tốc độ chèn của vectơ bất biến ban đầu.
Nhiều phong cách khác của cây tìm kiếm cân bằng . AVL, anh em, cân bằng xếp hạng, cân bằng giới hạn và nhiều cây tìm kiếm cân bằng khác có thể (và đã được) thực hiện hoàn toàn theo chức năng bằng cách sao chép đường dẫn. Có lẽ đáng được đề cập đặc biệt là:
- Cây tìm kiếm thiên vị , của Samuel W. Bent, Daniel D. Sleator và Robert E. Tarjan : Một yếu tố quan trọng trong bài báo năm 2006 của Brodal et al. Và bài báo năm 2008 của Demaine và cộng sự.
Bộ vô hạn thừa nhận tìm kiếm toàn diện nhanh chóng , bởi Martín Escardó : Có lẽ không phải là cấu trúc dữ liệu mỗi se .
Ba thuật toán trên Braun Plants , của Chris Okasaki : Cây Braun cung cấp nhiều hoạt động ngăn xếp trong trường hợp xấu nhất O (lg n). Ràng buộc này bị vượt qua bởi nhiều cấu trúc dữ liệu khác, nhưng cây Braun có mộtcons
thao tác lười biếng trong đối số thứ hai của nó và do đó có thể được sử dụng như các ngăn xếp vô hạn theo một số cách mà các cấu trúc khác không thể.
Heap tối thiểu thoải mái: Hàng đợi ưu tiên hai đầu có thể kết hợp và Heap KD: Hàng đợi ưu tiên đa chiều hiệu quả , bởi Yuzheng Đinh và Mark Allen Weiss : Những điều này xảy ra hoàn toàn là chức năng, mặc dù điều này không được thảo luận trong các bài báo . Tôi không nghĩ rằng giới hạn thời gian đạt được là tốt hơn bất kỳ giới hạn nào có thể đạt được bằng cách sử dụng cây ngón tay (của Hinze & Paterson hoặc Kaplan & Tarjan) làm hàng đợi ưu tiên k chiều, nhưng tôi nghĩ rằng các cấu trúc của Ding & Weiss sử dụng ít không gian hơn .
The Zipper , bởi Gérard Huet : Được sử dụng trong nhiều cấu trúc dữ liệu khác (như cây ngón tay của Hinze & Paterson), đây là một cách để biến cấu trúc dữ liệu từ trong ra ngoài.
Danh sách khác biệt là danh sách có thể thay đổi O (1) với phép biến đổi O (n) thành cons
danh sách thông thường . Chúng rõ ràng đã được biết đến từ thời cổ đại trong cộng đồng Prolog, nơi chúng có phép biến đổi O (1) thành cons
các danh sách thông thường . Phép biến đổi O (1) dường như là không thể trong lập trình chức năng truyền thống, nhưng sự trừu tượng hóa lỗ của Minamide , từ POPL '98, thảo luận về cách cho phép nối O (1) và biến đổi O (1) trong lập trình hàm thuần túy. Không giống như các triển khai lập trình chức năng thông thường của các danh sách khác nhau, dựa trên các lần đóng chức năng, các tóm tắt lỗ về cơ bản là giống nhau (cả về cách sử dụng và cách thực hiện của chúng) như danh sách khác biệt của Prolog. Tuy nhiên, dường như trong nhiều năm, người duy nhất nhận thấy điều này làmột trong những người đánh giá của Minamide .
Từ điển đại diện duy nhất hỗ trợ chèn, cập nhật và tra cứu với hạn chế là không có hai cấu trúc giữ các thành phần giống nhau có thể có hình dạng riêng biệt. Để đưa ra một ví dụ, các danh sách liên kết đơn được sắp xếp được trình bày duy nhất, nhưng cây AVL truyền thống thì không. Tries cũng được đại diện duy nhất. Tarjan và Sundar, trong "Các biểu diễn cây tìm kiếm nhị phân duy nhất và kiểm tra tính bằng nhau của các tập hợp và trình tự" , đã cho thấy một từ điển đại diện duy nhất có chức năng duy nhất hỗ trợ các tìm kiếm trong thời gian logarit và cập nhật theo thời gian . Tuy nhiên, nó sử dụng không gian . Có một đại diện đơn giản sử dụng cây Braun chỉ sử dụng không gian tuyến tính nhưng có thời gian cập nhật làΘ(nlgn)Θ( √O(n−−√)Θ(nlgn)Θ(lg2n)Θ(nlgn−−−−−√) và thời gian tìm kiếm củaΘ(lg2n)
Nhiều thủ tục để làm cho cấu trúc dữ liệu bền bỉ, hoàn toàn bền bỉ hoặc liên tục liên tục : Haim Kaplan đã viết một cuộc khảo sát tuyệt vời về chủ đề này . Xem thêm ở trên công trình của Demaine và cộng sự, người chứng minh một mảng hoàn toàn bền bỉ trong không gian (trong đó là số lượng hoạt động từng được thực hiện trên mảng) và thời gian truy cập dự kiến .m O ( lg lg n )O(m)mO(lglgn)
1989: Cây tìm kiếm ngẫu nhiên của Cecilia R. Aragon và Raimund Seidel : Chúng được thảo luận trong một bối cảnh hoàn toàn chức năng của Guy E. Blelloch và Margaret Reid-Miller trong các hoạt động tập hợp nhanh bằng cách sử dụng Treaps
và bởi Dan Blandford và Guy Blelloch trong Bộ điều hành chức năng với Treaps ( mã). Họ cung cấp tất cả các hoạt động của các đầu ngón tay hoàn toàn chức năng và các cây tìm kiếm thiên vị, nhưng đòi hỏi một nguồn ngẫu nhiên, làm cho chúng không hoàn toàn hoạt động. Điều này cũng có thể làm mất hiệu lực độ phức tạp thời gian của các hoạt động trên các treap, giả sử một kẻ thù có thể điều hành thời gian và lặp lại các hoạt động dài. (Đây là cùng một lý do tại sao các đối số khấu hao bắt buộc không hợp lệ trong một cài đặt liên tục, nhưng nó đòi hỏi một đối thủ với đồng hồ bấm giờ)
1997: Skip-cây, một cấu trúc dữ liệu thay thế cho danh sách Bỏ qua theo cách tiếp cận đồng thời , bởi Xavier Messeguer và Khám phá tính hai mặt giữa Danh sách bỏ qua và Cây tìm kiếm nhị phân , bởi Brian C. Dean và Zachary H. Jones : Danh sách bỏ qua không hoàn toàn chức năng, nhưng chúng có thể được thực hiện chức năng như cây. Giống như treaps, chúng đòi hỏi một nguồn bit ngẫu nhiên. (Có thể lập danh sách bỏ qua xác định, nhưng, sau khi dịch chúng sang cây, tôi nghĩ rằng chúng chỉ là một cách khác để xem 2-3 cây.)
1998: Tất cả các cấu trúc được khấu hao trong cuốn sách của Okasaki! Okasaki đã phát minh ra phương pháp mới này để trộn khấu hao và cấu trúc dữ liệu chức năng, trước đây được cho là không tương thích. Nó phụ thuộc vào việc ghi nhớ, mà, như Kaplan và Tarjan đôi khi đã đề cập, thực sự là một tác dụng phụ. Trong một số trường hợp ( chẳng hạn như PFDS trên SSD vì lý do hiệu suất ), điều này có thể không phù hợp.
1998: Các danh sách có thể thay đổi liên tục đơn giản , bởi Haim Kaplan, Chris Okasaki, và Robert E. Tarjan : Sử dụng sửa đổi dưới mui xe để đưa ra các công cụ có thể thay thế O (1) được khấu hao, trình bày giao diện giống như trước đó (hoàn toàn là chức năng ghi nhớ ) phiên bản xuất hiện trong cuốn sách của Okasaki. Kaplan và Tarjan trước đó đã tạo ra một cấu trúc trường hợp xấu nhất hoàn toàn có chức năng O (1), nhưng về cơ bản thì nó phức tạp hơn.
2007: Như đã đề cập trong một câu trả lời khác trên trang này, các cấu trúc dữ liệu bán liên tục và liên kết tìm kiếm liên tục của Sylvain Conchon và Jean-Christophe Filliâtre
Heap mềm: Hàng đợi ưu tiên gần đúng với tỷ lệ lỗi tối ưu , bởi Bernard Chazelle : Cấu trúc dữ liệu này không sử dụng mảng và do đó đã cám dỗ đầu tiên kênh #haskell IRC và sau đó là người dùng Stack Overflow , nhưng nó bao gồmdelete
trong o (lg n) , thường không thể thực hiện được trong cài đặt chức năng và phân tích khấu hao bắt buộc, không hợp lệ trong cài đặt chức năng thuần túy.
Cây tìm kiếm nhị phân cân bằng với cập nhật ngón tay O (1) . Trong việc tạo cấu trúc dữ liệu liên tục , James R Driscoll, Neil Sarnak, Daniel D. Sleator và Robert E. Tarjan trình bày một phương pháp để nhóm các nút trong một cây đen đỏ để các cập nhật liên tục chỉ cần không gian O (1). Tất cả các công cụ và cây ngón tay hoàn toàn chức năng được thiết kế bởi Tarjan, Kaplan và Mihaescu đều sử dụng một kỹ thuật phân nhóm rất giống nhau để cho phép cập nhật O (1) ở cả hai đầu. Cây AVL để tìm kiếm địa phương bởi Athanasios K. Tsakalidis hoạt động tương tự.
Đống cặp đôi nhanh hơn hoặc giới hạn tốt hơn cho đống cặp đôi : Kể từ khi cuốn sách Okasaki được xuất bản, một số phân tích mới của đống cặp mệnh lệnh đã xuất hiện, trong đó có đống Ghép với O (log log n) giảm chi phí bằng cách Amr Elmasry và Hướng tới một phân tích cuối cùng của Pairing Heaps bởi Seth Pettie. Có thể áp dụng một số công việc này vào đống ghép lười biếng của Okasaki.
Cây ngón tay thiên vị xác định : Trong Danh sách bỏ qua thiên vị, của Amitabha Bagchi, Adam L. Buchsbaum và Michael T. Goodrich, một thiết kế được trình bày cho danh sách bỏ qua thiên vị xác định. Thông qua danh sách bỏ qua / chuyển đổi cây được đề cập ở trên, có thể tạo ra các cây tìm kiếm sai lệch xác định. Các danh sách bỏ qua thiên vị ngón tay được mô tả bởi John Iacono và zgür zkan trong Từ điển hợp nhất có thể có thể trên các cây bỏ qua thiên vị. Một cây ngón tay thiên vị được đề xuất bởi Demaine et al. trong bài viết của họ về các lần thử hoàn toàn chức năng (xem ở trên) như một cách để giảm thời gian - và giới hạn không gian trên cập nhật ngón tay trong các lần thử.
Cây chuỗi B: Cấu trúc dữ liệu mới cho tìm kiếm chuỗi trong bộ nhớ ngoài và các ứng dụng của nó bởi Paolo Ferragina và Roberto Grossi là cấu trúc dữ liệu được nghiên cứu kỹ lưỡng kết hợp lợi ích của cây cố và cây B.