Wpis z mikrobloga

Szukam podpowiedzi jak napisać program (lub z jakiej własności matematycznej skorzystać), który ze zbioru 10 liczb stworzy dwie sumy (po 5 elementów) uwzględniając warunek, iż jedna suma musi być conajmniej 5% większa od drugiej.
(liczby w grupach się nie powtarzają)

Przykład:
Dostępne liczby 1,2,3,4,5,6,7,8,9,10

Podejście numer 1:
GrupaA: 2,4,5,7,9 (suma 27)
GrupaB: 1,3,6,8,10 (suma 28)
GrupaB / GrupaA = 103,7%

Róznica miedzy grupami jest za mała.

Podejście numer 2:

GrupaA: 1,3,6,7,9 (suma 26)
GrupaB: 2,4,5,8,10 (suma 29)
GrupaB / GrupaA = 111,54%

GrupaB jest większa o conajmniej 5% od GrupaA i jest to najmniejsza możliwa różnica spełniająca wymagania.

#programowanie #matematyka #python
  • 21
@luzny_lori: nie zdążyłem edytować :D
Dopiszę tutaj:

Szukam podpowiedzi jak napisać program (lub z jakiej własności matematycznej skorzystać), który ze zbioru 10 liczb stworzy dwie sumy (po 5 elementów) uwzględniając warunek, iż jedna suma musi być conajmniej 5% większa od drugiej - szukam takich zbiorów liczb gdzie ta różnica wynosi conajmniej 5% ale musi być jak nabliższa tym 5%.
(liczby w grupach się nie powtarzają)
"Może i #!$%@? zrobione. Ale szybko. I tanio."

https://repl.it/repls/LumpyFirmExabyte

from itertools import combinations

input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

allCombs = []
results = []

comb = combinations(input, 5)

for i in list(comb):
allCombs.append(i)

for indexA, itemA in enumerate(allCombs, start = 1):
aaa = itemA
for indexB, itemB in enumerate(allCombs, start = 1):
bbb = itemB

if bool(set(itemA) & set(itemB)) == False:
div = sum(itemA) /
przy 50 elementach


@croppz:
Ale elementów jest 10. To tylko binomial(10,5)= 252 sprawdzeń.

Na oko stwierdzam że problem jest NP-zupełny i niestety nawet jak znajdziesz 1000x lepszy algorytm, to przy większej ilości elementów i tak będzie działał latami.
@djKris: W sumie prosta sprawa.

Sumujesz wszystkie, dostajesz oczywiście sumę ;)
potem obliczasz (chyba nie muszę pisać jak) ile ta mniejsza suma może mieć max.
I sprowadziłeś problem do problemu plecakowego.
Teraz Waga i Wartość to właśnie te liczby. Max waga to wynik który policzyłeś na początku.
I maksymalizujesz wynik(ale nigdy nie przekroczysz tego maxa)

Ta da :)