ฉันค่อนข้างคุ้นเคยกับการใช้สแต็คคิวและต้นไม้ในแอปพลิเคชันซอฟต์แวร์ แต่ฉันไม่เคยใช้ Deque (Double Ended Queue) มาก่อน โดยทั่วไปแล้วฉันจะพบพวกเขาที่ไหนในป่า? มันจะอยู่ในสถานที่เดียวกันกับคิว แต่มี gribbilies พิเศษหรือไม่?
ฉันค่อนข้างคุ้นเคยกับการใช้สแต็คคิวและต้นไม้ในแอปพลิเคชันซอฟต์แวร์ แต่ฉันไม่เคยใช้ Deque (Double Ended Queue) มาก่อน โดยทั่วไปแล้วฉันจะพบพวกเขาที่ไหนในป่า? มันจะอยู่ในสถานที่เดียวกันกับคิว แต่มี gribbilies พิเศษหรือไม่?
คำตอบ:
วิธีหนึ่งที่ใช้ deque คือรายการ "อายุ" โดยทั่วไปจะใช้เป็นคุณสมบัติการเลิกทำหรือประวัติ การกระทำใหม่จะถูกแทรกลงใน deque รายการที่เก่าแก่ที่สุดอยู่ที่ด้านหน้า ข้อ จำกัด เกี่ยวกับขนาดของ deque บังคับให้ไอเท็มด้านหน้าถูกลบในบางจุดเมื่อไอเท็มใหม่ถูกแทรก จากนั้นให้วิธีที่รวดเร็วในการเข้าถึงทั้งสองด้านของโครงสร้างเพราะคุณจะรู้ว่ารายการที่เก่าแก่ที่สุดและใหม่ล่าสุดทันทีเพื่อลบด้านหน้าและกระทำสิ่งที่เก่าที่สุดใน O (1) หรือเลิกทำในเวลา O (1)
คำถามที่ยอดเยี่ยม ฉันจำหลักสูตร CS 102 ของเราไม่ได้โดยพูดถึงแอปพลิเคชั่นเดียวสำหรับคิวแบบสองครั้งสุดท้าย
จนถึงวันนี้โปรแกรมเดียวที่ฉันรู้คือกำหนดการทำงานขโมยกล่าวถึงในบทความวิกิพีเดีย
มันทำงานเป็นหลักดังนี้
ในความปกติรูปแบบขั้นตอนเดียว threaded ทุกฟังก์ชั่นการโทรผลักดันบันทึกยืนยันการใช้งานในสิ่งที่เรียกว่าสแต็คโทร เร็กคอร์ดการเปิดใช้งานมีตัวแปรท้องถิ่นและพารามิเตอร์ของการโทรนั้น เมื่อการเรียกใช้เมธอดเสร็จสมบูรณ์ (“ คืนค่า”) เรคคอร์ดการเปิดใช้งานล่าสุดจะถูกเปิดจากสแต็คการโทร
สิ่งนี้มีความสำคัญอย่างยิ่งเนื่องจากเป็นวิธีการเรียกใช้ซ้ำ: โครงสร้างของการเรียกซ้ำถูกแสดงในสถานะปัจจุบันของ call stack
เมื่อทำการอัลกอริทึมแบบเรียกซ้ำเราสามารถใช้ประโยชน์จากคุณสมบัตินี้โดยแทนที่ call stack ด้วยคิวการโทร ทุกเธรดในการคำนวณจะได้รับคิวการโทรของตนเองและจะมีการพุชและป็อปเร็กคอร์ดการเปิดใช้งานเหมือนกับในการเรียกใช้
แต่เมื่อด้ายได้เสร็จสิ้นการทำงานของมัน (= คิวเรียกเป็นที่ว่างเปล่า) ก็ขโมยทำงานจากหัวข้ออื่นโดยการลบบันทึกการเปิดใช้งานจากคิวโทรหัวข้อที่โดยการเอาจาก“ผิด” ในตอนท้าย
โดยทั่วไปคิวการโทรทำหน้าที่เป็นสองกองการโทรซึ่งตอนนี้ทำหน้าที่สองหัวข้อ