มีอะไรใหม่ในโครงสร้างข้อมูลที่ใช้งานได้จริงตั้งแต่ Okasaki?


563

ตั้งแต่ปี 1998 หนังสือของ Chris Okasaki "โครงสร้างข้อมูลที่ใช้งานได้อย่างแท้จริง" ฉันไม่ได้เห็นโครงสร้างข้อมูลที่ทำงานได้อย่างน่าตื่นเต้นจนเกินไปปรากฏขึ้นใหม่ ฉันชื่อไม่กี่:

  • IntMap (คิดค้นโดย Okasaki ในปี 1998 แต่ไม่มีในหนังสือเล่มนั้น)
  • ต้นไม้นิ้ว (และลักษณะทั่วไปของพวกเขามากกว่า monoids)

นอกจากนี้ยังมีวิธีที่น่าสนใจในการใช้งาน datastructures ที่รู้จักกันแล้วเช่นการใช้ "nested types" หรือ "datatypes พีชคณิตทั่วไป" เพื่อรับรองค่าคงที่ของต้นไม้

มีแนวคิดใหม่อื่นใดอีกบ้างที่ปรากฏในปี 1998 ในด้านนี้


20
เป็นคำถามที่ดี ฉันมีนักเรียนคนหนึ่งถามฉันเกี่ยวกับเรื่องนี้และไม่รู้คำตอบ
Suresh Venkat

สิ่งนี้ใช้ได้สำหรับที่นี่ แต่คุณอาจได้รับคำตอบที่ดีขึ้นเกี่ยวกับ Stack Overflow หากคุณถามที่นั่นให้แน่ใจและเชื่อมโยงกับการสนทนาที่นี่
Charles Stewart

3
Haskell Reddit ได้เห็นสิ่งนี้ดังนั้นจะมีคำตอบที่ดีออกมาจากที่นั่นเช่นกัน แต่เป็นคำถามที่ยอดเยี่ยม แค่ครึ่งทางผ่านหนังสือของโอกาซากิฉันก็สงสัยว่าคิดเหมือนกัน +1
Robert Massaioli

9
นี้เป็นแรงบันดาลใจให้ฉันไปถามคำถามที่เกี่ยวข้อง
jbapple

คำตอบ:


553

โครงสร้างข้อมูลใหม่ที่ใช้งานได้จริงเผยแพร่ตั้งแต่ปี 2541:

รู้จักกันในปี 1997 แต่ไม่ได้กล่าวถึงในหนังสือของ Okasaki:

  • โครงสร้างการค้นหาแบบสมดุลอื่น ๆ อีกมากมาย AVL, พี่ชาย, อันดับที่สมดุล, ขอบเขตที่สมดุลและต้นไม้การค้นหาที่สมดุลอื่น ๆ สามารถนำไปใช้ (และได้รับ) โครงสร้างการทำงานอย่างหมดจดโดยการคัดลอกเส้นทาง บางทีสมควรกล่าวถึงเป็นพิเศษ:

  • ชุดที่ไม่มีที่สิ้นสุดที่ยอมรับค้นหาหมดจดรวดเร็ว , มาร์ตินEscardó : บางทีอาจจะไม่ได้โครงสร้างข้อมูลต่อ se

  • อัลกอริธึมสามประการบนต้นไม้ Braunโดย Chris Okasaki : ต้นไม้ Braun เสนอการดำเนินการสแต็กจำนวนมากในกรณีที่เลวร้ายที่สุด O (lg n) ข้อ จำกัด นี้ถูกค้นพบโดยโครงสร้างข้อมูลอื่น ๆ จำนวนมาก แต่ต้นไม้ Braun มีการconsดำเนินการที่ขี้เกียจในการโต้แย้งที่สองและสามารถใช้เป็นสแต็กที่ไม่มีที่สิ้นสุดในบางวิธีที่โครงสร้างอื่นไม่สามารถทำได้

  • ผ่อนคลายนาทีสูงสุดกอง: การ mergeable สองสิ้นสุดลงคิวลำดับความสำคัญและสินค้า KD กอง: การที่มีประสิทธิภาพในหลายมิติคิวลำดับความสำคัญโดย Yuzheng Ding และมาร์คอัลเลนไวส์ : เหล่านี้จะเกิดขึ้นจะทำงานได้อย่างหมดจด แต่นี้ไม่ได้กล่าวถึงในเอกสาร . ฉันไม่คิดว่าขอบเขตเวลาที่ทำได้จะดีกว่าที่สามารถทำได้โดยใช้ต้นไม้นิ้ว (ของ Hinze & Paterson หรือ Kaplan & Tarjan) เป็นคิวลำดับความสำคัญ k-มิติ แต่ฉันคิดว่าโครงสร้างของ Ding & Weiss ใช้พื้นที่น้อยกว่า .

  • The ZipโดยGérard Huet : ใช้ในโครงสร้างข้อมูลอื่น ๆ (เช่นต้นไม้นิ้วของ Hinze & Paterson) นี่เป็นวิธีการเปลี่ยนโครงสร้างข้อมูลภายใน

  • รายการที่แตกต่างคือ O (1) รายการที่สามารถแก้ไขได้ด้วยการแปลง O (n) เป็นconsรายการปกติ เห็นได้ชัดว่าพวกเขารู้จักกันมาตั้งแต่สมัยโบราณในชุมชนอารัมภบทที่พวกเขามีการเปลี่ยนแปลง O (1) เป็นconsรายการปกติ การแปลง O (1) ดูเหมือนจะเป็นไปไม่ได้ในการเขียนโปรแกรมการทำงานแบบดั้งเดิม แต่สิ่งที่เป็นนามธรรมของหลุม Minamide จาก POPL '98 กล่าวถึงวิธีการอนุญาตให้ O (1) ผนวกและการเปลี่ยนแปลง O (1) ภายในการเขียนโปรแกรมการทำงานที่บริสุทธิ์ แตกต่างจากการเขียนโปรแกรมฟังก์ชั่นการใช้งานตามปกติของรายการความแตกต่างซึ่งขึ้นอยู่กับฟังก์ชั่นการปิด, abstractions หลุมเป็นหลักเดียวกัน (ทั้งในการใช้งานและการใช้งานของพวกเขา) เป็นรายการความแตกต่างของอารัมภบท อย่างไรก็ตามดูเหมือนว่าเป็นเวลาหลายปีที่คนเพียงคนเดียวที่สังเกตเห็นสิ่งนี้ได้หนึ่งในความคิดเห็นของ Minamide

  • O(n)Θ(nlgn)Θ(nlgn)Θ(lg2n)

ส่วนใหญ่โครงสร้างข้อมูลการทำงานก่อนระหว่างและหลังหนังสือของ Okasaki:

  • O(m)mO(lglgn)

  • 1989: สุ่มต้นไม้ค้นหาโดยเซซิเลียอาร์อารากอนและมุนด์ Seidel : เหล่านี้จะมีการหารือในการตั้งค่าการทำงานได้อย่างหมดจดโดย Guy อี Blelloch และมาร์กาเร็เรดมิลเลอร์ในการดำเนินงานการตั้งค่าได้อย่างรวดเร็วใช้ Treaps และโดยแดนแบลนด์และกายเบลลลอคในการดำเนินงานการตั้งค่าฟังก์ชั่นที่มี Treaps ( รหัส) พวกเขาจัดหาการดำเนินงานทั้งหมดของปลายนิ้วที่ใช้งานได้อย่างหมดจดและต้นไม้ค้นหาแบบลำเอียง แต่ต้องการแหล่งที่มาของการสุ่มทำให้ไม่สามารถใช้งานได้อย่างหมดจด สิ่งนี้อาจทำให้ความซับซ้อนของเวลาในการดำเนินการกับทรีเป็นโมฆะโดยสมมติว่าฝ่ายตรงข้ามที่สามารถปฏิบัติการเวลาและทำซ้ำได้นาน (นี่คือเหตุผลเดียวกันว่าทำไมข้อโต้แย้งค่าตัดจำหน่ายที่จำเป็นไม่ถูกต้องในการตั้งค่าแบบถาวร แต่มันต้องมีศัตรูกับนาฬิกาจับเวลา)

  • 1997: Skip-trees, โครงสร้างข้อมูลทางเลือกเพื่อข้ามรายการในแนวทางที่เกิดขึ้นพร้อมกันโดย Xavier Messeguer และการสำรวจความเป็นคู่ระหว่างการข้ามรายการและ Binary Search Treesโดย Brian C. Dean และ Zachary H. Jones : รายการข้ามไม่ได้หมดจด ใช้งานได้ แต่สามารถใช้งานได้เหมือนต้นไม้ พวกเขาต้องการแหล่งบิตสุ่ม (เป็นไปได้ที่จะสร้างรายการข้ามที่กำหนดไว้ แต่หลังจากแปลพวกเขาเป็นต้นไม้ฉันคิดว่าพวกเขาเป็นเพียงอีกวิธีหนึ่งในการดูต้นไม้ 2-3 ต้น)

  • 1998: โครงสร้างที่ถูกตัดจำหน่ายทั้งหมดในหนังสือของ Okasaki! Okasaki คิดค้นวิธีใหม่นี้ในการผสมค่าตัดจำหน่ายและโครงสร้างข้อมูลที่ใช้งานได้ซึ่งก่อนหน้านี้คิดว่าเข้ากันไม่ได้ มันขึ้นอยู่กับการบันทึกความจำซึ่งบางครั้ง Kaplan และ Tarjan ได้กล่าวถึงเป็นผลข้างเคียง ในบางกรณี ( เช่น PFDS บน SSD ด้วยเหตุผลด้านประสิทธิภาพ ) สิ่งนี้อาจไม่เหมาะสม

  • 2541: รายการที่สามารถแก้ไขได้อย่างง่ายๆ โดยฮาอิมแคปแลน Chris Okasaki และ Robert E. Tarjan : ใช้การดัดแปลงภายใต้ประทุนเพื่อให้ O (1) deques ที่สามารถตัดค่าใช้จ่ายได้นำเสนออินเทอร์เฟซเดียวกับรุ่นก่อนหน้า ) รุ่นที่ปรากฏในหนังสือของ Okasaki Kaplan และ Tarjan ได้สร้างโครงสร้าง O-1 ที่แย่ที่สุด แต่ก็มีความซับซ้อนมากกว่า

  • 2007: ดังกล่าวในคำตอบอื่นในหน้านี้โครงสร้างข้อมูลแบบกึ่งถาวรและการค้นหาสหภาพแบบถาวรโดย Sylvain Conchon และ Jean-Christophe Filliâtre

เทคนิคในการตรวจสอบโครงสร้างข้อมูลการทำงานก่อนระหว่างและหลังหนังสือของ Okasaki:

โครงสร้างข้อมูลที่ไม่จำเป็นหรือการวิเคราะห์ที่ไม่ได้กล่าวถึงในหนังสือของ Okasaki แต่เกี่ยวข้องกับโครงสร้างข้อมูลที่ใช้งานได้จริง:


5
ฉันจำไม่ได้ว่าทำเครื่องหมายในช่อง "community wiki" ในคำตอบนี้ มีวิธีใดบ้างที่จะยกเลิกได้
jbapple

7
@jbapple: หลังจากมีการแก้ไขจำนวนหนึ่งโพสต์ทั้งหมดจะกลายเป็นวิกิชุมชน นั่นเป็นการตรวจสอบอย่างละเอียดที่น่าประทับใจ ขอขอบคุณ.
Phil Miller

29
รายการที่ยอดเยี่ยม! ซึ่งทำให้ฉันหวังว่า Okasaki จะเผยแพร่รุ่นที่สอง
Radu GRIGore

4
โปรดทราบว่า Isabelle / HOL สามารถสร้างรหัสสำหรับ SML, OCaml, Haskell, Scala เครื่องมือ Haskabelle ยังสามารถนำเข้า Haskell ไปยัง Isabelle / HOL
Makarius

2
คำศัพท์ของ "การแยกโปรแกรม" เป็นหนึ่งใน Coq: คุณใช้การพิสูจน์เชิงสร้างสรรค์และสร้างโปรแกรมที่ปฏิบัติการได้จากมันโดยการลอกบางสิ่งออกไป ในอิสซาเบลสิ่งนี้เรียกว่า "การสร้างรหัส" และทำงานแตกต่างกันโดยใช้ข้อมูลจำเพาะ HOL เป็นรหัสหลอกไม่ใช่การพิสูจน์ การแยกหลักฐานใน Isabelle / HOL ตาม Berghofer ทำงานเหมือน Coq แต่ไม่ค่อยมีใครใช้มาก่อน
Makarius

63

บันทึกที่ดีเยี่ยมที่ทำแล้วฉันจะเพิ่มซิป

Huet, Gerard “ Functional Pearl: The Zip” วารสารการเขียนโปรแกรมเชิงหน้าที่ 7 (5): 549-554, กันยายน 1997

Wikipedia: Zipper (โครงสร้างข้อมูล)


4
ซิปเป็นที่น่ากลัว สำหรับกรณีการใช้งานจำนวนมากพวกเขาอนุญาตให้ตัวแทนจากต้นไม้กลายเป็นตัวเลือก "ถูกต้อง" สำหรับข้อมูลหลายประเภทที่มีความซับซ้อนมากกว่านี้
Carter Tazio Schonwald

1
ตัวอย่างของการใช้งานสำหรับการจัดการ XML: anti-xml.org/zippers.html
หอยทากเชิงกล

40

Conchon, Filliatre, โครงสร้างข้อมูลที่ยูเนี่ยนหาแบบถาวรและกึ่งถาวรโครงสร้างข้อมูล


ว้าวเป็น UNION-FIND! ขอบคุณ!
jkff

3
เอาล่ะ ... ดูบทความ
Radu GRIGore

1
... หรือถ้าคุณต้องการดูรหัส (โดย Matt Parkinson) github.com/septract/jstar/blob/master/src/utils/ …
Radu GRIGore

5
ตอนนี้ฉันเห็นว่าทำไม "ชนิดของ .. " ความคิดเห็นมี upvote พวกเขามีประสิทธิภาพที่ดีเฉพาะเมื่อคนเกือบจะไม่ใช้ความคงอยู่หรือ backtracks ตลอดเวลา: ถ้าคุณมักจะใช้ทั้งรุ่น "ใหม่" และ "เก่า" คุณกำลังเมา ความคิดที่เย็น rerooting
jkff

สามารถดูลิงค์ของ Radu ได้ที่github.com/septract/jstar-old/blob/…
jbapple

20

ฉันจะเพิ่ม Zippers ของ McBride เป็นอนุพันธ์ของประเภทข้อมูล


ฉันรักสิ่งนั้น มันเจ๋งมากที่อนุพันธ์มีแอพพลิเคชั่นที่แตกต่างจากการหาอัตราการเปลี่ยนแปลง!
SamB

3
SamB คุณอาจสนใจอนุพันธ์ของนิพจน์ทั่วไป (ถ้าคุณยังไม่รู้เรื่องเหล่านี้)
jbapple

3
นี่คือกระดาษต้นฉบับในสัญญาซื้อขายล่วงหน้าของการแสดงออกปกติ
jameshfisher

14

rangemaps

มันเป็นโครงสร้างข้อมูลพิเศษ แต่สามารถใช้แทน DIET ของ Martin Erwig ที่มีคุณสมบัติแตกต่างกันเล็กน้อยดังนั้นอย่างน้อยก็มีโครงสร้างข้อมูลที่มีอยู่หนึ่งตัวเพื่อเปรียบเทียบกับ DIET นั้นถูกอธิบายในบทความใน JFP ในปี 1998 ดังนั้นอาจไม่รวมอยู่ในโครงสร้างข้อมูลที่สามารถใช้งานได้อย่างแท้จริง


7

การติดตามผลงานวิจัยในปี 2555 ที่มีการเชื่อมโยงข้างต้นงานเกี่ยวกับเวกเตอร์ RRB ได้มีการขยายและเผยแพร่ใน ICFP'15

เวกเตอร์ RRB: ลำดับที่ไม่เปลี่ยนรูปแบบทางปฏิบัติทั่วไปที่ใช้งานได้จริง http://dl.acm.org/citation.cfm?id=2784739

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.