Ich werde einen Beweis versuchen, um zu zeigen, dass dies nicht möglich ist.
Angenommen, es gibt eine Warteschlange Q, die durch 3 Stapel A, B und C simuliert wird.
Behauptungen
ASRT0: = Nehmen wir außerdem an, dass Q Operationen {queue, dequeue} in O (1) simulieren kann. Dies bedeutet, dass für jede zu simulierende Warteschlangen- / Warteschlangenoperation eine bestimmte Folge von Stack-Push / Pops vorhanden ist.
Nehmen Sie ohne Verlust der Allgemeinheit an, dass die Warteschlangenoperationen deterministisch sind.
Lassen Sie die in Q in die Warteschlange gestellten Elemente basierend auf ihrer Reihenfolge der Warteschlangen mit 1, 2, ... nummerieren, wobei das erste in Q in die Warteschlange gestellte Element als 1, das zweite als 2 usw. definiert wird.
Definieren
Q(0) :=
Der Zustand von Q, wenn 0 Elemente in Q vorhanden sind (und somit 0 Elemente in A, B und C)
Q(1) :=
Der Zustand von Q (und A, B und C) nach 1 Warteschlangenoperation ein Q(0)
Q(n) :=
Der Zustand von Q (und A, B und C) nach n Warteschlangenoperationen an Q(0)
Definieren
|Q(n)| :=
die Anzahl der Elemente in Q(n)
(daher |Q(n)| = n
)
A(n) :=
der Zustand des Stapels A, wenn der Zustand von Q ist Q(n)
|A(n)| :=
die Anzahl der Elemente in A(n)
Und ähnliche Definitionen für die Stapel B und C.
Trivial,
|Q(n)| = |A(n)| + |B(n)| + |C(n)|
---
|Q(n)|
ist offensichtlich unbegrenzt auf n.
Daher mindestens eines von |A(n)|
, |B(n)|
oder |C(n)|
unbeschränkt auf n.
WLOG1
Angenommen, Stapel A ist unbegrenzt und Stapel B und C sind begrenzt.
Definiere * B_u :=
eine Obergrenze von B * C_u :=
eine Obergrenze von C *K := B_u + C_u + 1
WLOG2
Wählen Sie für ein n so aus, dass |A(n)| > K
Sie K Elemente aus auswählen Q(n)
. Angenommen, eines dieser Elemente befindet sich A(n + x)
für alle x >= 0
, dh das Element befindet sich immer im Stapel A, unabhängig davon, wie viele Warteschlangenoperationen ausgeführt werden.
Dann können wir definieren
ASRT1 :=
Die Anzahl der Pops, die erforderlich sind, um X aus der Warteschlange zu entfernen, Q(n)
beträgt mindestensAbv(n)
Von ( ASRT0
) und ( ASRT1
) ASRT2 := Abv(n)
muss begrenzt werden.
Wenn Abv(n)
es unbegrenzt ist, wenn mindestens 20 Warteschlangen erforderlich sind, um X aus der Warteschlange zu entfernen Q(n)
, sind mindestens Abv(n)/20
Pops erforderlich . Welches ist unbegrenzt. 20 kann eine beliebige Konstante sein.
Deshalb,
ASRT3 := Blo(n) = |A(n)| - Abv(n)
muss unbegrenzt sein.
WLOG3
können wir die K-Elemente unten auswählen A(n)
, und eines davon ist A(n + x)
für alle dax >= 0
X(n) :=
dieses Element für jedes gegebene n
ASRT4 := Abv(n) >= |A(n)| - K
Immer wenn ein Element in die Warteschlange gestellt wird Q(n)
...
WLOG4
Angenommen, B und C sind bereits bis zu ihren oberen Grenzen gefüllt. Angenommen, die Obergrenze für die obigen Elemente X(n)
wurde erreicht. Dann tritt ein neues Element in A ein.
WLOG5
Angenommen, das neue Element muss als Ergebnis unten eingegeben werden X(n)
.
ASRT5 :=
Die Anzahl der Pops, die erforderlich sind, um ein Element darunter zu platzieren X(n) >= Abv(X(n))
Von (ASRT4)
, Abv(n)
ist unbegrenzt auf n.
Daher ist die Anzahl der Pops, die erforderlich sind, um ein Element darunter zu platzieren, X(n)
unbegrenzt.
Dies widerspricht ASRT1
daher, dass es nicht möglich ist, eine O(1)
Warteschlange mit 3 Stapeln zu simulieren .
Dh
Mindestens 1 Stapel muss unbegrenzt sein.
Für ein Element, das in diesem Stapel verbleibt, muss die Anzahl der darüber liegenden Elemente begrenzt werden. Andernfalls ist die Dequeue-Operation zum Entfernen dieses Elements unbegrenzt.
Wenn jedoch die Anzahl der darüber liegenden Elemente begrenzt ist, erreicht sie eine Grenze. Irgendwann muss ein neues Element darunter eintreten.
Da wir das alte Element immer aus einem der niedrigsten Elemente dieses Stapels auswählen können, kann es eine unbegrenzte Anzahl von Elementen darüber geben (basierend auf der unbegrenzten Größe des unbegrenzten Stapels).
Um ein neues Element darunter einzugeben, ist eine unbegrenzte Anzahl von Elementen erforderlich, um das neue Element darunter zu platzieren, da sich eine unbegrenzte Anzahl von Elementen darüber befindet.
Und damit der Widerspruch.
Es gibt 5 WLOG-Anweisungen (ohne Verlust der Allgemeinheit). In gewissem Sinne können sie intuitiv als wahr verstanden werden (aber wenn sie 5 sind, kann es einige Zeit dauern). Der formale Beweis, dass keine Allgemeinheit verloren geht, kann abgeleitet werden, ist aber äußerst langwierig. Sie werden weggelassen.
Ich gebe zu, dass eine solche Auslassung die fraglichen WLOG-Aussagen belassen könnte. Bei der Paranoia eines Programmierers für Fehler überprüfen Sie bitte die WLOG-Anweisungen, wenn Sie möchten.
Der dritte Stapel ist ebenfalls irrelevant. Was zählt, ist, dass es eine Reihe von begrenzten Stapeln und eine Reihe von unbegrenzten Stapeln gibt. Das für ein Beispiel erforderliche Minimum beträgt 2 Stapel. Die Anzahl der Stapel muss natürlich endlich sein.
Wenn ich recht habe, dass es keinen Beweis gibt, sollte es einen einfacheren induktiven Beweis geben. Wahrscheinlich basierend auf dem, was nach jeder Warteschlange passiert (verfolgen Sie, wie sich dies auf den schlimmsten Fall der Warteschlange auswirkt, wenn alle Elemente in der Warteschlange vorhanden sind).