ฉันจะพยายามพิสูจน์เพื่อแสดงว่าไม่สามารถทำได้
สมมติว่ามีคิว Q ที่จำลองโดย 3 กอง A, B และ C
ยืนยัน
ASRT0: = นอกจากนี้สมมติว่า Q สามารถจำลองการทำงาน {คิว, dequeue} ใน O (1) ซึ่งหมายความว่ามีลำดับเฉพาะของการพุช / ป๊อปที่ระบุสำหรับการดำเนินการคิว / การแยกทั้งหมดที่จะจำลอง
โดยไม่มีการสูญเสียความคิดทั่วไปการสันนิษฐานว่าการดำเนินการคิวนั้นถูกกำหนด
ปล่อยให้อิลิเมนต์ที่ถูกจัดคิวเข้าคิวเป็นหมายเลข 1, 2, ... ตามลำดับคิวโดยอิลิเมนต์แรกที่ถูกจัดคิวเป็นคิวจะถูกกำหนดเป็น 1, อันที่สองเป็น 2 และอื่น ๆ
กำหนด
Q(0) :=
สถานะของ Q เมื่อมี 0 องค์ประกอบใน Q (และทำให้ 0 องค์ประกอบใน A, B และ C)
Q(1) :=
สถานะของ Q (และ A, B และ C) หลังจากเปิด 1 คิว Q(0)
Q(n) :=
สถานะของ Q (และ A, B และ C) หลังจากการดำเนินการ n คิวบน Q(0)
กำหนด
|Q(n)| :=
จำนวนองค์ประกอบในQ(n)
(ดังนั้น|Q(n)| = n
)
A(n) :=
สถานะของสแต็ก A เมื่อสถานะของ Q คือ Q(n)
|A(n)| :=
จำนวนองค์ประกอบใน A(n)
และคำจำกัดความที่คล้ายกันสำหรับสแตก B และ C
นิด ๆ ,
|Q(n)| = |A(n)| + |B(n)| + |C(n)|
---
|Q(n)|
เห็นได้ชัดว่าไม่มีข้อ จำกัด ใน n
ดังนั้นอย่างน้อยหนึ่ง|A(n)|
, |B(n)|
หรือ|C(n)|
เป็นมากมายบน n
WLOG1
สมมติว่า stack A ไม่มีขอบเขตและสแต็ก B และ C ถูกผูกไว้
กำหนด * B_u :=
ขอบเขตบนของ B * C_u :=
ขอบเขตบนของ C *K := B_u + C_u + 1
WLOG2
, สำหรับ n เช่นที่|A(n)| > K
เลือกองค์ประกอบ K Q(n)
จาก สมมติว่า 1 ขององค์ประกอบเหล่านั้นมีอยู่A(n + x)
สำหรับทุกคนx >= 0
นั่นคือองค์ประกอบนั้นจะอยู่ในสแต็ก A เสมอไม่ว่าจะดำเนินการคิวจำนวนเท่าใด
จากนั้นเราสามารถกำหนด
ASRT1 :=
จำนวนของ pops ที่ต้องใช้ในการ dequeue X Q(n)
เป็นอย่างน้อยAbv(n)
จะต้องมีขอบเขตจาก ( ASRT0
) และ ( ASRT1
)ASRT2 := Abv(n)
หากAbv(n)
ไม่ถูก จำกัด ดังนั้นหากต้องการ 20 dequeue เพื่อ dequeue X จากQ(n)
จะต้องAbv(n)/20
ปรากฏอย่างน้อย ซึ่งมีมากมาย 20 สามารถคงที่ใด ๆ
ดังนั้น,
ASRT3 := Blo(n) = |A(n)| - Abv(n)
จะต้องไม่ถูก จำกัด
WLOG3
เราสามารถเลือกองค์ประกอบ K จากด้านล่างของA(n)
และหนึ่งในนั้นคือA(n + x)
สำหรับทั้งหมดx >= 0
X(n) :=
องค์ประกอบนั้นสำหรับ n ใด ๆ ก็ตาม
ASRT4 := Abv(n) >= |A(n)| - K
เมื่อใดก็ตามที่องค์ประกอบเข้าคิวQ(n)
...
WLOG4
สมมติว่า B และ C เต็มไปด้วยขอบเขตแล้ว สมมติว่าถึงขอบเขตบนขององค์ประกอบด้านบนX(n)
แล้ว จากนั้นองค์ประกอบใหม่จะเข้าสู่ A
WLOG5
X(n)
สมมติว่าเป็นผลให้องค์ประกอบใหม่จะต้องป้อนด้านล่าง
ASRT5 :=
จำนวนของป็อปที่ต้องใช้เพื่อวางองค์ประกอบด้านล่าง X(n) >= Abv(X(n))
จาก(ASRT4)
, Abv(n)
เป็นมากมายบน n
ดังนั้นจำนวนของ pops ที่จำเป็นต้องใส่องค์ประกอบด้านล่างX(n)
จึงไม่ได้ จำกัด
ตรงกันข้ามนี้ASRT1
จึงเป็นไปไม่ได้ที่จะจำลองO(1)
คิวมี 3 กอง
กล่าวคือ
อย่างน้อย 1 กองจะต้องไม่ถูก จำกัด
สำหรับองค์ประกอบที่อยู่ในสแต็กนั้นจำนวนองค์ประกอบด้านบนจะต้องถูกล้อมรอบหรือการดำเนินการถอนออกจากตำแหน่งเพื่อลบองค์ประกอบนั้นจะไม่ถูก จำกัด
อย่างไรก็ตามหากจำนวนองค์ประกอบด้านบนถูก จำกัด ขอบเขตก็จะถึงขีด จำกัด ในบางจุดองค์ประกอบใหม่จะต้องป้อนด้านล่าง
เนื่องจากเราสามารถเลือกองค์ประกอบเก่าจากหนึ่งในองค์ประกอบไม่กี่แห่งที่น้อยที่สุดของสแต็กนั้นจึงอาจมีองค์ประกอบที่ไม่ จำกัด จำนวนอยู่ด้านบน (ขึ้นอยู่กับขนาดที่ไม่ จำกัด ของสแต็กที่ไม่ถูก จำกัด )
ในการเข้าสู่องค์ประกอบใหม่ด้านล่างเนื่องจากมีจำนวนองค์ประกอบที่ไม่ จำกัด ที่ด้านบนจึงจำเป็นต้องมีจำนวนป๊อปที่ไม่ จำกัด เพื่อใส่องค์ประกอบใหม่ที่อยู่ด้านล่าง
และทำให้เกิดความขัดแย้ง
มีข้อความ WLOG 5 ข้อความ ในบางแง่พวกเขาสามารถเข้าใจได้โดยสัญชาตญาณว่าเป็นจริง (แต่เนื่องจากพวกเขาเป็น 5 มันอาจใช้เวลาสักครู่) การพิสูจน์อย่างเป็นทางการว่าไม่มีการสูญหายใด ๆ เกิดขึ้นได้ แต่มีความยาวมาก พวกเขากำลังละเว้น
ฉันยอมรับว่าการละเลยดังกล่าวอาจทำให้คำสั่ง WLOG เป็นปัญหา ด้วยความหวาดระแวงของโปรแกรมเมอร์สำหรับข้อบกพร่องโปรดตรวจสอบคำสั่ง WLOG หากคุณต้องการ
กองซ้อนที่สามนั้นไม่เกี่ยวข้องด้วย สิ่งที่สำคัญคือมีชุดของกองที่ถูกล้อมรอบและชุดของกองที่ไม่มีขอบเขต ขั้นต่ำที่จำเป็นสำหรับตัวอย่างคือ 2 กอง จำนวนสแต็คต้องแน่นอนแน่นอน
ท้ายที่สุดถ้าฉันพูดถูกว่าไม่มีข้อพิสูจน์ก็ควรมีหลักฐานทางอุปนัยที่ง่ายกว่า อาจขึ้นอยู่กับสิ่งที่เกิดขึ้นหลังจากทุกคิว (ติดตามว่ามันมีผลต่อกรณี dequeue ที่เลวร้ายที่สุดที่กำหนดชุดขององค์ประกอบทั้งหมดในคิว)