ฉันมีวัตถุบางอย่างที่มีความสำคัญว่าเป็นประเภทสารประกอบและเป็นเพียงการสั่งซื้อบางส่วน ฉันจำเป็นต้องเลือกวัตถุตามลำดับความสำคัญนี้ (เช่นให้ผลผลิตน้อยที่สุดในแต่ละครั้ง) แต่แทนที่จะทำตามคำสั่งโดยพลการฉันจะชอบถ้าคิวนั้นมีความมั่นคงในแง่ที่ว่าถ้ามีองค์ประกอบขั้นต่ำมากกว่าหนึ่งชิ้นก็ควรคืนค่าที่เก่าที่สุดก่อน
มีโครงสร้างข้อมูลฮีปใดบ้างที่สามารถใช้กับการสั่งซื้อบางส่วนได้ หรือการแก้ไขคิวลำดับความสำคัญปกติเพื่อทำงานกับมัน? ตัวเลือกทั่วไปสำหรับอัลกอริทึมที่ฉันต้องการคือไบนารีแบบง่ายหรือ 4-ary heap แต่ไม่สามารถใช้กับการสั่งซื้อบางส่วนได้
การสนับสนุนค่าลำดับความสำคัญ:
- ≼ ขข≼ ⋚ ̸ ข
- การค้นหาinfima (glb) และ suprema (lub) เป็นสูงสุดปีดังกล่าวว่าY \ preccurlyeq x_i คำนวณ infimum ของnค่าใช้เวลาO (n)เวลา มีค่าน้อยที่สุด (และสูงสุด) ของทุกชุดy y ≼ x i n O ( n )
- สามารถกำหนดส่วนขยายเชิงเส้นสำหรับการสั่งซื้อบางส่วนได้ การใช้สำหรับคิวลำดับความสำคัญเป็นวิธีที่ง่ายเนื่องจากอัลกอริทึมทำงานในลักษณะนั้น แต่คำสั่งซื้อนั้นมีผลต่อประสิทธิภาพและลำดับของการแทรกดูเหมือนจะดีที่สุดในการหลีกเลี่ยงกรณีที่เลวร้ายที่สุด
นอกจากนี้อัลกอริทึมที่ฉันต้องการใช้สิ่งนี้จำเป็นต้องรู้ถึงลำดับความสำคัญต่ำสุดในคิว
ลำดับความสำคัญมีความหมายที่แท้จริงของโลก แต่อาจมีการเปลี่ยนแปลงได้ดังนั้นจึงดูเหมือนว่าจะไม่สามารถใช้คุณสมบัติอื่น ๆ ได้
หมายเหตุ: ฮีปแบบไบนารีไม่ทำงานกับการสั่งซื้อบางส่วน สมมติกองไบนารีกับ,และซึ่งและและค พวกเขาอยู่ในลำดับที่ดังนั้นขค≼ ค⋚ ̸ ข⋚ ̸ ค
a (0)
/ \
b (1) c (2)
ตอนนี้dถูกแทรก ตำแหน่งว่างถัดไปคือ 3 ลูกซ้ายของเราจึงได้
a (0)
/ \
b (1) c (2)
/
d (3)
ถ้า (ซึ่งหมายถึงจากการเปลี่ยนแปลง แต่ไม่ได้พูดอะไรเกี่ยวกับและ ) และดังนั้นจึงไม่สลับกับเพราะมันไม่น้อย แต่จริงๆแล้วมันน้อยกว่าแต่ก็ไม่ได้ถูกเปรียบเทียบกับมันดังนั้นตอนนี้ค่าคงที่หลักของ heap จะไม่ถูกเก็บไว้ ด้านบนไม่น้อยd ≼ คงขง⋚ ̸ ขงข
ฉันสงสัยว่ากองป่าในรูปแบบของกองทวินามสามารถทำงานได้ โดยทั่วไปสิ่งสำคัญคือการเปรียบเทียบค่าใหม่กับรูทเสมอและเชื่อมโยงองค์ประกอบที่เปรียบเทียบกันเท่านั้น มันจะทำให้ต้นไม้ในป่ามีขนาดแบบสุ่มและทำให้ความซับซ้อนขึ้นอยู่กับจำนวนของชุดที่เปรียบมิได้ร่วมกันในกอง ฉันค่อนข้างสงสัยว่าความซับซ้อนไม่สามารถแก้ไขได้ (เราต้องเปรียบเทียบต่อไปจนกว่าเราจะตีองค์ประกอบที่เปรียบเทียบได้) ฉันอาจพลาดบางสิ่งบางอย่างดังนั้นฉันจึงออกจากที่เปิด
หมายเหตุ: การเรียงลำดับเป็นบางส่วนและในขณะที่มีวิธีกำหนดส่วนขยายเชิงเส้นสำหรับส่วนเพิ่มการประทับเวลาและใช้เป็นเกณฑ์รองไม่ใช่หนึ่งในนั้น สมมติว่าเรามอบหมายประทับเวลาสำหรับแต่ละและกำหนดสั่งซื้อเป็น≼ 'ข IFF ≼ ขหรือ ( ข⋠และT ( ) ≤ T ( ข) . แล้วสมมติว่าเรามีความแตกต่างกัน, b , ca ≼ ′เช่นว่าและค≤ จากนั้นa ≼ ′ bและb ≼ ′ cแต่c ≼ ′ aดังนั้นความสัมพันธ์ไม่ใช่สกรรมกริยาดังนั้นจึงไม่ใช่คำสั่งเลย การขยายแบบนี้ใช้ได้กับการเรียงลำดับแบบอ่อนเท่านั้น แต่ไม่ใช่การขยายบางส่วน
แก้ไข:ฉันรู้ว่าไม่เพียง แต่จะไม่ จำกัด จำนวนชุดที่กำหนด แต่จริง ๆ แล้วฉันจำเป็นต้องได้รับองค์ประกอบที่น้อยที่สุดในคิวอย่างมีประสิทธิภาพ ตอนนี้ฉันกำลังพิจารณาว่าการเพิ่มโหนดพิเศษที่มี infima ของ subtrees ในโครงสร้างฮีพทั่วไปบางส่วนจะช่วยได้หรือไม่