01რა სჭირდება პრიორიტეტულ რიგს
პრიორიტეტული რიგი ინახავს ელემენტებს პრიორიტეტებით და სამ ოპერაციას უჭერს მხარს: ელემენტის ჩასმა, უმცირესის (ან უდიდესის) ნახვა და მისი ამოღება. ცხადი სტრუქტურები სადღაც ცდება:
- დალაგებული მასივი: ნახვა იაფია, მაგრამ ჩასმისას ელემენტები უნდა გადავწიოთ, O(n);
- დაულაგებელი მასივი: ჩასმა O(1)-ია, მაგრამ მინიმუმის პოვნა O(n);
- დაბალანსებული ძებნის ხე: ყველაფერი O(log n)-ში, მაგრამ ეს მძიმე ტექნიკაა ამოცანისთვის, რომელიც მხოლოდ ერთ ბოლოს უყურებს.
ორობითი გროვა მსუბუქი პასუხია: ნახვა O(1)-ში, ჩასმა და ამოღება O(log n)-ში, მიმთითებლების გარეშე, ჩვეულებრივ მასივში. მასზეა აგებული std::priority_queue, Python-ის heapq და Java-ს PriorityQueue, მათი მეშვეობით კი დეიქსტრასა და პრიმის ალგორითმები, მოვლენების სიმულაცია, „k უდიდესი“ ამოცანები და გროვით სორტირება.