ผลบวก: การคงอยู่ไม่เสียค่าใช้จ่ายมากเกินไป เราสามารถแสดงให้เห็นได้ว่าโครงสร้างข้อมูลทุกรูปแบบสามารถคงอยู่ได้อย่างเต็มที่ด้วยการชะลอตัวอย่างมากO(lgn)
พิสูจน์: คุณสามารถใช้อาเรย์และทำให้มันคงอยู่ได้โดยใช้โครงสร้างข้อมูลมาตรฐาน (เช่นต้นไม้ไบนารีที่สมดุลดูที่ส่วนท้ายของคำตอบนี้เพื่อดูรายละเอียดเพิ่มเติมเล็กน้อย) นี่เป็นการชะลอตัวของ : การเข้าถึงอาร์เรย์แต่ละครั้งต้องใช้เวลาด้วยโครงสร้างข้อมูลถาวรแทนที่จะเป็นเวลาสำหรับอาร์เรย์ที่ไม่ใช่แบบถาวร ตอนนี้ใช้อัลกอริทึมที่จำเป็นซึ่งเวลารันในโมเดล RAM คือโดยที่หมายถึงจำนวนหน่วยความจำที่ใช้ แสดงหน่วยความจำทั้งหมดเป็นหนึ่งอาร์เรย์ใหญ่ (พร้อมองค์ประกอบ ) และทำให้มันคงอยู่โดยใช้แผนที่ถาวร แต่ละขั้นตอนของอัลกอริทึมที่จำเป็นเกิดขึ้นอย่างช้าที่สุดชะลอตัวดังนั้นเวลาการทำงานโดยรวมคือO ( lg n ) O ( 1 ) O ( f ( n ) ) n nO(lgn)O(lgn)O(1)O(f(n))nnO ( f ( n ) lg n )O(lgn)O(f(n)lgn)n)
เห็นได้ชัดว่ามันเป็นไปได้ที่จะทำให้ดีขึ้นเล็กน้อย: เห็นได้ชัดว่าสามารถลดปัจจัยการชะลอตัวลงเป็น (คาดว่าเวลาตัดจำหน่าย) โดยใช้เทคนิคในกระดาษ Demaine ที่อ้างถึงด้านล่าง - แต่ฉันไม่คุ้นเคย รายละเอียดของงานนั้นดังนั้นฉันไม่สามารถรับรองด้วยตัวเอง ขอบคุณ jbapple สำหรับการสังเกตนี้O(lglgn)
ผลลัพธ์เชิงลบ: คุณไม่สามารถหลีกเลี่ยงการชะลอตัวบางอย่างสำหรับโครงสร้างข้อมูลบางอย่าง เพื่อตอบคำถามที่สามของคุณมีโครงสร้างข้อมูลที่ทราบว่าการคงอยู่ทำให้เกิดการชะลอตัว
โดยเฉพาะอย่างยิ่งให้พิจารณาอาร์เรย์ขององค์ประกอบการเข้าถึงอาร์เรย์แต่ละครั้งจะใช้เวลา (ในรุ่น RAM) เห็นได้ชัดว่ามันแสดงให้เห็นว่าไม่มีทางที่จะสร้างอาร์เรย์ถาวรด้วยความซับซ้อนกรณีที่เลวร้ายที่สุดสำหรับการเข้าถึงองค์ประกอบแบบสุ่ม เห็นได้ชัดว่ามีขอบเขตที่ต่ำกว่าแสดงว่าอาร์เรย์ถาวรทั้งหมดต้องมีเวลาในการเข้าถึงขอบเขตล่างนี้ได้รับการยืนยันบนหน้า 3 ของกระดาษต่อไปนี้:O ( 1 ) O ( 1 ) Ω ( lg lg n )nO(1)O(1)Ω(lglgn)
- Confluently พยายามต่อเนื่องสำหรับการที่มีประสิทธิภาพในการควบคุมเวอร์ชัน Erik D. Demaine, Stefan Langerman, Eric Price อัลกอริทึม, เล่มที่ 57, หมายเลข 3, 2010, หน้า 462–483
ขอบเขตด้านล่างมีสาเหตุมาจาก Mihai Patrascu แต่ไม่มีการอ้างอิงถึงแหล่งข้อมูลที่ให้รายละเอียดเกี่ยวกับการพิสูจน์หลักฐานของขอบเขตล่างที่ยืนยันนี้
การวิจัยที่หลากหลาย ถ้าเราใช้โครงสร้างข้อมูลหรืออัลกอริทึมโดยพลการมันเป็นคำถามที่ละเอียดอ่อนไม่ว่าคุณจะสามารถทำให้มันคงอยู่กับการชะลอตัวของมากที่สุดหรือไม่ ฉันไม่รู้ทฤษฎีบทการจำแนกประเภททั่วไป อย่างไรก็ตามมีงานวิจัยจำนวนมากเกี่ยวกับวิธีการทำให้โครงสร้างข้อมูลที่เฉพาะเจาะจงคงอยู่ในวิธีที่มีประสิทธิภาพO(1)
นอกจากนี้ยังมีการเชื่อมต่อที่แข็งแกร่งกับภาษาโปรแกรมการทำงาน โดยเฉพาะอย่างยิ่งโครงสร้างข้อมูลทุกอย่างที่สามารถนำไปใช้งานได้อย่างหมดจด (โดยไม่มีการกลายพันธุ์) นั้นเป็นโครงสร้างข้อมูลถาวร (การสนทนาไม่จำเป็นต้องเป็นกรณีนี้เลย) ถ้าคุณต้องการเหล่ตาคุณสามารถใช้สิ่งนี้เป็นทฤษฎีบทการจำแนกบางส่วนที่อ่อนแอ: หากสามารถนำไปใช้ในภาษาการเขียนโปรแกรมที่ใช้งานได้อย่างหมดจดพร้อมกับขอบเขตในเวลาเดียวกัน ภาษาที่จำเป็นแล้วมีโครงสร้างข้อมูลถาวรที่มีขอบเขตในเวลาเดียวกันกับที่ไม่ใช่แบบถาวร ฉันรู้ว่านี่อาจไม่ใช่สิ่งที่คุณกำลังมองหา - มันเป็นเพียงแค่การพูดเรื่องเล็ก ๆ น้อย ๆ เกี่ยวกับสถานการณ์
วิธีการสร้างอาร์เรย์แบบถาวร ฉันจะไม่พยายามอธิบายวิธีการสร้างอาเรย์แบบถาวรด้วยเวลาในการเข้าถึงกรณีที่เลวร้ายที่สุด อย่างไรก็ตามความคิดพื้นฐานไม่ซับซ้อนเกินไปดังนั้นฉันจะสรุปสาระสำคัญของความคิดO(lgn)
ความคิดพื้นฐานคือการที่เราสามารถใช้โครงสร้างข้อมูลต้นไม้ไบนารีและทำให้มันถาวรโดยใช้เทคนิคที่เรียกว่าการคัดลอกเส้นทาง สมมติว่าเรามีต้นไม้ไบนารีและเราต้องการที่จะปรับเปลี่ยนค่าในใบบาง\อย่างไรก็ตามสำหรับการคงอยู่เราไม่กล้าแก้ไขค่าในลีฟนั้น เราทำสำเนาใบไม้นั้นและแก้ไขค่าในสำเนาแทน จากนั้นเราจะทำสำเนาของแม่และเปลี่ยนตัวชี้เด็กที่เหมาะสมในการคัดลอกเพื่อชี้ไปที่ใบไม้ใหม่ ดำเนินการต่อด้วยวิธีนี้การโคลนแต่ละโหนดบนเส้นทางจากรูทไปที่ลีฟ ถ้าเราต้องการที่จะปรับเปลี่ยนใบที่ระดับความลึกนี้ต้องคัดลอกโหนดd dℓdd
ถ้าเรามีต้นไม้ไบนารีสมดุลมีโหนดแล้วทุกใบมีความลึกเพื่อให้การดำเนินการนี้บนต้นไม้ไบนารีใช้เวลาเวลา มีรายละเอียดบางอย่างที่ฉันกำลังข้าม - เพื่อให้ได้เวลากรณีที่เลวร้ายที่สุดเราอาจต้องปรับสมดุลต้นไม้เพื่อให้แน่ใจว่ามันยังคงสมดุล - แต่นี่ให้ส่วนสำคัญของมันO ( lg n ) O ( lg n ) O ( lg n )nO(lgn)O(lgn)O(lgn)
คุณสามารถค้นหาคำอธิบายเพิ่มเติมด้วยรูปภาพสวย ๆ ได้จากแหล่งข้อมูลต่อไปนี้:
ที่จะทำให้คุณมีความคิดหลัก มีรายละเอียดเพิ่มเติมเพื่อดูแล แต่รายละเอียดอยู่นอกขอบเขตสำหรับคำถามนี้ โชคดีที่นี่เป็นเนื้อหามาตรฐานทั้งหมดและมีข้อมูลจำนวนมากที่มีอยู่ในวรรณกรรมเกี่ยวกับวิธีการสร้างโครงสร้างข้อมูลดังกล่าว อย่าลังเลที่จะถามคำถามแยกต่างหากหากทรัพยากรด้านบนไม่เพียงพอและคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับรายละเอียดของการสร้างโครงสร้างข้อมูลอาร์เรย์ถาวร