คำถามติดแท็ก dictionaries

4
ทำไมต้นไม้สีแดงดำจึงเป็นที่นิยม
ดูเหมือนว่าทุกที่ที่ฉันมองมีการใช้โครงสร้างข้อมูลโดยใช้ต้นไม้สีแดงดำ ( std::setใน C ++, SortedDictionaryใน C #, ฯลฯ ) มีต้นไม้ปกคลุม (a, b), สีแดง - ดำและ AVL ในชั้นเรียนอัลกอริทึมของฉันนี่คือสิ่งที่ฉันได้ออกไป (จากการถามอาจารย์, มองผ่านหนังสือสองสามเล่มและ googling เล็กน้อย): ต้นไม้ AVL มีความลึกเฉลี่ยน้อยกว่าต้นไม้สีแดงดำดังนั้นการค้นหาค่าในต้นไม้ AVL จึงเร็วขึ้นอย่างต่อเนื่อง ต้นไม้สีแดงดำทำการเปลี่ยนแปลงโครงสร้างน้อยกว่าเพื่อความสมดุลตัวเองมากกว่าต้นไม้ AVL ซึ่งอาจทำให้พวกเขาเร็วขึ้นสำหรับการแทรก / ลบ ฉันกำลังพูดถึงสิ่งที่อาจเกิดขึ้นเพราะสิ่งนี้จะขึ้นอยู่กับต้นทุนของการเปลี่ยนแปลงโครงสร้างของต้นไม้เนื่องจากมันจะขึ้นอยู่กับรันไทม์และการดำเนินการ (อาจแตกต่างกันโดยสิ้นเชิงในภาษาที่ใช้งานได้เมื่อต้นไม้ไม่เปลี่ยนรูป) มีมาตรฐานออนไลน์มากมายที่เปรียบเทียบ AVL กับต้นไม้สีแดง - ดำ แต่สิ่งที่ทำให้ฉันสะดุดคือศาสตราจารย์ของฉันพูดโดยทั่วไปว่าโดยปกติคุณจะทำสองอย่าง: ไม่ว่าคุณจะไม่สนใจเรื่องประสิทธิภาพมากนักซึ่งในกรณีนี้ความแตกต่างระหว่าง 10-20% ของ AVL กับสีแดง - ดำในกรณีส่วนใหญ่ไม่สำคัญเลย หรือคุณสนใจเกี่ยวกับการแสดงอย่างมากในกรณีที่คุณทิ้งทั้งต้นไม้ AVL และต้นไม้สีแดงดำและไปกับต้นไม้ …

5
มีตัวกรอง anti-Bloom หรือไม่?
กรองบลูมทำให้มันเป็นไปได้อย่างมีประสิทธิภาพติดตามว่าค่าต่างๆได้รับการได้พบระหว่างการประมวลผล เมื่อมีรายการข้อมูลจำนวนมากตัวกรอง Bloom จะส่งผลให้มีการบันทึกหน่วยความจำที่สำคัญบนตารางแฮช คุณสมบัติหลักของตัวกรอง Bloom ซึ่งใช้ร่วมกับตารางแฮชคือมันมักจะพูดว่า "ไม่ใหม่" หากรายการนั้นไม่ใหม่ แต่มีความน่าจะเป็นที่ไม่เป็นศูนย์ที่รายการจะถูกตั้งค่าสถานะเป็น "ไม่ใหม่ "แม้ว่ามันจะเป็นของใหม่ มี "ฟิลเตอร์ต่อต้านบลูม" ซึ่งมีพฤติกรรมตรงกันข้ามหรือไม่? กล่าวอีกนัยหนึ่ง: มีโครงสร้างข้อมูลที่มีประสิทธิภาพซึ่งระบุว่า "ใหม่" หากรายการนั้นเป็นของใหม่ แต่อาจจะพูดว่า "ใหม่" สำหรับบางรายการที่ไม่ใช่ของใหม่ การเก็บรายการที่เห็นก่อนหน้านี้ทั้งหมด (ตัวอย่างเช่นในรายการลิงก์ที่เรียงลำดับ) เป็นไปตามข้อกำหนดแรก แต่อาจใช้หน่วยความจำมาก ฉันหวังว่ามันจะไม่จำเป็นเช่นกันเนื่องจากข้อกำหนดที่สองที่ผ่อนคลาย สำหรับผู้ที่ต้องการการรักษาที่เป็นทางการมากขึ้นให้เขียนถ้าตัวกรอง Bloom คิดว่าเป็นของใหม่,มิฉะนั้นและเขียนถ้าเป็นจริงและมิฉะนั้นx b ( x ) = 0 n ( x ) = 1 x n ( x ) = 0b ( …

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

3
การบันทึกโดยไม่มีอาร์เรย์
ในบทนำสู่อัลกอริทึมของ Cormen และคณะส่วนที่ 15.3 องค์ประกอบของการเขียนโปรแกรมแบบไดนามิกจะอธิบายการบันทึกความจำดังนี้ อัลกอริทึมแบบเรียกซ้ำที่บันทึกช่วยเก็บรักษารายการในตารางสำหรับการแก้ปัญหาสำหรับแต่ละปัญหาย่อย แต่ละรายการในตารางเริ่มต้นมีค่าพิเศษเพื่อระบุว่ารายการยังไม่ได้กรอกเมื่อพบปัญหาย่อยเป็นครั้งแรกในขณะที่อัลกอริทึมแบบเรียกซ้ำเกิดขึ้นการแก้ปัญหาของมันจะถูกคำนวณและจัดเก็บในตาราง ในแต่ละครั้งที่เราพบปัญหาย่อยนี้เราเพียงค้นหาค่าที่เก็บไว้ในตารางและส่งคืน และเพิ่มเป็นเชิงอรรถ: วิธีการนี้อนุมานว่าเรารู้ชุดของพารามิเตอร์ย่อยที่เป็นไปได้ทั้งหมดและเราได้สร้างความสัมพันธ์ระหว่างตำแหน่งของตารางและปัญหาย่อย อีกวิธีที่ทั่วไปกว่าคือการบันทึกโดยใช้การแฮชด้วยพารามิเตอร์ย่อยเป็นคีย์ มีปัญหา DP ที่มีความรู้ที่ต้องการ (หรือทำให้ง่ายขึ้น) ในการจัดเก็บค่าที่บันทึกในพจนานุกรมแทนที่จะเป็นในอาร์เรย์ (หลายมิติ) หรือไม่? ข้อมูลประกอบ: หากนี่เป็นการใช้งานใด ๆ เหตุผลสำหรับคำถามนี้คือฉันพยายามกระตุ้นความคิดของแผนภูมิการค้นหาแบบไบนารี (สมดุลตนเอง) แก่ผู้ที่เพิ่งเห็นการเขียนโปรแกรมแบบไดนามิก

2
กำลังมองหาชุดการใช้งานที่มีหน่วยความจำขนาดเล็ก
ฉันกำลังมองหาการนำไปใช้ของชนิดข้อมูลชุด นั่นคือเราต้อง รักษาเซตย่อยแบบไดนามิก SSS (ขนาด nnn) จากเอกภพของขนาดด้วยยู= { 0 , 1 , 2 , 3 , … , u - 1 }ยู={0,1,2,3,...,ยู-1}U = \{0, 1, 2, 3, \dots , u – 1\}ยูยูu การดำเนินงานinsert(x)(เพิ่มองค์ประกอบxในSSS ) และfind(x)(ตรวจสอบว่าองค์ประกอบxเป็นสมาชิกของSSS ) ฉันไม่สนใจเกี่ยวกับการดำเนินงานอื่น ๆ สำหรับการวางแนวในการใช้งานฉันกำลังทำงานกับเรามีคุณ≈1010ยู≈1010u \approx 10^{10}{10} ฉันรู้ของการใช้งานที่ให้การดำเนินงานทั้งสองในเวลาO ( 1 )O(1)O(1)ดังนั้นฉันกังวลส่วนใหญ่เกี่ยวกับขนาดของโครงสร้างข้อมูล ฉันคาดว่าหลายพันล้านรายการรายการ แต่ต้องการหลีกเลี่ยงการแลกเปลี่ยนให้มากที่สุด ฉันยินดีเสียสละเวลาทำงานหากจำเป็น ค่าตัดจำหน่ายรันไทม์ของO ( …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.