Próbuję napisać różne implementacje dla ułamkowego knapsack problem.Sortuj 2 listy w Pythonie na podstawie proporcji poszczególnych odpowiednich elementów lub na podstawie trzeciej listy
Do tego mają 2 tablic:
- wartości
- Ciężarki
Wartość elementów [n] odpowiada naciskowi elementów [n]. Tak więc możemy obliczyć value_per_unit jak:
for I in range(values):
value_per_unit.append(values[I]/weights[I])
value_per_unit.sort()
teraz potrzebujemy 2 tablice (wartości i wagi) mają być sortowane według tablicy value_per_unit
np Jeśli
- wartości = [60, 100, 120]
- masy = [20, 50, 30]
Następnie
values_per_unit = [3,0, 2,0, 4,0]
więc values_per_unit_sorted będzie [2,0, 3,0, 4,0]
potrzebne wartości i wagi tablice do:
- values_sorted = [100,60,120]
- weights_sorted = [50,20,30]
Czy istnieje sposób, aby to osiągnąć za pomocą prostych funkcji lambda?
mogę jeszcze zrobić coś takiego, ale wydaje się wysoce nieefektywne każdym czasie muszę dostęp do następujących elementów:
weights[(value_per_unit_sorted.index(max(value_per_unit_sorted)))]
Dość mały problem, ale przeliczasz wszystkie współczynniki za pomocą tego rozwiązania, OP wyróżnił pogrubioną czcionką, teraz należy je posortować "* zgodnie z tablicą value_per_unit *", co jestem pewna, że należy użyć "tablica" (lista) i nie przeliczaj wartości. Dobra odpowiedź: :) –
@Tom Następnie można użyć drugiego rozwiązania, a OP może w pierwszej kolejności pominąć konstruowanie listy wskaźników. –
Zgadzam się, że to prawdopodobnie rozsądne, ale OP nie poprosił o pominięcie etapu konstruowania stosunków; jest całkiem możliwe, że on i tak będzie potrzebował tej "listy", a więc chce rozwiązania, które pozwoli uniknąć ponownego przeliczenia. –