newsgroups-index (beta)

Current group: schule.informatik

Algorithmus der aus den Richtigen Summanden die Summe findet

Algorithmus der aus den Richtigen Summanden die Summe findet  
Frank Nestler
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Sven Guckes
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Robert Degen
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Sven Guckes
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Robert Degen
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Daniel Gutekunst
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Robert Degen
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Chris Huebsch
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Frank Nestler
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Chris Huebsch
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Robert Degen
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Frank Nestler
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Robert Degen
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Sven Guckes
 Re: Algorithmus der aus den Richtigen Summanden die Summe findet  
Frank Nestler
From:Frank Nestler
Subject:Algorithmus der aus den Richtigen Summanden die Summe findet
Date:Wed, 7 Apr 2004 07:34:38 +0200
Hallo,

ich suche einen Algorithmus, der sich die richtigen Summanden sucht, damit
am Ende die vorgegebene Summe rauskommt.
Ich hatte schon eine Lösung gefunden, allerdings ging die nur bis 29
Summanden und ich habe 130...
Ich dachte eigentlich an Backracking, aber leider bring ichs nicht mehr,
eine funktionierende Funktion aufzustellen.

Ich hoffe ihr könnt mir helfen

Gruß Frank
From:Sven Guckes
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:7 Apr 2004 12:14:08 GMT
* Frank Nestler [2004-04-07]:
> ich suche einen Algorithmus, der sich die richtigen
> Summanden sucht, damit am Ende die vorgegebene Summe
> rauskommt. Ich hatte schon eine Lösung gefunden, allerdings
> ging die nur bis 29 Summanden und ich habe 130...

Summe = ( \sum_{n=1}^129 0 ) + Summe

na, das war ja einfach. der naechste, bitte!

> Ich dachte eigentlich an Backracking, aber leider bring ichs
> nicht mehr, eine funktionierende Funktion aufzustellen.

vielleicht liegt das an der fehlenden information
ueber die randbedingungen zur aufgabe? hmm...

Sven
From:Robert Degen
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:Wed, 07 Apr 2004 14:23:58 +0200


Sven Guckes wrote:

> * Frank Nestler [2004-04-07]:
>> ich suche einen Algorithmus, der sich die richtigen
>> Summanden sucht, damit am Ende die vorgegebene Summe
>> rauskommt. Ich hatte schon eine Lösung gefunden, allerdings
>> ging die nur bis 29 Summanden und ich habe 130...
>
> Summe = ( \sum_{n=1}^129 0 ) + Summe

Hey, wenn schon denn schon.

Summe = ( \sum_{n=0}^129 0 ) + Summe
Summe = ( \sum_{n=1}^130 0 ) + Summe

tztztz ;)

>
> na, das war ja einfach. der naechste, bitte!
>
>> Ich dachte eigentlich an Backracking, aber leider bring ichs
>> nicht mehr, eine funktionierende Funktion aufzustellen.
>
> vielleicht liegt das an der fehlenden information
> ueber die randbedingungen zur aufgabe? hmm...
>
> Sven
From:Sven Guckes
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:7 Apr 2004 13:02:24 GMT
* Frank Nestler [2004-04-07]:
> ich suche einen Algorithmus, der sich die richtigen
> Summanden sucht, damit am Ende die vorgegebene Summe
> rauskommt. Ich hatte schon eine Lösung gefunden, allerdings
> ging die nur bis 29 Summanden und ich habe 130...

* Sven Guckes wrote:
> Summe = ( \sum_{n=1}^129 0 ) + Summe

* Robert Degen [2004-04-07]:
> Hey, wenn schon denn schon.
> Summe = ( \sum_{n=0}^129 0 ) + Summe
> Summe = ( \sum_{n=1}^130 0 ) + Summe

das waeren dann aber 131 summanden -
einer zuviel. *huestel* ;-)

Sven
From:Robert Degen
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:Wed, 07 Apr 2004 15:36:55 +0200


Sven Guckes wrote:

> * Frank Nestler [2004-04-07]:
>> ich suche einen Algorithmus, der sich die richtigen
>> Summanden sucht, damit am Ende die vorgegebene Summe
>> rauskommt. Ich hatte schon eine Lösung gefunden, allerdings
>> ging die nur bis 29 Summanden und ich habe 130...
>
> * Sven Guckes wrote:
>> Summe = ( \sum_{n=1}^129 0 ) + Summe
>
> * Robert Degen [2004-04-07]:
>> Hey, wenn schon denn schon.
>> Summe = ( \sum_{n=0}^129 0 ) + Summe
>> Summe = ( \sum_{n=1}^130 0 ) + Summe
>
> das waeren dann aber 131 summanden -
> einer zuviel. *huestel* ;-)

Ahhhhh ich trottel. Sorry. Verrafft.... tztztz

>
> Sven
From:Daniel Gutekunst
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:Tue, 27 Apr 2004 19:10:21 +0200
Frank Nestler wrote:

> ich suche einen Algorithmus, der sich die richtigen Summanden sucht, damit
> am Ende die vorgegebene Summe rauskommt.
> Ich hatte schon eine Lösung gefunden, allerdings ging die nur bis 29
> Summanden und ich habe 130...
> Ich dachte eigentlich an Backracking, aber leider bring ichs nicht mehr,
> eine funktionierende Funktion aufzustellen.
>
> Ich hoffe ihr könnt mir helfen

Dies ist ein klassisches Problem der Informatik --- "Rucksack" und "Subset
Sum" genannt. Die NP-vollständigkeit wird z.B. in "Theoretische Informatik
kurzgefasst" von Uwe Schöning bewiesen.

Das heißt, es gibt höchst wahrscheinlich keinen effizienten (polynomiellen)
Algorithmus für die Aufgabe.

Du musst also mit einer Laufzeit von 2^n rechnen. Strategien das
Backtracking so effizient wie möglich zu machen, beruhen wahrscheinlich auf
der Teilbarkeit der Summe gewisser Zahlen (vorher werden alle Zahlen durch
geeignete Faktoren zu ganzen Zahlen gemacht).

MfG
Daniel Gutekunst
From:Robert Degen
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:Wed, 07 Apr 2004 17:45:42 +0200
Frank Nestler wrote:

> Hallo,
>
> ich suche einen Algorithmus, der sich die richtigen Summanden sucht, damit
> am Ende die vorgegebene Summe rauskommt.
> Ich hatte schon eine Lösung gefunden, allerdings ging die nur bis 29
> Summanden und ich habe 130...
> Ich dachte eigentlich an Backracking, aber leider bring ichs nicht mehr,
> eine funktionierende Funktion aufzustellen.

Ich verstehe noch nichtg wirklich warum Du hier Backtracking benutzen
willst, aber egal. Diese Aufgabe erinnert mich irgendwie an den
"Traveling Salesman". Hm. Also ich habs mal überflogen. Ad hoc fällt mir nur
Bruteforce ein und das würde selbst bei 1.000.000 Tests/sek immer noch
10^25 Jahre oder so dauern. Da muss es doch was geben, ich werde mal etwas
kramen...

>
> Ich hoffe ihr könnt mir helfen
>
> Gruß Frank
From:Chris Huebsch
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:Wed, 7 Apr 2004 18:30:57 +0000 (UTC)
Robert Degen (Wed, 07 Apr 2004 17:45:42 +0200):
> Ich verstehe noch nichtg wirklich warum Du hier Backtracking benutzen
> willst, aber egal. Diese Aufgabe erinnert mich irgendwie an den
> "Traveling Salesman". Hm. Also ich habs mal überflogen. Ad hoc fällt mir nur
> Bruteforce ein und das würde selbst bei 1.000.000 Tests/sek immer noch
> 10^25 Jahre oder so dauern. Da muss es doch was geben, ich werde mal etwas
> kramen...

Klar muss dich das an das TSP erinnern, denn es ist wohl das
Rucksack-Problem, was der OP hier zu loesen sucht. Beide sind in
polynomieller Zeit aufeinander abbildbar.

Was ich nicht verstehe: Wie kann es einen Algorithmus geben, der das
Problem fuer 29, aber nicht fuer 130 Summanden loesen kann?

Achja - falls jemand eine polynomielle Loesung des TSP hat, bitte
melden. *g*

Chris
--
Chris Huebsch www.hübsch-gemacht.de | TU Chemmnitz, Informatik, RNVS
GPG-Encrypted mail welcome! ID:7F2B4DBA | Str. d. Nationen 62, B204
Chemnitzer Linux-Tage 2005, 5.-6.März | D-09107 Chemnitz
http://www.tu-chemnitz.de/linux/tag/ | +49 371 531-1377, Fax -1803
From:Frank Nestler
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:Thu, 8 Apr 2004 08:30:32 +0200


> Was ich nicht verstehe: Wie kann es einen Algorithmus geben, der das
> Problem fuer 29, aber nicht fuer 130 Summanden loesen kann?

Hallo Chris,

das problem schon mal jemand anderes beschrieben und der hat mir das hier
gesendet:


ai enthällt alles summanden und
textbox enthällt die gesuchte summe

und dieser algorithmus ist auf max 29 summanden begrenzt


Private Sub CommandButton1_Click()
Dim ai&(), v:

ReDim ai(Range("A1").CurrentRegion.Count)

While Range("a1").Offset(i, 0) <> ""
ai(i) = Range("a1").Offset(i, 0)
i = i + 1
Wend

For Each v In Summen(ai(), TextBox1)
Debug.Print "30 = " & v
Next v

End Sub

Function Summen(aSummanten&(), ByVal Gesamtsumme&) As Collection
Dim af&, uf&, c&, d&, m&, pow2&(29), s$

Set Summen = New Collection: m = 1
For c = 0 To 29: pow2(c) = m: m = m * 2: Next c


uf = UBound(aSummanten())
If uf > 29 Then Err.Raise 6

For c = 1 To 2 ^ (uf + 1) - 1
m = 0
For d = 0 To uf
If (c And pow2(d)) <> 0 Then
m = m + aSummanten(d)
End If
Next d
If m = Gesamtsumme Then
s = vbNullString
For d = 0 To uf
If (c And pow2(d)) <> 0 Then
s = s & aSummanten(d) & " + "
End If
Next d
Summen.Add Left$(s, Len(s) - 3)
End If
Next c
End Function
From:Chris Huebsch
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:Thu, 8 Apr 2004 07:16:03 +0000 (UTC)
Frank Nestler (Thu, 8 Apr 2004 08:30:32 +0200):
> ai enthällt alles summanden und
> textbox enthällt die gesuchte summe
>
> und dieser algorithmus ist auf max 29 summanden begrenzt

Es ist nicht der Algorithmus, der begrenzt ist, sondern dessen
Implementierung in BASIC.

> Private Sub CommandButton1_Click()
> Dim ai&(), v:
>
> ReDim ai(Range("A1").CurrentRegion.Count)
>
> While Range("a1").Offset(i, 0) <> ""
> ai(i) = Range("a1").Offset(i, 0)
> i = i + 1
> Wend
>
> For Each v In Summen(ai(), TextBox1)
> Debug.Print "30 = " & v
> Next v
>
> End Sub
>
> Function Summen(aSummanten&(), ByVal Gesamtsumme&) As Collection
> Dim af&, uf&, c&, d&, m&, pow2&(29), s$
^^ Hier
>
> Set Summen = New Collection: m = 1
> For c = 0 To 29: pow2(c) = m: m = m * 2: Next c
^^ Hier
>
> uf = UBound(aSummanten())
> If uf > 29 Then Err.Raise 6
^^ Hier
> For c = 1 To 2 ^ (uf + 1) - 1
> m = 0
> For d = 0 To uf
> If (c And pow2(d)) <> 0 Then
> m = m + aSummanten(d)
> End If
> Next d
> If m = Gesamtsumme Then
> s = vbNullString
> For d = 0 To uf
> If (c And pow2(d)) <> 0 Then
> s = s & aSummanten(d) & " + "
> End If
> Next d
> Summen.Add Left$(s, Len(s) - 3)
> End If
> Next c
> End Function

Mir scheint, dass das Feld pow2 mit der Produktfolge p(i+1)=p(i)*2
gefuellt wird. Bei 32-Bit-Laufzeitumgebungen ist da bei 2^32-1
Feierabend. (Wenn sogar vorzeichenbehaftet sogar bei 2^31-1).

Ich habe den Eindruck, dass das Feld verwendet wird, um die Verwendung
der Summanden in der Summe zu markieren. Das kann man wahrscheinlich
auch anders loesen, indem man da ein Datentyp nimmt, der keine
Laengenbegrenzung kennt. Mit derartig grossen Zahlen umher zu werfen,
macht auch nicht wirklich Sinn.

Gruesse


Chris
PS: Summand schreibt man mit dem weichen T ;-p
--
Chris Huebsch www.hübsch-gemacht.de | TU Chemmnitz, Informatik, RNVS
GPG-Encrypted mail welcome! ID:7F2B4DBA | Str. d. Nationen 62, B204
Chemnitzer Linux-Tage 2005, 5.-6.März | D-09107 Chemnitz
http://www.tu-chemnitz.de/linux/tag/ | +49 371 531-1377, Fax -1803
From:Robert Degen
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:Wed, 07 Apr 2004 12:13:00 +0200
Frank Nestler wrote:

> Hallo,
>
> ich suche einen Algorithmus, der sich die richtigen Summanden sucht, damit
> am Ende die vorgegebene Summe rauskommt.

Geht das eventuell etwas genauer? Wie müssen die Summanden beschaffen sein?
Nur ganze Zahlen?!? Beispiel? Also nach dem was ich jetzt hier gelesen
habe, brauch man für sowas keinen Algorithmus.

Könntest Du vielleicht ein Beispiel posten. Aus der kurzen Beschreibung
werde ich nicht schlau...

> Ich hatte schon eine Lösung gefunden, allerdings ging die nur bis 29
> Summanden und ich habe 130...
> Ich dachte eigentlich an Backracking, aber leider bring ichs nicht mehr,
> eine funktionierende Funktion aufzustellen.
>
> Ich hoffe ihr könnt mir helfen
>
> Gruß Frank

Gruß
Rob
From:Frank Nestler
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:Wed, 7 Apr 2004 16:43:53 +0200
Ok hier das Beispiel:

Die Summanden sind zum Beispiel:
1,3
3
54
12
0,4
2

Und die summe die ich raus haben möchte ist:
13,7

Das heißt, der Algorithmus soll herausfinden, dass 13,7 die summe von
1,3+0,4+12 ist.
Und jeder summand soll aber nur einmal verwendet werden!

Hoffe jetzt kannst du was damit anfangen.

Gruß Frank
From:Robert Degen
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:Wed, 07 Apr 2004 17:28:24 +0200
können die Summanden negativ sein?
From:Sven Guckes
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:7 Apr 2004 22:25:54 GMT
* Frank Nestler [2004-04-07]:
> Ok hier das Beispiel:
> Die Summanden sind zum Beispiel:
> 0,4 1,3 2 3 12 54
>
> Und die summe die ich
> raus haben möchte ist: 13,7
>
> Das heißt, der Algorithmus soll herausfinden,
> dass 13,7 die summe von 1,3+0,4+12 ist. Und
> jeder summand soll aber nur einmal verwendet werden!

sollen alle summanden *genau* einmal oder
*hoechstens* einmal verwendet werden?
duerfen die summanden auch negativ verwendet werden?

wird vorausgesetzt, dass es eine loesung gibt?
oder kann es auch mehrere loesungen geben?
oder vielleicht ueberhaupt keine loesung?

sollen alle loesungen gefunden werden - oder nur eine?
soll der algorithmus nach einer vorgegebenen zeit
oder eine anzahl von operationen abbrechen?

in welcher sprache soll der algorithmus gegeben
werden - imperativ oder funktional? pseudo code?

fuer jede kombination von antworten kann
die loesung eine wenig anders aussehen..

Sven
From:Frank Nestler
Subject:Re: Algorithmus der aus den Richtigen Summanden die Summe findet
Date:Thu, 8 Apr 2004 08:25:24 +0200
> sollen alle summanden *genau* einmal oder
> *hoechstens* einmal verwendet werden?
> duerfen die summanden auch negativ verwendet werden?

die summanden sind nur positiv
und jeder wird nur einmal verwendet

>
> wird vorausgesetzt, dass es eine loesung gibt?
> oder kann es auch mehrere loesungen geben?
> oder vielleicht ueberhaupt keine loesung?

es kann mehrere lösungen geben,
aber auch keine

>
> sollen alle loesungen gefunden werden - oder nur eine?
> soll der algorithmus nach einer vorgegebenen zeit
> oder eine anzahl von operationen abbrechen?

es sollen alle lösungen gefunden werden
der algorithmus soll enden wenn er alle möglichkeiten durchprobiert hat

>
> in welcher sprache soll der algorithmus gegeben
> werden - imperativ oder funktional? pseudo code?

ich wollte das problem im excel lösen -also vba

>
> fuer jede kombination von antworten kann
> die loesung eine wenig anders aussehen..
>
> Sven

Hoffe die antworten reichen erstmal

Danke für deine/eure Bemühungen.
Frohe Ostern

Gruß Frank
   

Copyright © 2006 newsgroups-index   -   All rights reserved   -   Impressum