Microsoft Excel

Herbers Excel/VBA-Archiv

VBA Array - Permutation

Betrifft: VBA Array - Permutation von: Sven Söllner
Geschrieben am: 26.09.2014 12:38:15

Hallo Zusammen,

ich bin langsam echt am Verzweifeln, da ich keinen passenden Ansatz für die Programmierung eines Algorithmus finde.

Mein Problem ist folgendes:

Ich habe in VBA ein Array welches wie folgt aussehen kann:

a = array(1,3,5,10, ..... )

Nun soll die Summe aller Permutationen in ein neues Array geschrieben werden, das heisst:

1 + 3 = 4
1 + 3 + 5 = 9
.
.
.
1 + 5 + 10 = 16
.
.
.
3 + 5 = 8
.
.
.
usw...

Ich steh schon seit 2 Tagen auf dem Schlauch...

Wer kann mir helfen?

Grüße
Sven

  

Betrifft: AW: VBA Array - Permutation von: Sven Söllner
Geschrieben am: 26.09.2014 12:39:22

Achso, das Array (a) kann zwischen 6 und 9 Werten haben...


  

Betrifft: AW: VBA Array - Permutation von: bst
Geschrieben am: 26.09.2014 13:21:30

Hi Sven,

versuche das mal so ähnlich.

cu, Bernd
--

Option Explicit

Sub x()
   Dim m As Integer, n As Long, i As Long, j As Integer
   Dim ar As Variant, br As Variant
   
   ar = Array(1, 2, 4, 8, 16)
   m = 1 + UBound(ar)
   n = 2 ^ m
   ReDim br(0 To n - 1)
   For i = 0 To n - 1
      br(i) = 0
      For j = 0 To m - 1
         If i And 2 ^ j Then br(i) = br(i) + ar(j)
      Next
   Next
   Cells(1, 1).Resize(n) = Application.Transpose(br)
End Sub




  

Betrifft: AW: VBA Array - Permutation von: Sven Söllner
Geschrieben am: 26.09.2014 13:46:55

Halle Bernd,

leider funktioniert das so nicht.
Hier werden mir lediglich die Werte 0 - 31 ausgeben.

Ebenfalls steckt vermutlich ein Denkfehler in den Zeilen m = 1 + UBound(ar) und n = 2 ^ m


Die Anzahl der Fakultäten errechnen sich doch bei 5 Werten wie folgt:
1 * 2 * 3 * 4 * 5 = 120 Möglichkeiten

Bei deiner Variante komme ich auf 32 Möglichkeiten.

Oder denke ich falsch... oder ich denke ich denke beim Denken falsch... :)


  

Betrifft: AW: VBA Array - Permutation von: bst
Geschrieben am: 26.09.2014 13:54:00

Hi,

"Hier werden mir lediglich die Werte 0 - 31 ausgeben."

Ja, klar. Ich habe ja in das Array die Zahlen 1,2,4,8,16 geschrieben.

Das sind 5 Zahlen. Und dazu gibt es 2^5 Teilsummen, da Du je Zahl diese entweder zur Summe dazu nehmen kannst oder auch nicht.

Mit den Zweierpotenzen ergibt das eben 0 ... 31

0 * 1 + 0 * 2 + 0 * 4 + 0 * 8 + 0 * 16
1 * 1 + 0 * 2 + 0 * 4 + 0 * 8 + 0 * 16
0 * 1 + 1 * 2 + 0 * 4 + 0 * 8 + 0 * 16
...
1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 + 1 * 16


cu, Bernd


  

Betrifft: AW: VBA Array - Permutation von: Sven Söllner
Geschrieben am: 26.09.2014 14:00:59

klar, gebe ich Dir Recht... ich habe falsch gedacht... :D

super, Du hast mir sehr geholfen...


  

Betrifft: OwT: Bitteschön, gerne von: bst
Geschrieben am: 26.09.2014 14:06:54

.