• 28.04.2024, 10:00
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Finde alle Möglichen Kombinationen für die Summe X

Sonntag, 20. Mai 2007, 16:58

Also ich bin auf der Suche nach einem Algorithmus der mir die Anzahl aller möglichen Kombinationen zurück gibt, mit der ich eine Summe aus einem Bestimmten Zahlen pool errechnen kann.

Beispiel Ich habe die Zahlen [2, 3, 5] und die gesuchte Summe ist 5, dann sollte der Algorythmus 2 ausgeben.

5 = 5
5 = 2+3

Die Reihenfolge is also egal...

Beispiel 2: [2, 5, 3, 8, 4, 1, 9] Gesucht ist 9
9 = 2 + 3 + 4
9 = 5 + 3 + 1
9 = 5 + 4
9 = 8 + 1
9 = 9

Also ergebnis = 5

Ich bin schon seid nen paar stunden am rummfummeln, aber es will einfach nicht klappen.
Das ganze soll nach dem Divide-and-Conquer Ansatz gelöst werden.

Wenn edit das mein mach ich aus nem y nen i

Re: Finde alle Möglichen Kombinationen für die Sum

Sonntag, 20. Mai 2007, 17:19

willst du auch die mehrfache Verwendung einer Zahl zulassen?
also im 2. Beispiel 2+2+1+1+3 oder 3+3+3 ?

edit: Software ;)
Gute work-live-balance ist, wenn man von seinem Privatleben erschöpfter ist als von der Arbeit.

Re: Finde alle Möglichen Kombinationen für die Sum

Sonntag, 20. Mai 2007, 17:31

ne jede Zahl darf nur einmal benutzt werden

PoRo69

Senior Member

Re: Finde alle Möglichen Kombinationen für die Sum

Sonntag, 20. Mai 2007, 17:57

Hallo,
wollte nur mal eben anmerken, dass es das Wort "Algorythmus" nicht gibt. Der Algorithmus, hat mit Rythmus nichts zu tun...
Mfg PoRo
Zu Verkaufen: Cuplex, Airplex 240 (orginal verpackt) bei Interesse Pm

Re: Finde alle Möglichen Kombinationen für die Sum

Sonntag, 20. Mai 2007, 18:29

Sorry, weiß nicht was Devide&Conquer ist, ich würd's einfach rekursiv machen, hier mal in Python:

[tt]def sum(ls):
r=0
for i in ls:
r+=i
return r

def recurcombine(ls,target,temp,result):
if sum(temp)==target:
return [temp]
elif sum(temp)>target or ls==[]:
return []
else:
for i in range(len(ls)):
newtemp=temp[:]
newls=ls[:]
newtemp.append(newls)
del(newls[i])
result=result+recurcombine(newls,target,newtemp,[])
return result


def findcombinations(ls,sum):
r=recurcombine(ls,sum,[],[])
for i in r:
i.sort()
r.sort()

print r

i=1
while i<len(r):
if r[i-1]==r[i]:
del r[i]
else:
i+=1

return r


def main():
r=findcombinations([2, 5, 3, 8, 4, 1, 9],9)
print "Zahl der Eregebnisse: %s"%(len(r))
for i in r:
print i

main()[/tt]


Da kommt raus:
[tt]Zahl der Eregebnisse: 5
[1, 3, 5]
[1, 8]
[2, 3, 4]
[4, 5]
[9]
[/tt]

Edit: Shit, das Forums stellt die Einrückung nicht ordentlich da...

Re: Finde alle Möglichen Kombinationen für die Sum

Sonntag, 20. Mai 2007, 19:18

Ich werds mir mal ansehen...