Microsoft Excel

Herbers Excel/VBA-Archiv

Ausgabe Permutation-ohne Wdhlg., Beachtg. Reihenf.

Betrifft: Ausgabe Permutation-ohne Wdhlg., Beachtg. Reihenf. von: Joerschi
Geschrieben am: 16.10.2014 13:22:48

Hallo liebes Forum,

hat jemand einen Ansatz, wie man in Excel alle Kombinationen (Reihen) einer Zeichenfolge ausgeben lassen kann (Beachte: a) ohne Wiederholung, b) ohne Berücksichtigung Reihenfolge)?

Eine Lösung für die Auflistung ohne Wiederholung gibts schon hier: http://www.excelformeln.de/formeln.html?welcher=325

Diese Webseite rechnet sogar die Kombinationen (ist kein Excel) aus: http://www.zum.de/Faecher/Materialien/gebhardt/stochastik/Kombin.html

Als Beispiel könnte man die Zeichenreihe ABCDE nehmen, welche auf 13 unterschiedliche Positionen ( 1 bia 13) verteilt werden kann (wären 126 verschiedene Möglichkeiten weil k=5. n=9).

Kann man so etwas in Excel "simulieren"?

Danke vorab und beste Grüße
Joerschi

  

Betrifft: AW: Ausgabe Permutation-ohne Wdhlg., Beachtg. Reihenf. von: yummi
Geschrieben am: 16.10.2014 13:28:53

Hallo Joerschi,

meinst du so etwas

http://www.excelformeln.de/formeln.html?welcher=91

Gruß
yummi


  

Betrifft: AW: Ausgabe Permutation-ohne Wdhlg., Beachtg. Reihenf. von: Joerschi
Geschrieben am: 16.10.2014 13:34:32

leider nicht, da dort Wiederholungen drin sind (doppelte Zeichen).
Das was ich meine sind im Grunde alle möglichen Zeichenfolgen des Binominialkoeffizienten.


  

Betrifft: AW: Ausgabe Permutation-ohne Wdhlg., Beachtg. Reihenf. von: yummi
Geschrieben am: 16.10.2014 13:38:49

Hallo Joerschi,

http://www.excelformeln.de/formeln.html?welcher=325

ohne wiederholungen


gruß
yummi


  

Betrifft: AW: Ausgabe Permutation-ohne Wdhlg., Beachtg. Reihenf. von: Joerschi
Geschrieben am: 16.10.2014 13:43:01

den Link hab ich doch im Eingangspost angegeben.
Das ist zwar ohne Wiederholungen, aber nicht gleichzeitig ohne Berücksichtigung der Reihenfolge.

Ich suche einen Ansatz wo Beides kombiniert ist (ohne Wiederholung, ohne Berücksichtigung Reihenfolge innerhalb der Ausgabe-Zeichenreihen). Man kann den Link möglicherweise als Basis nutzen, aber wie weiter...?


  

Betrifft: AW: Ausgabe Permutation-ohne Wdhlg., Beachtg. Reihenf. von: yummi
Geschrieben am: 16.10.2014 13:49:34

lies mal dies hier


http://www.excel4managers.de/index.php?page=kombinationen-ohne-zuruecklegen


  

Betrifft: AW: Ausgabe Permutation-ohne Wdhlg., Beachtg. Reihenf. von: Joerschi
Geschrieben am: 16.10.2014 13:55:09

hilft leider auch nicht.
Es werden ja nur die Berechnungsformeln der Statistik angegeben (die wir kennen: Binominialkoeffizient).
Ich suche einen Ansatz über das Ausgeben der tatsächlichen Ausgabereihen, Zeile für Zeile.


  

Betrifft: Ausgabe? von: Michael
Geschrieben am: 16.10.2014 19:07:44

Hallo Joerschi,

was willste denn ausgegeben haben? Die Werte in Spalten oder die Kombinationen der Spalten?

1 2 3 4
a b		
a   b	
a     b
  a b	
  a   b
    a b

oder

1	2		
1	3		
1	4		
2	3		
2	4		
3	4		
Ich komme bei 1..13 auf n=13 und nicht n=9.

Schöne Grüße,

Michael


  

Betrifft: AW: Ausgabe? von: Joerschi
Geschrieben am: 16.10.2014 19:27:20

Hi Michael,

ja verschrieben. n ist natürlich 13 (n=13 und k=5 ergibt 1287 verschiedene Kombinationen).

Die untere Variante finde ich besser.
Je Kombination eine Zeile wäre optimal (wobei die Spalten A bis M die Positionen 1 bis 13 darstellen). Die Zeichenreihe (Kombination) kann dabei in einem Feld hintereinander weg stehen oder auch gleich verteilt auf die Positionen (muss aber nicht sein).

Liebe Grüße
Joerschi


  

Betrifft: AW: Ausgabe! von: Michael
Geschrieben am: 17.10.2014 14:28:57

Hi Joerschi,

daß ich Dich frage, was Du haben willst, heißt leider nicht, daß ich die Lösung aus dem Handgelenk schüttele.

Es interessiert mich aber, weil ich mich vor 30 Jahren schon zu blöd angestellt habe, um die Türme von Hanoi mit einem rekursiven Algorithmus zu programmieren. Heutzutage steht die Lösung schon in wikipedia:
http://de.wikipedia.org/wiki/T%C3%BCrme_von_Hanoi#Rekursiver_Algorithmus

Ich melde mich später nochmal. Wenn ich's nicht hinbekomme, sollen sich Berufenere daran austoben.

Sag: wozu BRAUCHT man so ein Zeug nur?

Schöne Grüße,

Michael


  

Betrifft: Info: wofür gebraucht von: Joerschi
Geschrieben am: 17.10.2014 15:05:29

bisschen private Statistikrechnung zum Nachrechnen von diversen "Behauptungen" in Büchern bezüglich Spielsystemen im Lotto/Toto etc :-)
Ändert nicht die Welt, aber ich möchte Zahlen immer gern nachvollziehen können

LG, Joerschi


  

Betrifft: AW: Info: wofür gebraucht von: Michael
Geschrieben am: 17.10.2014 19:07:17

Hallo Joerschi,

Du hast mich was Nerven gekostet! Halb drei bis kurz vor sieben, das kannste nich bezahlen...

Also, folgende Lösungsvorschläge:

a) Du speicherst Dir die Seite aus Deinem ersten, nein, zweiten link ("zum") lokal ab, das ist nämlich nur JavaScript, und das funzt auch lokal; Du kannst ja alles an Text rauslöschen, was Du nicht immer wieder sehen willst. Die Einschränkung mit max. 10 bzw. 1000 steht in der Zeile 74 und sieht so aus:

if(anzeigen&&(f.ges.value<10)&&(f.erg.value<1000))

Man sollte meinen, daß das Skript auch läuft, wenn Du links 49 statt 10 einsetzt und rechts irgendwas anderes, Passendes.

b) Du schaust Dir mal diese Seite an: http://theory.cs.uvic.ca/amof/e_comb.html
Da sind die Grenzen "weiter draußen", zumindest bis n=20.

c) Du kompilierst das folgende PASCAL-Programm, z.B. bei http://www.onlinecompiler.net/pascal und lädtst Dir die .exe runter und benennst sie auf einen "normalen" Dateinamen um, z.B. Kombi.exe

Das rufst dann in der DOS-Box auf mit Kombi k n, wobei Du k und n durch die gewünschten Werte ersetzt, also etwa so:

C:\Dein_Ordner>kombi 2 4

Dann erfolgt die Ausgabe am Bildschirm.

Mit

C:\Dein_Ordner>kombi 2 4 >Werte.txt

werden die Zahlen in Werte.txt geschrieben, die Du wiederum in Excel importieren kannst.

Also, hier das Programm:

Program Combinations;
(* Quelle: http://rosettacode.org/ _
wiki/Combinations#Pascal
 *)
(*
const
 m_max = 3;
 n_max = 5;
 *)

var
 m_max, n_max,fehler:integer; 
 f:text;
var
 combination: array [1..20] of integer;
 (* Beschraenkung auf k max. 20 *)
 procedure generate(m: integer);
  var
   n, i: integer;
  begin
   if (m > m_max) then
    begin
    for i := 1 to m_max do
    write (f,combination[i]:4);
    writeln(f);
    end
   else
    for n := 1 to n_max do
     if ((m = 1) or (n > combination[m-1])) then
      begin
       combination[m] := n;
       generate(m + 1);
      end;
   end; 
 
begin
 assign(f,'');
 rewrite(f);
 Val(ParamStr(1), m_max,   fehler); (* k *)
 if (fehler<>0) or (m_max>20) then BEGIN writeln(f,'m_max passt nicht'); halt END;
 Val(ParamStr(2), n_max,   fehler); (* n *)                                
 if (fehler<>0) or (n_max>50) then BEGIN writeln(f,'n_max passt nicht'); halt END; 
 generate(1);
 close(f);
end.

Viel Spaß und schöne Grüße,

Michael


  

Betrifft: Nachtrag von: Michael
Geschrieben am: 17.10.2014 19:22:03

So ein Kommandozeilenprogramm ("DOS-Box") läßt sich natürlich auch von Excel aus steuern.

Anbei Datei mit Makro: https://www.herber.de/bbs/user/93220.xls

Setzt natürlich voraus, daß das Kombi.exe (oder wie auch immer es heißt) da ist, und zwar vorzugsweise im gleichen Ordner wie die Excel-Datei (geht auch anders, aber dann mußt nicht endlos rumklicken).

Paß nur auf, daß Du nicht 6 aus 49 testest, damit ist Deine Maschine sicher ne Weile beschäftigt, und alte Excels können keine 13 Mio. Zeilen.

M.


  

Betrifft: AW: Info: wofür gebraucht von: Joerschi
Geschrieben am: 17.10.2014 20:22:21

Hi Michael,

wow - soviel Zeit! Vielen lieben Dank!
Hier müsste es so etwas wie eine Flattr-Funktion geben, denn manchmal ist ein Dankeschön nicht genug.

Mmmhhh-vielleicht kann ich Dir dafür ein pacher Lacher zaubern. Vielleicht kennst Du die Filmseiten zukunftia oder manbeisstfilm noch nicht. Besonders bei Erstgenannter schöner Humor in Rezensionen. Falls Dir sowas gefällt.

Beste Grüße
Joerschi

PS: Ach ja - funktioniert übrigens super. Habe mich für Variante c) entschieden. Ist vielseitiger, wenn auch paar Minütchen Einrichtung.
(Variante b hat Limit von 200 Kombis)


  

Betrifft: Gerne von: Michael
Geschrieben am: 18.10.2014 13:09:41

Hi Joerschi,

freut mich, daß Dir c) gefällt. Ich hab locker zwei Stunden (mit VBA) rumgestöpselt und was hinbekommen, was irgendwie funktioniert, aber nicht richtig, dann hab ich mich doch dazu entschlossen, dem Algorithmus hinterher zu recherchieren. Das Kernstück ist ja rekursiv (d.h. es ruft sich immer wieder selbst auf), und mit nur ein paar Zeilen höchst elegant. Manche Leute können's einfach richtig gut. Und: Internet ist klasse!

Hast die Steuerung via Excel ausprobiert, die ich als Nachtrag geschickt habe? Würde mich noch interessieren.

Auf alle Fälle freut es mich, daß Du mit der Pascal-Geschichte zurechtgekommen bist. Das ist meine Lieblingsprogrammiersprache, und das online-tool ist für so kleine Sachen völlig ausreichend. Für große installiert man halt den fpc (free pascal compiler). Der ist übrigens ein paar Unterversionen weiter.

Vielen Dank für die links, ich gucke sie mir nach dem Einkaufen an.

Schöne Grüße,

Michael

P.S.: flattr mußte ich nachlesen, klingt aber interessant (für geplante Projekte). Danke.


  

Betrifft: AW: Gerne von: Joerschi
Geschrieben am: 19.10.2014 09:16:20

Hey Michael,

yup, flattr ist sehr vielseitig. Wird häufig von kleinen, hochwertigen Webseiten verwendet, wo man den Aufwand des Autors (siehe Astronomieseite astronews.com) oder eben auch Hilfen wie hier im Forum wertschätzen kann. Damit wird garantiert keine vollständige "Entlohnung" gewährleistet, aber eben...gewertschätzt :-)

Die Excel-Steuerung werd ich morgen mal ausprobieren. Hatte mich vorerst damit zufrieden gegeben und war happy, dass es überhaupt funktioniert. Hatte mich sehr überrascht (nach langer Google-Recherche), das es für sowas noch keine Online-Berechnung-Ausgabe irgendwo gibt. Bietet sich ja geradezu an.

Wünsch Dir was - genieß des Restsonntag!
Joerschi


  

Betrifft: AW: Gerne von: Michael
Geschrieben am: 19.10.2014 18:08:35

Hallo Joerschi,

vielen Dank für Deine Antwort.

"Bietet sich ja geradezu an", tja, könnte man echt machen, auf deutsch und etwas nett verpackt.

Ich bin seit Monaten drüber, was zusammenzuprogrammieren, was mit dem Thema zu tun hat und in Richtung Verschlüsselung geht. Hab mir in dem Zusammenhang schon überlegt, Deine Fragestellung mit reinzunehmen.

Programmiert isses eh schon.

Es läßt mir aber auch keine Ruhe! Diese rekursive Geschichte hat ihre Tücken: sie ist "langsam" und braucht "viel Speicherplatz" (s. wiki, rekursion), aber ich hab's heut auf die Schnelle nicht hingekriegt, den Algo in "nicht rekursiv" zu ändern.

Ich bin hier anonym, habe aber vor, das in absehbarer Zeit zu ändern. Wenn Du Lust hast, kannst ja in ein paar Wochen mal in den Profilen nach mir schauen, dann sollte meine site angegeben sein.

Alles Gute und schöne Grüße,

Michael


 

Beiträge aus den Excel-Beispielen zum Thema "Ausgabe Permutation-ohne Wdhlg., Beachtg. Reihenf."