Minimumli navbat
Minimumli navbat
Vazifa
Uchta amalni qo‘llab-quvvatlaydigan navbatni amalga oshirish:
push(x)— elementni oxiriga qo‘shishpop()— elementni boshidan o‘chirishget_min()— minimal elementni olish
Barcha amallar O(1) amortizatsiyalangan ishlashi kerak.
G‘oya
Navbatni ikki stek yordamida amalga oshirish mumkin:
in— elementlarni qo‘shish uchun stekout— elementlarni o‘chirish uchun stek
Agar ikkala stek ham minimumni qo‘llab-quvvatlay olsa (MinStack),
unda butun navbatning minimumi quyidagiga teng:
Bu qanday ishlaydi
Qo‘shish (push)
Elementni in stekiga qo‘shamiz.
O‘chirish (pop)
Agar out steki bo‘sh bo‘lsa:
- barcha elementlarni
indanoutga ko‘chiramiz - ko‘chirishda tartib avtomatik ravishda teskari bo‘ladi
Shundan so‘ng out dan elementni o‘chiramiz.
Minimumni olish (get_min)
- agar bitta stek bo‘sh bo‘lsa — minimumni boshqasidan olamiz
- agar ikkalasi ham bo‘sh bo‘lmasa — ikkitasining minimumini olamiz