Voy a intentar una prueba para demostrar que no se puede hacer.
Supongamos que hay una cola Q simulada por 3 pilas, A, B y C.
Aserciones
ASRT0: = Además, suponga que Q puede simular operaciones {queue, dequeue} en O (1). Esto significa que existe una secuencia específica de pila de push / pops para cada operación de cola / cola que se simulará.
Sin pérdida de generalidad, suponga que las operaciones de la cola son deterministas.
Deje que los elementos en cola en Q se numeren 1, 2, ..., en función de su orden de cola, con el primer elemento en cola en Q definido como 1, el segundo como 2, y así sucesivamente.
Definir
Q(0) :=
El estado de Q cuando hay 0 elementos en Q (y, por lo tanto, 0 elementos en A, B y C)
Q(1) :=
El estado de Q (y A, B y C) después de 1 operación de cola en Q(0)
Q(n) :=
El estado de Q (y A, B y C) después de n operaciones de cola en Q(0)
Definir
|Q(n)| :=
el número de elementos en Q(n)
(por lo tanto |Q(n)| = n
)
A(n) :=
El estado de la pila A cuando el estado de Q es Q(n)
|A(n)| :=
la cantidad de elementos en A(n)
Y definiciones similares para las pilas B y C.
Trivialmente
|Q(n)| = |A(n)| + |B(n)| + |C(n)|
---
|Q(n)|
obviamente no tiene límites en n.
Por lo tanto, al menos uno de |A(n)|
, |B(n)|
o |C(n)|
no está acotado en n.
WLOG1
, supongamos que la pila A no tiene límites y las pilas B y C están limitadas.
Definir * B_u :=
un límite superior de B * C_u :=
un límite superior de C *K := B_u + C_u + 1
WLOG2
, para un n tal que |A(n)| > K
, seleccione K elementos de Q(n)
. Suponga que 1 de esos elementos está en A(n + x)
, para todos x >= 0
, es decir, el elemento siempre está en la pila A, sin importar cuántas operaciones de cola se realicen.
Entonces podemos definir
ASRT1 :=
El número de pops necesarios para eliminar X de Q(n)
al menos es al menosAbv(n)
De ( ASRT0
) y ( ASRT1
), ASRT2 := Abv(n)
deben estar delimitados.
Si Abv(n)
no está acotado, entonces si se requieren 20 colas para quitar X Q(n)
, requerirá al menosAbv(n)/20
pops. Lo cual es ilimitado. 20 puede ser cualquier constante.
Por lo tanto,
ASRT3 := Blo(n) = |A(n)| - Abv(n)
debe ser ilimitado.
WLOG3
, podemos seleccionar los elementos K desde la parte inferior de A(n)
, y uno de ellos es A(n + x)
para todosx >= 0
X(n) :=
ese elemento, para cualquier n dado
ASRT4 := Abv(n) >= |A(n)| - K
Cada vez que un elemento se pone en cola en Q(n)
...
WLOG4
, supongamos que B y C ya están llenos a sus límites superiores. Suponga que X(n)
se ha alcanzado el límite superior para los elementos anteriores . Entonces, un nuevo elemento entra en A.
WLOG5
, supongamos que como resultado, el nuevo elemento debe ingresar a continuación X(n)
.
ASRT5 :=
El número de pops requeridos para poner un elemento debajo X(n) >= Abv(X(n))
De (ASRT4)
, Abv(n)
es ilimitado en n.
Por lo tanto, la cantidad de pops requeridos para poner un elemento debajo X(n)
no tiene límites.
Esto contradice ASRT1
, por lo tanto, no es posible simular una O(1)
cola con 3 pilas.
Es decir
Al menos 1 pila debe ser ilimitada.
Para un elemento que permanece en esa pila, el número de elementos que se encuentran arriba debe estar limitado, o la operación de eliminación de la cola para eliminar ese elemento será ilimitada.
Sin embargo, si el número de elementos por encima está limitado, alcanzará un límite. En algún momento, un nuevo elemento debe entrar debajo de él.
Dado que siempre podemos elegir el elemento antiguo entre uno de los pocos elementos más bajos de esa pila, puede haber un número ilimitado de elementos por encima (en función del tamaño ilimitado de la pila ilimitada).
Para ingresar un nuevo elemento debajo de él, dado que hay un número ilimitado de elementos encima, se requiere un número ilimitado de elementos emergentes para colocar el nuevo elemento debajo de él.
Y de ahí la contradicción.
Hay 5 declaraciones WLOG (sin pérdida de generalidad). En cierto sentido, pueden entenderse intuitivamente como verdaderas (pero dado que son 5, puede llevar algún tiempo). La prueba formal de que no se pierde la generalidad se puede derivar, pero es extremadamente larga. Se omiten.
Admito que tal omisión podría dejar las declaraciones del WLOG en cuestión. Con la paranoia de un programador por errores, verifique las declaraciones de WLOG si lo desea.
La tercera pila también es irrelevante. Lo que importa es que hay un conjunto de pilas limitadas y un conjunto de pilas ilimitadas. El mínimo necesario para un ejemplo es de 2 pilas. El número de pilas debe ser, por supuesto, finito.
Por último, si tengo razón en que no hay pruebas, entonces debería haber una prueba inductiva más fácil disponible. Probablemente basado en lo que sucede después de cada cola (haga un seguimiento de cómo afecta el peor de los casos dado el conjunto de todos los elementos en la cola).