Kolejka priorytetowa + kopiec

0

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

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1