คำถามติดแท็ก ds.data-structures

คุณสมบัติและการใช้งานของโครงสร้างข้อมูลเช่นขอบเขตพื้นที่ต่ำหรือความซับซ้อนของเวลาในการแทรกและลบวัตถุ

6
มีอะไรใหม่ในโครงสร้างข้อมูลที่ใช้งานได้จริงตั้งแต่ Okasaki?
ตั้งแต่ปี 1998 หนังสือของ Chris Okasaki "โครงสร้างข้อมูลที่ใช้งานได้อย่างแท้จริง" ฉันไม่ได้เห็นโครงสร้างข้อมูลที่ทำงานได้อย่างน่าตื่นเต้นจนเกินไปปรากฏขึ้นใหม่ ฉันชื่อไม่กี่: IntMap (คิดค้นโดย Okasaki ในปี 1998 แต่ไม่มีในหนังสือเล่มนั้น) ต้นไม้นิ้ว (และลักษณะทั่วไปของพวกเขามากกว่า monoids) นอกจากนี้ยังมีวิธีที่น่าสนใจในการใช้งาน datastructures ที่รู้จักกันแล้วเช่นการใช้ "nested types" หรือ "datatypes พีชคณิตทั่วไป" เพื่อรับรองค่าคงที่ของต้นไม้ มีแนวคิดใหม่อื่นใดอีกบ้างที่ปรากฏในปี 1998 ในด้านนี้

30
อัลกอริทึมจากหนังสือ
Paul Erdos พูดคุยเกี่ยวกับ "หนังสือ" ที่ซึ่งพระเจ้าเก็บหลักฐานอันงดงามที่สุดของทฤษฎีบทคณิตศาสตร์แต่ละอันไว้ นี้ยังเป็นแรงบันดาลใจหนังสือ (ซึ่งผมเชื่อว่าตอนนี้อยู่ในฉบับที่ 4): หลักฐานจากหนังสือ ถ้าพระเจ้ามีหนังสือที่คล้ายกันสำหรับอัลกอริทึมคุณคิดว่าอัลกอริทึมแบบใด หากเป็นไปได้โปรดจัดหาข้อมูลอ้างอิงที่สามารถคลิกได้และข้อมูลเชิงลึกที่สำคัญซึ่งทำให้ใช้งานได้ กรุณาหนึ่งอัลกอริทึมต่อคำตอบโปรด

9
อัลกอริทึมที่มีประสิทธิภาพซับซ้อนเกินไปที่จะใช้
อัลกอริทึมของยูทิลิตี้ที่ถูกต้องตามกฎหมายมีอะไรบ้างที่ซับซ้อนเกินกว่าจะนำไปใช้ได้จริง? ให้ฉันชัดเจน: ฉันไม่ได้มองหาอัลกอริทึมเช่นอัลกอริทึมการคูณเมทริกซ์ที่เหมาะสมที่สุดในปัจจุบัน (Coppersmith-Winograd) ซึ่งมีเหตุผลที่จะดำเนินการ แต่มีค่าคงที่ที่ทำให้มันไร้ประโยชน์ในทางปฏิบัติ ฉันกำลังมองหาอัลกอริทึมที่อาจมีคุณค่าในทางปฏิบัติ แต่ก็ยากที่จะเขียนโค้ดที่พวกเขาไม่เคยใช้งานมาใช้เฉพาะในการตั้งค่าที่ประดิษฐ์มาก ๆ หรือนำไปใช้เฉพาะกับแอปพลิเคชันวัตถุประสงค์พิเศษ การต้อนรับยังเป็นอัลกอริธึมที่ไม่สามารถนำไปใช้งานได้ซึ่งมี asymptotics ที่ดี แต่มีแนวโน้มว่าจะมีประสิทธิภาพที่แท้จริงต่ำ

10
หนึ่งกองสองคิว
พื้นหลัง หลายปีที่ผ่านมาเมื่อฉันเป็นนักศึกษาระดับปริญญาตรีเราได้รับการบ้านเกี่ยวกับการวิเคราะห์ค่าตัดจำหน่าย ฉันไม่สามารถแก้ไขปัญหาข้อใดข้อหนึ่งได้ ฉันถามมันด้วยทฤษฎีแต่ไม่มีผลลัพธ์ที่น่าพอใจ ฉันจำหลักสูตรที่ TA ยืนยันในสิ่งที่เขาไม่สามารถพิสูจน์ได้และบอกว่าเขาลืมหลักฐานและ ... [คุณรู้ว่า] วันนี้ฉันจำปัญหาได้ ฉันยังอยากรู้ดังนั้นที่นี่มัน ... คำถาม เป็นไปได้หรือไม่ที่จะนำสแต็กมาใช้โดยใช้สองคิวเพื่อให้การดำเนินการทั้งPUSH และPOPทำงานในเวลาที่ตัดจำหน่าย O (1) ? ถ้าใช่คุณจะบอกฉันได้อย่างไร หมายเหตุ: สถานการณ์นั้นค่อนข้างง่ายหากเราต้องการใช้คิวที่มีสองกอง (พร้อมการดำเนินการที่เกี่ยวข้องENQUEUE & DEQUEUE ) โปรดสังเกตความแตกต่าง PS: ปัญหาข้างต้นไม่ใช่การบ้าน การบ้านไม่ต้องการขอบเขตที่ต่ำกว่า เพียงการดำเนินการและการวิเคราะห์เวลาทำงาน

13
อัลกอริทึมใดที่มีช่องว่างขนาดใหญ่ระหว่างการวิเคราะห์เชิงทฤษฎีและความเป็นจริง?
สองวิธีในการวิเคราะห์ประสิทธิภาพของอัลกอริทึมคือ เพื่อใส่ขอบเขตบนเชิงเส้นกำกับบนรันไทม์และ เพื่อเรียกใช้และรวบรวมข้อมูลการทดลอง ฉันสงสัยว่ามีหลายกรณีที่ทราบว่ามีช่องว่างที่สำคัญระหว่าง (1) และ (2) หรือไม่ จากนี้ฉันหมายถึงว่า (a) ข้อมูลการทดลองแสดงให้เห็นว่า asymptotic ที่เข้มงวดมากขึ้นหรือ (b) มีอัลกอริธึม X และ Y ซึ่งการวิเคราะห์เชิงทฤษฎีแสดงให้เห็นว่า X ดีกว่า Y มากและข้อมูลการทดลองแสดงว่า Y นั้นดีกว่า เอ็กซ์ เนื่องจากการทดลองมักจะเปิดเผยพฤติกรรมกรณีโดยเฉลี่ยฉันคาดหวังคำตอบที่น่าสนใจที่สุดในการอ้างถึงขอบเขตบนของกรณีโดยเฉลี่ย อย่างไรก็ตามฉันไม่ต้องการแยกแยะคำตอบที่น่าสนใจซึ่งพูดถึงขอบเขตที่ต่างกันเช่นคำตอบของ Noam เกี่ยวกับ Simplex รวมถึงโครงสร้างข้อมูล โปรดใส่หนึ่งอัลโก / ds ต่อคำตอบ

2
คำถามที่โดดเด่นในโครงสร้างข้อมูลที่ทำงานได้อย่างหมดจดคืออะไร?
คำถามนี้เป็นแรงบันดาลใจคำถามเกี่ยวกับสิ่งใหม่ใน PFDs ตั้งแต่การตีพิมพ์หนังสือ Okasaki ในปี 1998 ฉันจะเริ่มด้วยคำถามสองข้อที่ฉันมี: มีโครงสร้างข้อมูลชุดการทำงานอย่างหมดจดที่ใกล้ความเร็วของตารางแฮช? ความพยายามยังไม่จบ มีต้นไม้นิ้วที่ทำงานได้อย่างหมดจดด้วย O (1) ต่อท้าย? สิ่งที่ดีที่สุดคือ O (lg lg n) ซึ่งคิดค้นโดย Kaplan และ Tarjan ปัญหาโครงสร้างข้อมูลที่ทำงานได้อย่างแท้จริงอื่นใดที่เปิดอยู่?

4
มีฟังก์ชันแฮชสำหรับคอลเลกชัน (เช่นชุดหลายชุด) ของจำนวนเต็มที่มีการค้ำประกันทางทฤษฎีที่ดีหรือไม่?
ฉันอยากรู้ว่ามีวิธีเก็บแฮชของจำนวนเต็มหลายชุดที่มีคุณสมบัติดังต่อไปนี้หรือไม่: มันใช้พื้นที่ O (1) สามารถอัปเดตให้สะท้อนถึงการแทรกหรือการลบในเวลา O (1) คอลเลคชั่นที่เหมือนกันสองชุด (เช่นคอลเลกชันที่มีองค์ประกอบเดียวกันที่มีหลายหลากเท่ากัน) ควรแฮชไปที่ค่าเดียวกันเสมอและคอลเลกชันที่แตกต่างกันสองชุดควรแฮชกับค่าที่แตกต่างกัน หนึ่งความพยายามครั้งแรกในที่นี้คือการจัดเก็บโมดูโลผลิตภัณฑ์แบบสุ่มนายกรัฐมนตรีของแฮชขององค์ประกอบแต่ละรายการ สิ่งนี้ตรงกับที่ 1 และ 2 แต่ไม่ชัดเจนว่ามันหรือการเปลี่ยนแปลงที่ใกล้เคียงจะตอบสนอง 3 ฉันเดิมโพสต์เกี่ยวกับเรื่องนี้StackOverflow * คุณสมบัติที่ 1 และ 2 อาจผ่อนคลายเล็กน้อยเพื่อพูด O (log n) หรือพหุนามย่อยขนาดเล็ก ประเด็นคือเพื่อดูว่าเราสามารถระบุหลายชุดและทดสอบความเท่าเทียมกันอย่างน่าเชื่อถือได้หรือไม่โดยไม่ต้องจัดเก็บองค์ประกอบเอง

9
ข้อมูลสำหรับการทดสอบอัลกอริธึมกราฟ
ฉันกำลังมองหาที่มาของชุดข้อมูลขนาดใหญ่เพื่อทดสอบการใช้งานอัลกอริทึมกราฟ โปรดให้ข้อมูลเกี่ยวกับประเภท / การแจกจ่าย (เช่นกำกับ / ไม่ระบุทิศทาง, ง่าย / ไม่ง่าย, ถ่วงน้ำหนัก / ไม่ถ่วงน้ำหนัก) ของกราฟในแหล่งที่มาหากทราบ

6
ชุดความน่าจะเป็นที่ไม่มีผลบวกปลอมใช่ไหม
ดังนั้นตัวกรองของ Bloomนั้นยอดเยี่ยมมาก - เป็นชุดที่รองรับการตรวจสอบการเป็นสมาชิกโดยไม่มีข้อผิดพลาดที่ผิดพลาด แต่มีโอกาสเล็กน้อยที่จะมีผลบวกเป็นลบ แม้ว่าเมื่อเร็ว ๆ นี้ฉันต้องการ "ตัวกรอง Bloom" ที่รับประกันสิ่งที่ตรงกันข้าม: ไม่มีผลบวกปลอม แต่อาจเป็นเชิงลบที่ผิดพลาด แรงจูงใจของฉันนั้นง่าย: เนื่องจากมีไอเท็มจำนวนมากในการประมวลผล (ที่มีรายการซ้ำ) เราต้องการหลีกเลี่ยงการประมวลผลรายการที่เราเคยเห็นมาก่อน มันไม่เจ็บที่จะประมวลผลซ้ำซ้อนมันเสียเวลาเปล่า แต่ถ้าเราละเลยที่จะประมวลผลองค์ประกอบมันจะเป็นหายนะ ด้วย "reverse Bloom filter" เราสามารถจัดเก็บรายการที่มองเห็นด้วยค่าใช้จ่ายในพื้นที่น้อยและหลีกเลี่ยงการทำซ้ำที่มีความน่าจะเป็นสูงโดยการทดสอบการเป็นสมาชิกในชุด ถึงกระนั้นฉันก็ไม่สามารถพบสิ่งที่จัดเรียง สิ่งที่ฉันพบมากที่สุดคือ " ตัวกรอง Bloom ที่รีทัช " ซึ่งอนุญาตให้ทำการแลกเปลี่ยนผลบวกปลอมที่เลือกเพื่ออัตราการลบที่ผิดพลาดที่สูงขึ้น ฉันไม่ทราบว่าโครงสร้างข้อมูลของพวกเขามีประสิทธิภาพเพียงใดเมื่อต้องการลบผลบวกที่ผิดทั้งหมดออก ใครเห็นอะไรเช่นนี้ :)

8
อัลกอริธึมที่สูงกว่า
อัลกอริทึมที่รู้จักกันดีส่วนใหญ่เป็นลำดับแรกในแง่ที่ว่าอินพุตและเอาต์พุตเป็นข้อมูล "ธรรมดา" บางอย่างเป็นลำดับที่สองในลักษณะที่ไม่สำคัญเช่นการเรียงลำดับแฮชเทเบิลหรือฟังก์ชั่นแผนที่และการพับ: พวกมันถูกกำหนดค่าโดยฟังก์ชั่น แต่พวกเขาไม่ได้ทำสิ่งที่น่าสนใจเลย บางอันก็เป็นลำดับที่สอง แต่ค่อนข้างน่าสนใจกว่า: Fingertrees แปรผันตาม monoids การแยกนิ้วบนเพรดิเคตแบบจำเจ คำนำหน้ารวมอัลกอริธึมอีกครั้งโดยพารามิเตอร์หรือ monoid ฯลฯ ในที่สุดบางคำสั่งที่สูงกว่า "แท้จริง" ในแง่ที่น่าสนใจที่สุดสำหรับฉัน: Y combinator รายการความแตกต่าง มีอัลกอริทึมการสั่งซื้อที่สูงกว่าอื่น ๆ หรือไม่? ในความพยายามที่จะชี้แจงคำถามของฉันภายใต้ "nontrivial-ลำดับสูงกว่า" ฉันหมายถึง "การใช้สิ่งอำนวยความสะดวกขั้นสูงของระเบียบการคำนวณในวิธีที่สำคัญในส่วนต่อประสานของอัลกอริทึมและ / หรือการใช้งาน"

3
โครงสร้างข้อมูลที่ใช้การเปรียบเทียบสำหรับการค้นหารายการ
มีโครงสร้างข้อมูลที่ใช้อาร์เรย์ที่ไม่มีการเรียงลำดับของรายการnnnดำเนินการประมวลผลล่วงหน้าในO(n)O(n)O(n)และค้นหาคำตอบ: มีองค์ประกอบxxxในรายการแต่ละแบบสอบถามในเวลาที่เลวร้ายที่สุดO(logn)O(log⁡n)O(\log n)หรือไม่ ฉันคิดว่ามันไม่มีจริง ๆ ดังนั้นหลักฐานที่แสดงว่าไม่มีใครได้รับการต้อนรับด้วย

4
ทำไมคนเราถึงใช้ Octree บนต้นไม้ KD?
ฉันมีประสบการณ์ในการคำนวณทางวิทยาศาสตร์และใช้ kd-trees อย่างกว้างขวางสำหรับแอปพลิเคชัน BSP (การแบ่งพื้นที่แบบไบนารี) เมื่อเร็ว ๆ นี้ฉันคุ้นเคยกับ octrees ซึ่งเป็นโครงสร้างข้อมูลที่คล้ายกันสำหรับการแบ่งช่องว่างแบบ Euclidean แบบ 3 มิติ แต่สิ่งหนึ่งที่ทำงานในช่วงเวลาปกติคงที่จากสิ่งที่ฉันรวบรวม การวิจัยอิสระดูเหมือนว่าบ่งชี้ว่า kd-trees นั้นมีประสิทธิภาพที่เหนือกว่าสำหรับชุดข้อมูลส่วนใหญ่ - เร็วกว่าในการสร้างและสืบค้น คำถามของฉันคืออะไรข้อได้เปรียบของ octrees ในด้านประสิทธิภาพเชิงพื้นที่ / เวลาหรืออย่างอื่นและในสถานการณ์ใดที่พวกเขาใช้งานได้มากที่สุด (ฉันเคยได้ยินการเขียนโปรแกรมกราฟิก 3D) บทสรุปของข้อดีและปัญหาของทั้งสองประเภทจะขอชื่นชมมากที่สุด พิเศษถ้าใครสามารถอธิบายเกี่ยวกับการใช้โครงสร้างข้อมูล R-tree และข้อดีของมันฉันก็จะขอบคุณเช่นกัน ดูเหมือนว่าจะใช้ต้นไม้ R (มากกว่าแปดสิบต้น) ในทำนองเดียวกันกับ kd-trees สำหรับการค้นหาเพื่อนบ้าน k หรือใกล้เคียงที่สุด

6
มีกองมั่นคงหรือไม่
มีโครงสร้างข้อมูลคิวลำดับความสำคัญที่รองรับการดำเนินการต่อไปนี้หรือไม่? แทรก (x, p) : เพิ่มระเบียนใหม่ x พร้อมลำดับความสำคัญ p StableExtractMin () : การกลับมาและลบระเบียนที่มีลำดับความสำคัญต่ำสุดที่จะหมดความสัมพันธ์ตามคำสั่งแทรก ดังนั้นหลังจาก Insert (a, 1), Insert (b, 2), Insert (c, 1), Insert (d, 2), ลำดับของ StableExtractMin จะคืนค่า a, จากนั้น c จากนั้น b จากนั้น d เห็นได้ชัดว่าใครสามารถใช้โครงสร้างข้อมูลคิวลำดับความสำคัญใด ๆโดยการจัดเก็บคู่เป็นลำดับความสำคัญที่เกิดขึ้นจริง แต่ฉันสนใจในโครงสร้างข้อมูลที่ไม่ได้เก็บเวลาการแทรก (หรือลำดับการแทรก) อย่างชัดเจน .(p,time)(พี,เสื้อผมม.อี)(p, time) เท่ากัน (?): มี heapsort รุ่นเสถียรที่ไม่ต้องการพื้นที่พิเศษไหม?Ω(n)Ω(n)\Omega(n)

5
การค้นหาไบนารีทั่วไปสำหรับโพสต์?
สมมติว่าฉันมี poset "S" และ monotonic predicate "P" บน S ฉันต้องการค้นหาองค์ประกอบหนึ่งหรือทั้งหมดของ S ที่น่าพอใจ P แก้ไข : ฉันสนใจในการลดจำนวนของการประเมินผลของ P มีอัลกอริทึมใดที่มีอยู่สำหรับปัญหานี้และคุณสมบัติและการดำเนินการเพิ่มเติมใดบ้างที่พวกเขาต้องการใน S สิ่งที่เกี่ยวกับกรณีพิเศษที่สำคัญเช่น: S คือลำดับเชิงเส้น - จากนั้นการค้นหาแบบไบนารีปกติจะทำงานตราบใดที่คุณมีการดำเนินการ "find middle" S คือขัดแตะ S เป็นโครงร่างย่อย S คือตาข่ายหลายชุด ... ทั้งสองกรณีหลังมีความสำคัญเป็นพิเศษเช่นสำหรับการออกแบบการทดสอบ - คุณมีชุดบูลีนหรือพารามิเตอร์จริงและคุณต้องการค้นหาชุดค่าผสมที่เล็กที่สุดเท่าที่จะเป็นไปได้ที่สร้างรูปแบบเฉพาะ (เช่นการทดสอบที่ล้มเหลว)

2
ฉันฝันถึงโครงสร้างข้อมูลมันมีอยู่จริงหรือไม่?
ฉันไม่สามารถหาโครงสร้างข้อมูลนี้ได้ แต่ฉันไม่ใช่ผู้เชี่ยวชาญในสาขานี้ โครงสร้างใช้ชุดและโดยทั่วไปจะเป็นอาร์เรย์ขององค์ประกอบที่เทียบเคียงกับค่าคงที่ ค่าคงที่คือค่าต่อไปนี้ (กำหนดแบบเรียกซ้ำ): อาเรย์ของความยาว 1 เป็นอาเรย์ผสาน อาร์เรย์ที่มีความยาว 2 ^ n (สำหรับ n> 0) เป็นอาร์เรย์ผสาน iff: ครึ่งแรกเป็นอาร์เรย์ผสานและครึ่งหลังว่างเปล่าหรือ อาร์เรย์แรกเต็มและเรียงลำดับแล้วครึ่งปีหลังเป็นอาร์เรย์ผสาน โปรดทราบว่าถ้าอาร์เรย์เต็มจะถูกจัดเรียง ในการแทรกองค์ประกอบเรามีสองกรณี: หากครึ่งแรกไม่เต็มให้แทรกแบบเรียกซ้ำในครึ่งแรก หากครึ่งแรกเต็มให้แทรกแบบเรียกซ้ำในครึ่งหลัง หลังจากขั้นตอนแบบเรียกซ้ำถ้าทั้งอาร์เรย์เต็มแล้วให้แบ่งครึ่ง (ซึ่งจัดเรียง) แล้วปรับขนาดให้เป็นสองเท่าของความยาวดั้งเดิม ในการค้นหาองค์ประกอบให้แบ่งเป็นสองส่วนโดยใช้การค้นหาแบบไบนารีเมื่ออาร์เรย์เต็ม (ควรมีประสิทธิภาพเนื่องจากมีมากที่สุดจากน้อยไปหามาก)O ( บันทึก( n ) )O(เข้าสู่ระบบ⁡(n))O(\log(n)) โครงสร้างสามารถถือเป็นแบบคงที่ของการรวมกัน ยังไม่ชัดเจนว่าควรทำอย่างไรเพื่อลบองค์ประกอบ แก้ไข: หลังจากปรับปรุงความเข้าใจโครงสร้าง

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