Kolejki priorytetowe

Zadanie składa się z następujących trzech części:
  1. specyfikacja kolejki priorytetowej,

  2. użycie tej specyfikacji do udowodnienia poprawności generycznego algorytmu sortującego, używającego kolejki priorytetowej,

  3. implementacja specyfikacji za pomocą kopców dwumianowych.
Wszystkie elementy tej modelizacji powinny byc sparametryzowane typem wyposażonym w funkcję porównujacą, czyli przez moduł spełniający specyfikację OrderedType.




Szczegóły:

Ad 1. Coq'owa specyfikacja kolejki priorytetowej QueueSpec powinna byc oparta na specyfikacji Camlowej QUEUE, z nastepujacymi modyfikacjami:


Ad 2. Generyczny algorytm sortujący GenericSort powinien być funktorem o nagłówku:
Module GenericSort[X:OrderedType][Queue:QueueSpec with Module E:=X] <:
  SortSpec with Module E:=X.
gdzie SortSpec jest specyfikacją algorytmu sortującego.

Działanie GenericSort polega oczywiście na włożeniu do kolejki wszystkich elementów listy, a następnie wyjmowaniu ich ``po jednym'' i ustawianiu w posortowaną listę.




Ad 3. Implementacja kolejek priorytetowych za pomoca kopców dwumianowych powinna być funktorem BinHeap o nagłówku:
Module BinHeap[X:OrderedType] <: QueueSpec with Module E:=X.
Implementacja w Coqu powinna odpowiadać Camlowej implementacji funktora BinomialHeap


This document was translated from LATEX by HEVEA.