การย้อนกลับรายการโดยใช้สองคิว
คำถามนี้ได้รับแรงบันดาลใจจากคำถามที่มีอยู่เกี่ยวกับว่าสแต็กสามารถจำลองได้โดยใช้สองคิวในเวลาตัดจำหน่ายต่อการดำเนินการสแต็ก คำตอบดูเหมือนจะไม่เป็นที่รู้จัก นี่คือคำถามที่เฉพาะเจาะจงมากขึ้นซึ่งตรงกับกรณีพิเศษที่การดำเนินการ PUSH ทั้งหมดจะดำเนินการก่อนตามด้วยการดำเนินการ POP ทั้งหมด รายการขององค์ประกอบNสามารถย้อนกลับได้อย่างมีประสิทธิภาพโดยใช้สองคิวที่ว่างเปล่าเริ่มแรกได้อย่างไร การดำเนินการทางกฎหมายคือ:O(1)O(1)O(1)NNN จัดวางองค์ประกอบถัดไปจากรายการอินพุต (ไปยังส่วนท้ายของคิวทั้งสอง) ถอนออกจากองค์ประกอบที่หัวของคิวทั้งสองและจัดคิวอีกครั้ง (ไปที่ส่วนท้ายของคิวทั้งสอง) ถอนออกจากองค์ประกอบที่ส่วนหัวของคิวอย่างใดอย่างหนึ่งและเพิ่มลงในรายการผลลัพธ์ ถ้ารายการป้อนข้อมูลประกอบด้วยองค์ประกอบวิธีการที่ไม่จำนวนขั้นต่ำของการดำเนินงานที่จำเป็นในการสร้างรายชื่อส่งออกตรงกันข้าม[ N , N - 1 , . . , 2 , 1 ]ประพฤติตน? หลักฐานที่แสดงว่ามันโตเร็วกว่าO ( N )จะน่าสนใจเป็นพิเศษเพราะมันจะช่วยแก้ปัญหาเดิมในแง่ลบได้[1,2,...,N−1,N][1,2,...,N−1,N][1,2,...,N-1,N][N,N−1,...,2,1][N,N−1,...,2,1][N,N-1,...,2,1]O(N)O(N)O(N) Update (15 มกราคม 2011): ปัญหาสามารถแก้ไขได้ในดังที่แสดงในคำตอบที่ส่งและความคิดเห็นของพวกเขา; และขอบเขตล่างของΩ ( N )เป็นเรื่องเล็กน้อย ขอบเขตเหล่านี้สามารถปรับปรุงได้หรือไม่?O(NlogN)O(NlogN)O(N \log N)Ω(N)Ω(N)\Omega(N)