Saya akan mencoba bukti untuk menunjukkan bahwa itu tidak bisa dilakukan.
Misalkan ada antrian Q yang disimulasikan 3 stack, A, B dan C.
Pernyataan
ASRT0: = Selanjutnya, asumsikan bahwa Q dapat mensimulasikan operasi {queue, dequeue} dalam O (1). Ini berarti bahwa terdapat urutan tertentu dari tumpukan push / pops untuk setiap operasi antrian / dequeue yang akan disimulasikan.
Tanpa kehilangan keumuman, asumsikan operasi antrian bersifat deterministik.
Biarkan elemen yang dimasukkan ke dalam Q diberi nomor 1, 2, ..., berdasarkan urutan antriannya, dengan elemen pertama yang dimasukkan ke dalam Q didefinisikan sebagai 1, yang kedua sebagai 2, dan seterusnya.
Menetapkan
Q(0) :=
Keadaan Q ketika ada 0 elemen di Q (dan dengan demikian 0 elemen di A, B dan C)
Q(1) :=
Keadaan Q (dan A, B dan C) setelah operasi antrian 1 Q(0)
Q(n) :=
Keadaan Q (dan A, B dan C) setelah operasi antrian n Q(0)
Menetapkan
|Q(n)| :=
jumlah elemen dalam Q(n)
(oleh karena itu |Q(n)| = n
)
A(n) :=
status tumpukan A saat status Q adalah Q(n)
|A(n)| :=
jumlah elemen dalam A(n)
Dan definisi serupa untuk tumpukan B dan C.
Sepele,
|Q(n)| = |A(n)| + |B(n)| + |C(n)|
---
|Q(n)|
jelas tidak terikat pada n.
Oleh karena itu, setidaknya satu dari |A(n)|
, |B(n)|
atau |C(n)|
tidak terikat pada n.
WLOG1
, misalkan tumpukan A tidak dibatasi dan tumpukan B dan C dibatasi.
Tentukan * B_u :=
batas atas B * C_u :=
batas atas C *K := B_u + C_u + 1
WLOG2
, untuk n seperti itu |A(n)| > K
, pilih K elemen dari Q(n)
. Misalkan 1 dari elemen tersebut ada di A(n + x)
, untuk semua x >= 0
, yaitu elemen selalu dalam tumpukan A tidak peduli berapa banyak operasi antrian yang dilakukan.
Kemudian kita bisa mendefinisikan
ASRT1 :=
Jumlah munculan yang diperlukan untuk membatalkan antrean X Q(n)
setidaknyaAbv(n)
Dari ( ASRT0
) dan ( ASRT1
), ASRT2 := Abv(n)
harus dibatasi.
Jika Abv(n)
tidak dibatasi, maka jika 20 dequeue diperlukan untuk menghapus X dari Q(n)
, itu akan membutuhkan setidaknya Abv(n)/20
pop. Yang tidak terbatas. 20 bisa konstan.
Karena itu,
ASRT3 := Blo(n) = |A(n)| - Abv(n)
harus tidak terikat.
WLOG3
, kita dapat memilih elemen K dari bagian bawah A(n)
, dan salah satunya ada di A(n + x)
semuax >= 0
X(n) :=
elemen itu, untuk n tertentu
ASRT4 := Abv(n) >= |A(n)| - K
Kapanpun sebuah elemen dimasukkan ke dalam Q(n)
...
WLOG4
, misalkan B dan C sudah terisi hingga batas atasnya. Misalkan batas atas untuk elemen di atas X(n)
telah tercapai. Kemudian, elemen baru memasuki A.
WLOG5
, misalkan sebagai hasilnya, elemen baru harus masuk di bawah X(n)
.
ASRT5 :=
Jumlah pop yang diperlukan untuk meletakkan elemen di bawah X(n) >= Abv(X(n))
Dari (ASRT4)
, Abv(n)
tidak dibatasi pada n.
Oleh karena itu, jumlah pop yang diperlukan untuk meletakkan elemen di bawah X(n)
ini tidak terbatas.
Ini bertentangan ASRT1
, oleh karena itu, tidak mungkin untuk mensimulasikan O(1)
antrian dengan 3 tumpukan.
Yaitu
Setidaknya 1 tumpukan harus dilepas.
Untuk elemen yang tetap dalam tumpukan itu, jumlah elemen di atasnya harus dibatasi, atau operasi dequeue untuk menghapus elemen itu tidak akan dibatasi.
Namun jika jumlah elemen di atasnya dibatasi, maka akan mencapai batasnya. Di beberapa titik, elemen baru harus masuk di bawahnya.
Karena kita selalu dapat memilih elemen lama dari salah satu dari sedikit elemen terendah dari tumpukan itu, mungkin ada sejumlah elemen tak terbatas di atasnya (berdasarkan ukuran tak terbatas dari tumpukan tak terbatas).
Untuk memasukkan elemen baru di bawahnya, karena ada elemen dalam jumlah tak terbatas di atasnya, jumlah pop tak terbatas diperlukan untuk meletakkan elemen baru di bawahnya.
Dan dengan demikian kontradiksi.
Ada 5 pernyataan WLOG (Tanpa kehilangan keumuman). Dalam beberapa hal, mereka dapat dipahami secara intuitif sebagai kebenaran (tetapi mengingat nilainya 5, mungkin perlu waktu). Bukti formal bahwa tidak ada hal umum yang hilang dapat diturunkan, tetapi sangat panjang. Mereka dihilangkan.
Saya mengakui bahwa kelalaian seperti itu mungkin akan membuat pernyataan WLOG dipertanyakan. Dengan paranoia programmer terhadap bug, harap verifikasi pernyataan WLOG jika Anda mau.
Tumpukan ketiga juga tidak relevan. Yang penting adalah ada satu set tumpukan terbatas, dan satu set tumpukan tidak terbatas. Minimal yang dibutuhkan untuk sebuah contoh adalah 2 tumpukan. Jumlah tumpukan harus, tentu saja, terbatas.
Terakhir, jika saya benar bahwa tidak ada bukti, maka harus ada bukti induktif yang lebih mudah tersedia. Mungkin berdasarkan pada apa yang terjadi setelah setiap antrean (pantau terus bagaimana hal itu memengaruhi kasus dequeue terburuk mengingat kumpulan semua elemen dalam antrean).