Minimumli deque
Minimumli deque
Vazifa
Quyidagi amallarni qo‘llab-quvvatlaydigan dekni amalga oshirish:
push_front(x)— boshiga qo‘shishpush_back(x)— oxiriga qo‘shishpop_front()— boshidan o‘chirishpop_back()— oxiridan o‘chirishget_min()— minimal elementni olish
G‘oya: ikki tuzilma (ikki MinStack) ushlab turamiz, lekin «navbatdagidek hammasini quyib yuborish» o‘rniga
biz qayta muvozanatlaymiz, qismlardan biri bo‘sh bo‘lib qolsa (o‘lchamlarni taxminan teng qilamiz).
G‘oya
Dekni ikki qism sifatida saqlaymiz:
L(left) — dekning boshiga yaqin elementlar (stekning tepasi = front)R(right) — dekning oxiriga yaqin elementlar (stekning tepasi = back)
Shunda:
frontLning tepasida yotadibackRning tepasida yotadi- dek minimumi =
min(L.min, R.min)
Agar bizga tomondan o‘chirish kerak bo‘lsa, lekin mos stek bo‘sh bo‘lsa:
- barcha elementlarni to‘g‘ri tartibda yig‘amiz,
- yarmiga bo‘lamiz,
LvaRo‘lchamlari yaqin bo‘ladigan qilib qayta joylaymiz.