Witam,
wie ktoś jak zoptymalizować działanie kolejki priorytetowej leniwej opartej na strukturze kopca pod względem liczby porównań? Co można ulepszyć w kolejce żeby wykonywała mniej porównań elementów . Jeżeli ktoś chciałby pomóc to mogę wrzucic też kod, który muszę zoptymalizować. Pozdro
0
0
Możesz użyć innej struktury danych (jakiś kopiec fibonacciego czy coś).
0
czytalem ze liczbe porownan mozna zmniejszyc stosujac np. usprawnienie Floyda tylko mam problem z implementacja tego usprawnienia, dodam ze musze usprawnic ten kod:
// Wersja leniwa
template <typename typ>
class HeapQueueLazy : public SmartHeap<typ>, public AbstractPriorityLazyQueue<typ> {
// wypelnienie trescia metod prywatnego interfejsu kolejki leniwej
private:
void putLazy(typ& a) {
(*this) += a; // dodanie do liscia nowego elementu danych
}
typ getLazy(){
if(SmartHeap<typ>::getDataSize() < 0L) throw QueueException(QUEUE_EMPTY);
SmartHeap<typ>::fixHeap(); // ukopcowanie danych - trzeba znalezc element najwiekszy
return SmartHeap<typ>::getSecound();
}
};
void fixHeap(){ for(long k = SmartDataTable<typ>::getDataSize()>>1; k >= 1; k--) fixDown(k); }
void fixDown(long k){ // przenoszenie elementu w dol kopca (w strone lisci)
while((k<<1) <= SmartDataTable<typ>::getDataSize()){
long j = k<<1;
if(j < SmartDataTable<typ>::getDataSize() && ((*this)[j] < (*this)[j+1])) j++;
if(!((*this)[k] < (*this)[j])) break;
SmartDataTable<typ>::swap(k, j);
k = j;
}
}
Z gory dziekuje za pomoc