W problemach z optymalizacją trzymam w kolejce wiele propozycji kandydatów, które sprawdzam zgodnie z ich priorytetem .Jak zachować kolejkę o dużym priorytecie z najważniejszymi pozycjami?
Za każdym razem, gdy obsługuję jednego kandydata, jest on usuwany z kolejki, ale tworzy kilka nowych kandydatów, co powoduje, że liczba członków kadry rośnie wykładniczo. Aby sobie z tym poradzić przypisuję każdemu kandydatowi odpowiedź , gdy kandydat jest dodawany do kolejki, jeśli nie ma już dostępnej przestrzeni, zastępuję (jeśli jest to stosowne) co najmniej odpowiednią kandydatkę aktualnie w kolejce z nową kandydatką .
Aby to zrobić skutecznie, zachowuję dużą (ustalony rozmiar) tablicę z kandydatami i dwoma powiązanymi pośrednimi stertami binarnymi: jeden obsługuje kandydatów w malejącej kolejności pierwszeństwa, a drugi w rosnącej trafności.
Jest to wystarczająco skuteczne dla moich celów, a potrzebna dodatkowa powierzchnia wynosi około 4 int/kandydata, co jest również uzasadnione. Jednak kodowanie jest skomplikowane i nie wydaje się optymalne.
Moje pytanie dotyczy tego, czy znasz bardziej adekwatną strukturę danych, czy też bardziej konkretny sposób wykonania tego zadania bez utraty wydajności.
Co powiecie na to, że nie należy wstawiać najmniej istotnych/wcześniejszych kandydatów? Podobnie jak w przypadku wzrostu wykładniczego, i tak nie będą one dostępne. Możesz zmienić X w zależności od wielkości kolejki, aby kolejka mogła uzyskać dane początkowe. Ale twoja kolejka się wypełni, czy jest jakiś warunek stopu? –
@TomWij Nie wiesz, że są one najmniej istotne, dopóki nie znajdziesz gorszych kandydatów. W problemach, które mnie interesują, nie ma warunków do zatrzymania się. –
Kiedy generuję nowego kandydata, obliczam wartość na podstawie prostej łatwej do obliczenia właściwości, która moim zdaniem wygeneruje prawdopodobnie dobre rozwiązanie. Tak więc trafność jest heurystyczna, preferowana przez niektórych kandydatów (i ich potomków) na innych, nie jestem pewien, jak to nazwać. –