Thread Variation/Kombination aufteilen und verteilt kalkulieren (15 answers)
Opened by styx-cc at 2018-07-18 02:03

styx-cc
 2018-07-18 02:03
#188647 #188647
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Hallo Community!

Ich habe verschiedene, beliebige Variation, z.B.:
a2 b3 c4 d3 = 72 oder a2 b3 c4 = 24.

Wobei die Zahl die Anzahl der Möglichkeiten pro Stelle angibt und der Buchstabe als Bezeichner der Stelle dient z.B:
a2 = a,b
b3 = a,b,c
c1 = a
d3 = a,b,c

Die Variation zu erstellen ist bis dahin nicht das Problem, sondern ich möchte Beispielsweise auf Multi-Kernsysteme oder über eine Datenbank
die Variation aufteilen und parallel berechnen lassen, da diese sehr groß werden können.
Ich habe hier eine interessante Liste zu Modulen die sich diesem Thema widmen gefunden, jedoch keine konkrete Lösung für mein Problem.
Scheinbar lassen sich aber alle Permutation unter Berücksichtigung von Bedingungen und inklusive XS mit diesen Modulen erstellen.

Unter aufteilen der Variation verstehe ich etwas in der Art (3 Beispiele, n = Anzahl der Teile):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Bsp. 1)

n=5 a2 b3 c4 d3 = 72 (72/n = anzahl pro n (14,4))

n1) 1-1 1-1 1-4 1-3 = 12 +1 RE
n1) 1-1 2-2 1-1 1-2 = 2 n1) von 1 1 1 1 bis 1 2 1 2 ?

n2) 1-1 2-2 1-1 3-3 = 1 +1 RE
n2) 1-1 2-2 2-4 1-3 = 9
n2) 1-1 3-3 1-1 1-3 = 3
n2) 1-1 3-3 2-2 1-1 = 1 n2) von 1 2 1 3 bis 1 3 2 1 ?

n3) 1-1 3-3 2-2 2-3 = 2
n3) 1-1 3-3 3-4 1-3 = 6
n3) 2-2 1-1 1-2 1-3 = 6 n3) von 1 3 2 2 bis 2 1 2 3 ?

n4) 2-2 1-1 3-4 1-3 = 6
n4) 2-2 2-2 1-2 1-3 = 6
n4) 2-2 2-2 3-3 1-2 = 2 n4) von 2 1 3 1 bis 2 2 1 2

n5) 2-2 2-2 3-3 3-3 = 1
n5) 2-2 2-2 4-4 1-3 = 3
n5) 2-2 3-3 1-3 1-3 = 9
n5) 2-2 3-3 4-4 1-1 = 1 n5) von 2 2 3 3 bis 2 3 4 1

RE) 2-2 3-3 4-4 2-3 = 2 (2 3 4 2 und 2 3 4 3)
+ ----
72
----------------------------------------------------------------------------
Bsp. 2)

n=5 a2 b3 c4 = 24 (24/n = anzahl pro n (4,8))

n1) 1-1 1-1 1-4 = 4 + 1RE
n2) 1-1 2-2 1-4 = 4 + 1RE
n3) 1-1 3-3 1-4 = 4 + 1RE
n4) 2-2 1-1 1-4 = 4 + 1RE
n5) 2-2 2-2 1-4 = 4
RE) 2-2 3-3 1-4 = 4 //Rest wird anschließend auf n verteilt
----------------------------------------------------------------------------
Bsp. 3)

n=3 a2 b3 c4 d3 = 72 (72/n = anzahl pro n (24))

n1) 1-1 1-2 1-4 1-3 = 24
n2) 1-1 3-3 1-4 1-3 = 12
n2) 2-2 1-1 1-4 1-3 = 12 n2) von 1 3 1 1 bis 2 1 4 3
n3) 2-2 2-3 1-4 1-3 = 24
----------------------------------------------------------------------------


Gibt es für mein Problem schon ein Modul das jemandem bekannt ist?
Ist das quasi ein allgmeines/übliches Problem, wie das finden aller Kombinationen an sich z.B. und hat sogar einen Namen?

Mein Ansatz wäre rekursiv oder iterativ durchzuzählen, wie ich es oben manuell gemacht habe und jeweils um die entsprechenden
Stellen zu rutschen/den Zeiger zu verschieben und aufzuaddieren. Dazu müsste ich aber nur zum aufteilen der Variation, alle Kombinationen durchgehen,
mir kommt es so vor als ob das mathematisch deutlich klüger lösbar ist, deshalb habe ich mir die vergangenen Tage viel über Kombinatorik, Permutation,
Logarithmen und Fakultät durchgelesen, komme aber auf keinen grünen Zweig - kann mir jemand auf die Sprünge helfen?
Hauptsächlich sind mir Beispiele untergekommen, wo jede Stelle die gleiche Anazahl an Möglichkeiten hat, was die Sache sehr zu verienfachen scheint.

Ist die Idee, dass so aufzuteilen überhaupt klug?
Wenn ich weiß, dass z.B.
n1) von 1 1 1 1 bis 1 2 1 2
geht, lassen sich ja relativ komfortabel Arrays erstellen die genau diesen bereich umfassen, n1 -> $sub_variation = [a..a, a..b, a..a, a..b];
oder übersehe ich einen Haken?

Vielen Dank und lieben Gruß

Edit:
CPAN:Algorithm::Combinatorics scheint fast zu liefern, was ich suche..
Die Funktionen combinations_with_repetition(\@data, $k) zum erzeugen der Permutation und partitions(\@data[, $k]), welche die Tupel so wie ich es verstehe vertikal unterteilt?
Last edited: 2018-07-18 03:54:43 +0200 (CEST)
Pörl.

View full thread Variation/Kombination aufteilen und verteilt kalkulieren