{"id":16722295,"url":"https://github.com/phipsgabler/algdesign-persistent-data-structures","last_synced_at":"2026-02-03T21:04:11.644Z","repository":{"id":82586498,"uuid":"114121764","full_name":"phipsgabler/algdesign-persistent-data-structures","owner":"phipsgabler","description":"Presentation for Algorithm Design Seminar 2 on persistent data structures","archived":false,"fork":false,"pushed_at":"2022-01-13T10:22:24.000Z","size":1428,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-22T03:33:05.511Z","etag":null,"topics":["algorithm-design","data-structures","persistent-data-structures"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phipsgabler.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-12-13T13:05:10.000Z","updated_at":"2022-01-13T10:21:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"89208219-bfa9-42db-9b97-6be6ceef2d5a","html_url":"https://github.com/phipsgabler/algdesign-persistent-data-structures","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phipsgabler%2Falgdesign-persistent-data-structures","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phipsgabler%2Falgdesign-persistent-data-structures/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phipsgabler%2Falgdesign-persistent-data-structures/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phipsgabler%2Falgdesign-persistent-data-structures/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phipsgabler","download_url":"https://codeload.github.com/phipsgabler/algdesign-persistent-data-structures/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243733336,"owners_count":20339026,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithm-design","data-structures","persistent-data-structures"],"created_at":"2024-10-12T22:34:12.083Z","updated_at":"2026-02-03T21:04:06.617Z","avatar_url":"https://github.com/phipsgabler.png","language":null,"readme":"[![CC BY 4.0][cc-by-shield]][cc-by]\n\n# Persistent data structures\n\n## Outline\n\n- Terminology\n- Versioning\n- Comparison of different approaches\n- Fat node method, node-copying method\n- Clojure vectors and maps (bit-partitioned array tries \u0026 HAMTs),\n  path copying\n- Recent improvements\n\n## Bibliography\n\n```\n\n@thesis{okasaki1996purely,\n  langid = {english},\n  title = {Purely Functional Data Structures},\n  url = {http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf},\n  institution = {{Carnegie Mellon}},\n  urldate = {2014-06-01},\n  date = {1996},\n  author = {Okasaki, Chris}\n}\n\n@article{blelloch2001persistent,\n  title = {Persistent Triangulations},\n  volume = {11},\n  url = {https://www.cambridge.org/core/journals/journal-of-functional-programming/article/persistent-triangulations/C7F680713ADE671FB51850F1850B9B2D},\n  number = {5},\n  journaltitle = {Journal of Functional Programming},\n  urldate = {2017-09-29},\n  date = {2001},\n  pages = {441--466},\n  author = {Blelloch, Guy and Burch, Hal and Crary, Karl and Harper, Robert and Miller, Gary and Walkington, Noel}\n}\n\n@thesis{dinkla1998geometrische,\n  title = {Geometrische {{Algorithmen}} in {{Haskell}}},\n  date = {1998},\n  author = {Dinkla, Jörn}\n}\n\n@article{sarnak1986planar,\n  title = {Planar Point Location Using Persistent Search Trees},\n  volume = {29},\n  url = {http://dl.acm.org/citation.cfm?id=6151},\n  number = {7},\n  journaltitle = {Communications of the ACM},\n  urldate = {2017-09-29},\n  date = {1986},\n  pages = {669--679},\n  author = {Sarnak, Neil and Tarjan, Robert E.}\n}\n\n@inproceedings{chuang1993realtime,\n  title = {Real-Time Deques, Multihead {{Turing}} Machines, and Purely Functional Programming},\n  booktitle = {Proceedings of the Conference on {{Functional}} Programming Languages and Computer Architecture},\n  publisher = {{ACM}},\n  date = {1993},\n  pages = {289--298},\n  author = {Chuang, Tyng-Ruey and Goldberg, Benjamin}\n}\n\n@online{what2010,\n  title = {What's New in Purely Functional Data Structures since {{Okasaki}}? - {{Theoretical Computer Science Stack Exchange}}},\n  url = {https://cstheory.stackexchange.com/questions/1539/whats-new-in-purely-functional-data-structures-since-okasaki},\n  shorttitle = {Reference Request - {{What}}'s New in Purely Functional Data Structures since {{Okasaki}}?},\n  urldate = {2017-10-24},\n  date = {2010}\n}\n\n@report{bagwell2001ideal,\n  title = {Ideal Hash Trees},\n  date = {2001},\n  author = {Bagwell, Phil}\n}\n\n@incollection{kaplan1995persistent,\n  title = {Persistent Data Structures},\n  booktitle = {Handbook on Data Structures and Applications},\n  date = {1995},\n  pages = {241--246},\n  author = {Kaplan, Haim},\n  editorb = {Mehta, Dinesh and Sartaj Sahni},\n  editorbtype = {redactor}\n}\n\n@misc{sommer2005persistent,\n  title = {Persistent {{Data Structures}}},\n  url = {https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-854j-advanced-algorithms-fall-2005/lecture-notes/persistent.pdf},\n  urldate = {2017-10-24},\n  date = {2005},\n  author = {Sommer, Gentry and Kohler, Eddie}\n}\n\n@report{bagwell2000fast,\n  title = {Fast and Space Efficient Trie Searches},\n  date = {2000},\n  author = {Bagwell, Phil}\n}\n\n@inproceedings{steindorfer2015optimizing,\n  langid = {english},\n  title = {Optimizing Hash-Array Mapped Tries for Fast and Lean Immutable {{JVM}} Collections},\n  isbn = {978-1-4503-3689-5},\n  url = {http://dl.acm.org/citation.cfm?doid=2814270.2814312},\n  doi = {10.1145/2814270.2814312},\n  publisher = {{ACM Press}},\n  urldate = {2017-12-05},\n  date = {2015},\n  pages = {783-800},\n  author = {Steindorfer, Michael J. and Vinju, Jurgen J.}\n}\n\n@unpublished{hickey2008clojure,\n  title = {Clojure: {{A Dynamic Programming Language}} for the {{JVM}}},\n  date = {2008},\n  author = {Hickey, Rich},\n  note = {https://www.infoq.com/presentations/hickey-clojure?utm\\_source=presentations\\_about\\_JVMLanguageSummit\\\u0026utm\\_medium=link\\\u0026utm\\_campaign=JVMLanguageSummit}\n}\n\n@article{prokopec2017cacheaware,\n  title = {Cache-Aware Lock-Free Concurrent Hash Tries},\n  journaltitle = {arXiv preprint arXiv:1709.06056},\n  date = {2017},\n  author = {Prokopec, Aleksandar and Bagwell, Phil and Odersky, Martin}\n}\n\n@inproceedings{prokopec2012concurrent,\n  title = {Concurrent Tries with Efficient Non-Blocking Snapshots},\n  volume = {47},\n  booktitle = {Acm {{Sigplan Notices}}},\n  publisher = {{ACM}},\n  date = {2012},\n  pages = {151--160},\n  author = {Prokopec, Aleksandar and Bronson, Nathan Grasso and Bagwell, Phil and Odersky, Martin}\n}\n\n@report{bagwell2011rrbtrees,\n  title = {{{RRB}}-{{Trees}}: {{Efficient Immutable Vectors}}},\n  shorttitle = {{{RRB}}-{{Trees}}},\n  date = {2011},\n  author = {Bagwell, Philip and Rompf, Tiark}\n}\n\n@inproceedings{prokopec2018cachetries,\n  langid = {english},\n  title = {Cache-Tries: Concurrent Lock-Free Hash Tries with Constant-Time Operations},\n  isbn = {978-1-4503-4982-6},\n  url = {http://dl.acm.org/citation.cfm?doid=3178487.3178498},\n  doi = {10.1145/3178487.3178498},\n  shorttitle = {Cache-Tries},\n  publisher = {{ACM Press}},\n  urldate = {2018-03-02},\n  date = {2018},\n  pages = {137-151},\n  author = {Prokopec, Aleksandar}\n}\n\n@article{driscoll1989making,\n  langid = {english},\n  title = {Making {{Data Structures Persistent}}},\n  number = {38},\n  journaltitle = {Journal of Computer and Systems Science},\n  date = {1989},\n  pages = {86-124},\n  author = {Driscoll, James R. and Sarnak, Neil and Sleator, Daniel D.}\n}\n\n@online{expert2013,\n  title = {Expert to {{Expert}}: {{Rich Hickey}} and {{Brian Beckman}} - {{Inside Clojure}}},\n  url = {https://www.youtube.com/watch?v=wASCH_gPnDw},\n  urldate = {2018-06-11},\n  date = {2013}\n}\n\n@online{lorange2015understanding,\n  title = {Understanding {{Clojure}}'s {{Persistent Vectors}}, Pt. 1},\n  url = {https://hypirion.com/musings/understanding-persistent-vector-pt-1},\n  urldate = {2018-06-12},\n  date = {2015-09-25},\n  author = {L’orange, Jean Niklas}\n}\n\n@online{krukow2009understanding,\n  title = {Understanding {{Clojure}}'s {{PersistentHashMap}} (Deftwice...)},\n  url = {http://blog.higher-order.net/2009/09/08/understanding-clojures-persistenthashmap-deftwice.html},\n  urldate = {2018-06-12},\n  date = {2009-09-08},\n  author = {Krukow, Karl}\n}\n\n@book{emerick2012clojure,\n  langid = {english},\n  location = {{Sebastopol, Calif}},\n  title = {Clojure Programming},\n  edition = {1st ed},\n  isbn = {978-1-4493-9470-7},\n  pagetotal = {607},\n  publisher = {{O'Reilly}},\n  date = {2012},\n  author = {Emerick, Chas and Carper, Brian and Grand, Christophe},\n  note = {OCLC: ocn711045678}\n}\n\n@thesis{lorange2014improving,\n  langid = {english},\n  title = {Improving {{RRB}}-{{Tree Performance}} through {{Transience}}},\n  date = {2014},\n  author = {L'orange, Jean Niklas}\n}\n\n@video{spiewak2011extreme,\n  title = {Extreme {{Cleverness}}: {{Functional Data Structures}} in {{Scala}}},\n  url = {https://www.infoq.com/presentations/Functional-Data-Structures-in-Scala},\n  shorttitle = {Extreme {{Cleverness}}},\n  series = {Strange Loop 2011},\n  urldate = {2018-06-14},\n  date = {2011-12-14},\n  director = {Spiewak, Daniel}\n}\n\n@inproceedings{conchon2007persistent,\n  langid = {english},\n  title = {A Persistent Union-Find Data Structure},\n  isbn = {978-1-59593-676-9},\n  url = {http://portal.acm.org/citation.cfm?doid=1292535.1292541},\n  doi = {10.1145/1292535.1292541},\n  publisher = {{ACM Press}},\n  urldate = {2018-06-14},\n  date = {2007},\n  pages = {37},\n  author = {Conchon, Sylvain and Filliâtre, Jean-Christophe}\n}\n\n@online{bierner2014hash,\n  title = {Hash {{Array Mapped Tries}} in {{Javascript}} – {{UWTB}}},\n  url = {https://blog.mattbierner.com/hash-array-mapped-tries-in-javascript/},\n  urldate = {2018-06-17},\n  date = {2014-03-06},\n  author = {Bierner, Matt}\n}\n\n@article{blelloch2015cache,\n  langid = {english},\n  title = {Cache Efficient Functional Algorithms},\n  volume = {58},\n  issn = {00010782},\n  url = {http://dl.acm.org/citation.cfm?doid=2797100.2776825},\n  doi = {10/f7hw38},\n  number = {7},\n  journaltitle = {Communications of the ACM},\n  urldate = {2018-06-18},\n  date = {2015-06-25},\n  pages = {101-108},\n  author = {Blelloch, Guy E. and Harper, Robert}\n}\n\n@video{clojuretvstriving,\n  title = {Striving to {{Make Things Simple}} and {{Fast}} - {{Phil Bagwell}}},\n  url = {https://www.youtube.com/watch?v=K2NYwP90bNs},\n  urldate = {2018-06-18},\n  director = {{ClojureTV}}\n}\n\n@online{pangsakulyanont2016immutable,\n  title = {Immutable.Js, Persistent Data Structures and Structural Sharing},\n  url = {https://medium.com/@dtinth/immutable-js-persistent-data-structures-and-structural-sharing-6d163fbd73d2},\n  journaltitle = {Medium},\n  urldate = {2018-06-19},\n  date = {2016-12-08T15:28:49.026Z},\n  author = {Pangsakulyanont, Thai}\n}\n\n@online{what2013,\n  title = {What Classes of Data Structures Can Be Made Persistent?},\n  url = {https://cs.stackexchange.com/questions/18262/what-classes-of-data-structures-can-be-made-persistent},\n  journaltitle = {Computer Science Stack Exchange},\n  urldate = {2018-06-19},\n  date = {2013}\n}\n```\n\n## License\n\nThis work is licensed under a Creative Commons Attribution 4.0 International License.\n\n[cc-by]: http://creativecommons.org/licenses/by/4.0/\n[cc-by-shield]: https://img.shields.io/badge/License-CC%20BY%204.0-lightgrey.svg\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphipsgabler%2Falgdesign-persistent-data-structures","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphipsgabler%2Falgdesign-persistent-data-structures","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphipsgabler%2Falgdesign-persistent-data-structures/lists"}