Cześć, zastanawiam się z jakiej struktury skorzystać do następującego problemu: mam zadania i przydzielam je procesorom, z tym, że niektóre zadania potrzebują mnogiej liczby procesorów.
Będę używał algorytmu zachłannego (taka jest potrzeba) i wymyśliłem, że tablicę zadań po prostu przelatuję liniowo od początku do końca i dla każdego zadania przydzielam procesor(y), które najszybciej będą "wolne" (nie będą już wykonywać żadnych zadań). Aby nie wyszukiwać np. 128 najszybciej wolnych procesorów wśród miliona pozostałych chciałbym je wszystkie trzymać w jakiejś strukturze, no i tu się pojawia problem...
Gdyby każde zadanie wymagało tylko jednego procesora, to sprawa prosta: zwykła, posortowana tablica, bierzemy pierwszy element, dodajemy mu czas wykonania zadania i ustawiamy w czasie log N znowu na odpowiednie miejsce. Ale co gdy weźmiemy pierwsze 100 procesorów? Każdy po kolei ustawiać w tym czasie log N? A może aktualizować je na jakimś kopcu? Cała ta seria procesorów jest posortowana względem siebie, więc może jakoś to wykorzystać?
Myślę nad tym od dłuższego czasu i chciałbym, by ktoś mi pomógł z podjęciem decyzji. Z góry dzięki za pomoc. :)
Będę używał algorytmu zachłannego (taka jest potrzeba) i wymyśliłem, że tablicę zadań po prostu przelatuję liniowo od początku do końca i dla każdego zadania przydzielam procesor(y), które najszybciej będą "wolne" (nie będą już wykonywać żadnych zadań). Aby nie wyszukiwać np. 128 najszybciej wolnych procesorów wśród miliona pozostałych chciałbym je wszystkie trzymać w jakiejś strukturze, no i tu się pojawia problem...
Gdyby każde zadanie wymagało tylko jednego procesora, to sprawa prosta: zwykła, posortowana tablica, bierzemy pierwszy element, dodajemy mu czas wykonania zadania i ustawiamy w czasie log N znowu na odpowiednie miejsce. Ale co gdy weźmiemy pierwsze 100 procesorów? Każdy po kolei ustawiać w tym czasie log N? A może aktualizować je na jakimś kopcu? Cała ta seria procesorów jest posortowana względem siebie, więc może jakoś to wykorzystać?
Myślę nad tym od dłuższego czasu i chciałbym, by ktoś mi pomógł z podjęciem decyzji. Z góry dzięki za pomoc. :)