Що нового в чисто функціональних структурах даних після Окасакі?


563

З моменту книги Кріса Окасакі 1998 року "Чисто функціональні структури даних" я не бачив занадто багато нових захоплюючих суто функціональних структур даних; Я можу назвати лише декілька:

  • IntMap (також винайдений Окасакі в 1998 році, але не присутній у цій книзі)
  • Пальчикові дерева (та їх узагальнення над моноїдами)

Існують також деякі цікаві способи реалізації вже відомих структур даних, наприклад використання "вкладених типів" або "узагальнених алгебраїчних типів даних" для забезпечення деревних інваріантів.

Які ще нові ідеї з'явилися з 1998 року в цій галузі?


20
Приємне запитання. У мене просто студент запитав мене про це, і не знав відповіді.
Суреш Венкат

Тут це нормально, але ви можете отримати кращі відповіді щодо переповнення стека. Якщо ви запитаєте там, будьте впевнені та посилайтесь на дискусію тут.
Чарльз Стюарт

3
Ну, Haskell Reddit побачив це, тож звідти також надійдуть хороші відповіді, але відмінне запитання. Перебуваючи на півдорозі через книгу Окасакі, мені теж було цікаво, що я думаю. +1
Роберт Массайолі


Відповіді:


553

Нові суто функціональні структури даних, опубліковані з 1998 року:

Відомий у 1997 році, але не обговорювався в книзі Окасакі:

  • Багато інших стилів збалансованого дерева пошуку . AVL, брат, врівноважений, обмежений баланс та багато інших збалансованих дерев пошуку можуть бути (і були реалізовані) виключно функціонально шляхом копіювання контуру. Можливо, заслуговують особливої ​​згадки:

    • Нарізані дерева пошуку Семюеля В. Бента, Даніеля Д. Слейтора та Роберта Е. Тарджана : ключовий елемент у праці Бродаля та ін. За 2006 рік та статті Demaine et al. У 2008 році.
  • Нескінченні набори, які допускають швидкий вичерпний пошук , Мартін Ескардо : Можливо, сама по собі структура даних.

  • Кріс Окасакі : три алгоритми щодо дерев Брауна : дерева Брауна пропонують багато операцій стеку в гіршому випадку O (lg n). Ця межа перевершується багатьма іншими структурами даних, але дерева Браунаconsв другому аргументімаютьледачу операцію, і тому вони можуть використовуватися як нескінченні стеки певними способами, які інші структури не можуть.

  • Розслаблена купа min-max: Об'єднана черговість з двостороннім пріоритетом та KD heap: Ефективна багатовимірна черговість пріоритетів , Юженг Дін та Марк Аллен Вайс : Вони бувають чисто функціональними, хоча це не обговорюється в документах . Я не думаю, що досягнуті межі часу є кращими, ніж ті, що можна досягти, використовуючи пальчикові дерева (Гінзе та Патерсон або Каплан і Тарджан) як чергові чергові черги, але я думаю, що структури Дінг і Вайс використовують менше місця .

  • Застібка-блискавка , Джерард Хует : Використовується у багатьох інших структурах даних (таких як пальчикові дерева Гінза та Патерсона), це спосіб перетворення структури даних всередину.

  • Списки відмінностей - це O (1) списки, що підлягають каналу, з перетворенням O (n) у звичайні consсписки. Вони, очевидно, були відомі ще з античності в громаді Пролога, де вони перетворилися на O (1) у звичайні consсписки. Трансформація O (1) здається неможливою в традиційному функціональному програмуванні, але абстракція отворів Мінаміде з POPL '98 обговорює спосіб, який дозволяє O (1) додавати і O (1) перетворення в рамках чистого функціонального програмування. На відміну від звичайних реалізацій функціонального програмування різницьких списків, які базуються на закритті функцій, абстрагування отворів по суті є тими ж (як у їх використанні, так і в їх реалізації), як і у списках відмінностей Prolog. Однак здається, що роками єдиною людиною, яка це помітила, булоодин із рецензентів Minamide .

  • Унікально представлені словники підтримують вставлення, оновлення та пошук з обмеженням, що жодна дві структури, що містять однакові елементи, не можуть мати виразних форм. Для прикладу, відсортовані спільно окремі списки представлені однозначно, але традиційні дерева AVL - ні. Спробу також унікально представлені. Тарджан і Сундар у "Унікальних представленнях бінарних дерев пошуку та тестуванні рівності множин та послідовностей" показали суто функціональний унікально представлений словник, який підтримує пошук у логарифмічному часі та оновлення в час. Однак він використовує простір . Існує просте подання з використанням дерев Braun, яке використовує лише лінійний простір, але має час оновленняO(n)Θ(nlgn)Θ(nlgn) та час пошукуΘ(lg2n)

Переважно функціональні структури даних до, під час і після книги Окасакі:

  • Багато процедур для того, щоб зробити структуру даних стійкою, повністю стійкою або конфліктно стійкою : Хаїм Каплан написав чудове опитування на цю тему . Дивіться також вище роботи Demaine та ін., Які демонструють повністю стійкий масив у просторі (де - кількість операцій, коли-небудь виконаних на масиві) та очікуваний час доступу.O(m)mO(lglgn)

  • 1989: Рандомізовані дерева пошуку Сесілії Р. Арагон та Раймунда Сейделя : Вони обговорювались в чисто функціональній обстановці Гаєм Е. Блеллохом та Маргарет Рейд-Міллер у швидких операціях із застосуванням трапез, а також Деном Бландфордом та Гаєм Блеллохом у функціональних операціях з Треки ( код). Вони забезпечують усі операції чисто функціональних пальців пальців і упереджених дерев пошуку, але потребують джерела випадковості, роблячи їх не чисто функціональними. Це також може визнати недійсною складність часу операцій над треупами, припускаючи супротивника, який може проводити операції та повторювати тривалі. (Це та сама причина, чому аргументи імперативної амортизації не є дійсними в стійких умовах, але для цього потрібен супротивник із секундоміром)

  • 1997: Пропускні дерева, альтернативна структура даних для пропускних списків за паралельним підходом , Ксав'є Мессгегером та вивчення подвійності між пропускними списками та двійковими деревами пошуку , Брайан К. Дін та Захарі Х. Джонс : Пропуск списків не є суто функціональні, але вони можуть бути реалізовані функціонально як дерева. Як і треї, вони вимагають джерела випадкових бітів. (Можна зробити пропускні списки детермінованими, але, переклавши їх на дерево, я думаю, що вони є лише іншим способом перегляду 2-3 дерев.)

  • 1998: Усі амортизовані структури в книзі Окасакі! Окасакі винайшов цей новий метод змішування амортизації та функціональних структур даних, які раніше вважалися несумісними. Це залежить від запам'ятовування, яке, як згадували Каплан та Тарджан, насправді є побічним ефектом. У деяких випадках ( наприклад, PFDS на SSD з причин продуктивності ), це може бути недоцільним.

  • 1998: Прості конфліктно стійкі списки каналів , від Хаїма Каплана, Кріса Окасакі та Роберта Е. Тарджана : Використовує модифікацію під кришкою для надання амортизованих O (1) декабельних деків, представляючи той самий інтерфейс, що і раніше (суто функціональний, але з запам'ятовуванням ) версія, що міститься в книзі Окасакі. Раніше Каплан і Тарджан створили суто функціональну O (1) найгіршу структуру, але вона суттєво складніша.

  • 2007 рік: Як було сказано в іншій відповіді на цій сторінці, напівстійкі структури даних та стійкі знахідки об'єднання від Sylvain Conchon та Jean-Christophe Filliâtre

Методи перевірки функціональних структур даних до, під час і після книги Окасакі:

Імперативні структури даних або аналізи, про які не йдеться в книзі Окасакі, але пов'язані з суто функціональними структурами даних:


5
Я не пам’ятаю, щоб встановити прапорець «Вікі спільноти» на цю відповідь. Чи можна скасувати це?
jbapple

7
@jbapple: після певної кількості редагувань всі публікації стають вікі спільноти. Це вражаюче ретельний огляд там. Дякую.
Філ Міллер

29
Чудовий список! Що змушує мене побажати, щоб Окасакі видав друге видання.
Раду ГРИГо

4
Зауважте, що Ізабель / HOL може генерувати код для SML, OCaml, Haskell, Scala. Інструмент Haskabelle також може імпортувати Haskell в Isabelle / HOL.
Макарій

2
Термінологія "вилучення програм" є однією з Coq: ви берете конструктивний доказ і робите з нього виконувану програму, знімаючи деякі речі. У Isabelle це називається "генерація коду" і працює по-різному, використовуючи специфікації HOL як псевдо-код, а не докази. За словами Бергхофера, доказ видобутку в Ізабелі / HOL працює як Coq, але в наші дні використовується рідко.
Макарій

63

До вже зроблених відмінних нот додамо блискавки .

Хует, Джерард. Журнал функціонального програмування «Функціональна перлина: блискавка» 7 (5): 549–554, вересень 1997 року.

Вікіпедія: Zipper (структура даних)


4
Блискавки - ДУЖЕ. У багатьох випадках використання вони дозволяють представленням на основі дерев стати «правильним» вибором для багатьох видів даних, де в іншому випадку це буде дещо складніше
Carter Tazio Schonwald

1
Приклад їх використання для маніпуляцій з XML: anti-xml.org/zippers.html
Механічний равлик

40

Conchon, Filliatre, Стійка структура даних UNION-FIND та напівпостійні структури даних .


Нічого собі, наполегливий ЗВ'ЯЗОК УСІЛ! Дякую!
jkff

3
Ну, вид ... Дивіться статтю.
Раду ГРИГо

1
... або, якщо ви хочете, подивіться якийсь код (від Метта Паркінсона) github.com/septract/jstar/blob/master/src/utils/…
Radu GRIGore

5
Тепер я бачу, чому коментар "роду .." мав відгук. Вони мають хороші показники лише тоді, коли кожен винятково або не використовує наполегливість, або весь час займається зворотним зв'язком: якщо ви часто використовуєте і "нову", і "стару" версії, ви накручені. Хоча крута ідея про вкорінення.
jkff

Посилання на Раду тепер можна знайти на сайті github.com/septract/jstar-old/blob/…
jbapple

20

Я б додав версію McPride-блискавки в якості похідних типів даних.


Мені подобаються такі речі. Це просто так круто, що похідна має додаток настільки диво відрізняється від знаходження швидкості змін!
SamB

3
SamB, вас також можуть зацікавити похідні регулярних виразів (якщо ви про них ще не знали).
jbapple


14

Rangemaps

Це спеціалізована структура даних, але її можна використовувати як заміну для дієти Мартіна Ервіга з дещо іншими властивостями, тому принаймні є одна існуюча структура даних для порівняння. Сам DIET був описаний у статті JFP у 1998 році, тому, можливо, він не включений до чисто функціональних структур даних.


7

За результатами роботи, пов'язаної з вищезгаданим документом 2012 року, робота над векторами RRB з тих пір була розширена та опублікована в ICFP'15.

Вектор RRB: практична незмінна послідовність загального призначення http://dl.acm.org/citation.cfm?id=2784739

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.