Kombinationsmöglichkeiten eines char Arrays berechnen
-
darkfate schrieb:
Immer wieder das Problem. Er hat angefangen. Wie kommst du auf die Idee das ich ihn schlechter mache als er ist? Wieso sprichst du jetz mich an? Steht mein Post vor seinem?
Ich habe nirgends gesagt, dass ich krümelkackers "So ein Quatsch!" gut finde. Aber du lässt dich auch wirklich sehr leicht provozieren. Immerhin hat krümelkacker nebenbei sachlich geantwortet und dir das Problem erklärt, du solltest seinen Post nicht auf einen Flame reduzieren. Ich habe auch nicht das Gefühl, dass das "So ein Quatsch" allzu persönlich gemeint ist (auch wie ich krümelkacker vom Forum hier kenne). Bei "deine Posts sind immer sinnlos" fällt es mir hingegen schon schwerer, das zu glauben.
Ich will damit nur sagen, dass du in Zukunft vielleicht etwas lockerer reagieren und nicht gleich alle Kritik als feindselig erachten solltest. Und Rechtfertigungen wie "er hat angefangen" hast du nun wirklich nicht nötig.
-
warum hat bisher eigtl niemand std::next_permutation vorgeschlagen?
mindestens für die n-elementigen geht das super - für die ein- und zweielementigen(bzw nicht n-elementigen) fällt mir zugegebenermaßen keine super-tolle idee damit ein...
bb
-
Es paßt zwar nicht mehr ganz so ins C++-Forum, und ich müßte eigentlich dichtmachen, aber ich lasse den Thread mal laufen.
Der Fragesteller Endl kann sich ja die benötigten Informationen herausziehen.
Zu Permutationen gibts AFAIR sigar eibnen Artikel im Magazin. http://www.c-plusplus.net/forum/viewtopic-var-t-is-178286-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html
Hier waren nur Kombinationsmöglichkeiten gefragt, fürchte ich. Die würde ich nichtmal rekursiv machen. Das geht auch wie ein mechanischen Zählwerk http://de.wikipedia.org/w/index.php?title=Datei:Handzaehler01_clip.jpg&filetimestamp=20060614112826 irgendwie.
-
unskilled schrieb:
warum hat bisher eigtl niemand std::next_permutation vorgeschlagen?
Da hatten wir bis gerade Glück gehabt. Weil es nicht um die 3!=6 Permutaionen von ABC geht, sondern um die 3^3=27 Kombinationen. Um Genau zu sein, um die 3^2 zweibuchstabigen und 3^1 einbuchstabigen auch, aber das kann ein Schleifchen außenrum ja gut machen.
-
Nexus schrieb:
Ich habe nirgends gesagt, dass ich krümelkackers "So ein Quatsch!" gut finde.
Nutzt nichts wenn du aber nur meinen Post anmerkst. Ist nicht das erste mal übrigens.
Nexus schrieb:
Aber du lässt dich auch wirklich sehr leicht provozieren.
Weil es eben wie gesagt nicht das erste mal ist. Und es ist nicht das erste mal das komischerweise keiner seinen absolut unnötigen Kommentar bemängelt.
Nexus schrieb:
Immerhin hat krümelkacker nebenbei sachlich geantwortet und dir das Problem erklärt,
Super damit wäre ich glücklich. Ich habe noch nie Jemanden angepöbelt der mir sachlich kritisch geantwortet hat.
Nexus schrieb:
du solltest seinen Post nicht auf einen Flame reduzieren.Ich habe auch nicht das Gefühl, dass das "So ein Quatsch" allzu persönlich gemeint ist (auch wie ich krümelkacker vom Forum hier kenne).
Wenn ich mich mit dir unterhalte und dich zwischendurch beleidige dann versuch du mal das Gespräch nicht auf die Beleidigungen zu reduzieren. Erst recht wenn es der erste Satz war.
Nexus schrieb:
Bei "deine Posts sind immer sinnlos" fällt es mir hingegen schon schwerer, das zu glauben.
Geh doch seine Posts durch. Er hat eine total unverschämte Art. Wenn manch einer sich das bieten lässt ist es ok... ich nicht.
Nexus schrieb:
Ich will damit nur sagen, dass du in Zukunft vielleicht etwas lockerer reagieren und nicht gleich alle Kritik als feindselig erachten solltest. Und Rechtfertigungen wie "er hat angefangen" hast du nun wirklich nicht nötig.
Wie gesagt, wenn er so reden möchte, soll er es Zuhause bei seinen Eltern/Freunden oder wem auch immer tun. Ich möchte das nicht.
-
darkfate schrieb:
Michael E. schrieb:
Wen interessiert, wie du es geplant hast?
Lies erst einmal um was es geht.
Hab ich.
Michael E. schrieb:
Ich erkenne bei ihm mehr Argumentation als bei dir => eigene Nase.
Lies doch einmal den Thread durch bevor du schreibst.
Hab ich immer noch.
Michael E. schrieb:
Du kannst die rekursive Lösung nicht dadurch schlecht machen, dass du sie total verunstaltest.
Was ist denn dass bitteschön für eine Aussage? Wo ist da der Bezug zu überhaupt irgend etwas?
Zum von mir Zitierten.
Aber da ich weiß, dass du sowieso ein hoffnungsloser Fall bist, bin ich auch schon wieder weg

-
Das kann man intelligenter wie eine n dimenionale quadrik aufspannen, ganz ohne Rekursion.
hier in 3D in Buchstaben:
ABC
ACB
BAC
BCA
CBA
CABhier 3D in Koordinaten einer einfachen Ebene
-X-----Y-----Z-
0.0 - 1.0 - 2.0
0.0 - 2.0 - 1.0
1.0 - 0.0 - 2.0
1.0 - 2.0 - 0.0
2.0 - 1.0 - 0.0
2.0 - 0.0 - 1.0Wenn man das erste Array anschaut muss man einfach nur eine Sequenz erzeugen.
Jedes Element n-1 mal wiederholen.Das zweite Array beginnend mit dem zweiten Element bis zum ersten Element. Dann beginnend mit dem dritten Element bis zum ersten Element usw..
Das dritte Element ist keines der ersten beiden.
Nur für diese Anfangssequenz müsste man sich etwas überlegen.
Man braucht halt drei Arrays mit n³-2n²+n Elementen. Dürfte theoretisch besser sein als andauern Rücksprungadressen auf dem Stack abzulegen. Außerdem kann man damit schön Mehrkernprozessoren auslasten.
-
darkfate, sobald in einem Post irgendeine Bemerkung kommt, siehst du rot und fängst ein Riesen-Theater an. Völlig unabhängig davon, ob dir der Benutzer auch schon geholfen hat, oder ob er dir sogar im gleichen Post wertvolle Hinweise gibt. Ausserdem siehst du sowas gerade als Anlass, selbst beleidigend zu werden und dich auf noch tieferes Niveau zu begeben. Sowas kann nicht gut gehen.
In einem Forum führt es zu nichts, derart empfindlich zu sein. Letztes Mal hat dich krümelkacker wegen der fehlenden Eigeninitative kritisiert, und schon da hast du die Gelegenheit genutzt, um eine Metadiskussion anzufangen und ihn über eine Seite lang des Flamens zu beschuldigen. Was bringt das? Du fällst nur negativ auf und die Leute wundern sich. Falls du krümelkacker wirklich für einen Troll hältst (ich tue das nicht, er schreibt hier oft gute Beiträge), dann ignoriere ihn doch. Oder noch besser: Versuch es mit ihm persönlich zu klären, notfalls über einen Moderator. Aber veranstalte keinen öffentlichen Pranger, dabei kannst du nichts gewinnen.
Ich hoffe, du verstehst diesen Post als guten Rat und nicht auch etwa als persönlichen Angriff.
-
Nexus schrieb:
darkfate, sobald in einem Post irgendeine Bemerkung kommt, siehst du rot und fängst ein Riesen-Theater an.
Ab hier ist schluss. Dass stimmt einfach nicht. Nenne mir ein einziges Beispiel wo Krümmelkacker nicht beteiligt ist.
Nexus schrieb:
Letztes Mal hat dich krümelkacker wegen der fehlenden Eigeninitative kritisiert, und schon da hast du die Gelegenheit genutzt, um eine Metadiskussion anzufangen und ihn über eine Seite lang des Flamens zu beschuldigen.
Natürlich weil das absolut nicht stimmt. Ich lasse mir das auch nicht anhängen.
Nexus schrieb:
In einem Forum führt es zu nichts, derart empfindlich zu sein. In einem Forum führt es zu nichts
Es ist aber auch kein Freischein andere Leute absolut zu unrecht anzupöbeln.
Nexus schrieb:
Du fällst nur negativ auf und die Leute wundern sich.
Schon wieder. Wer hat zuerst angefangen zu pöbeln? Ich muss mir nicht in jedem seiner Beiträge irgendwelche Provokationen gefallen lassen.
Nexus schrieb:
Falls du krümelkacker wirklich für einen Troll hältst
Er hat nur einfach keine gute Erziehung genossen. In realem Umfeld wäre es sehr unangenehm für Ihn so einen Unfug von sich zu lassen.
Nexus schrieb:
er schreibt hier oft gute Beiträge),
Schließt es doch nicht aus dass er gerne Unfug schreibt.
Nexus schrieb:
dann ignoriere ihn doch.
Garantiert. Solchen Leuten muss man einfach zeigen dass es nicht so weiter geht.
Nexus schrieb:
Oder noch besser: Versuch es mit ihm persönlich zu klären, notfalls über einen Moderator. Aber veranstalte keinen öffentlichen Pranger, dabei kannst du nichts gewinnen.
Lies dir doch mal die letzte Konfrontation, da habe ich es auch versucht zu erklären das ich nicht nebenbei schlafe. Im Endeffekt war es sinnlos.
-
Naja da dies hier alles irgendwie ausartet und ich(dank volkard & darkfate) schon eine ungefähre Vorstellung habe wie ich mein Problem lösen werde, möchte ich allen(die nicht geflamt haben) danken und bitte um Schließung des Threads bevor es noch weiter ausartet.
MfG Endl
-
Endl schrieb:
Threads bevor es noch weiter ausartet.
Huch?! Im moment ist es doch wieder ruhig?
-
darkfate schrieb:
krümelkacker schrieb:
..
Immer deine sinnlosen Beiträge.
[...]Hast Du etwa nach dem "So ein Quatsch!" aufgehört zu lesen? Ich schrieb:
krümelkacker schrieb:
Es kommt auf die Tiefe des "Aufruf-Baums" an und nicht, wieviele "Knoten" der hat, was im übrigen auch nicht n! gewesen wäre. Die Tiefe des "Aufruf-Baums" bei so einem rekursiven Ansatz für das Aufzählen aller Kombinationsmöglichkeiten der Länge n wäre n selbst. Das ist natürlich kein Problem für den automatischen Speicher.
Ich denke, der "Ansatz" ist von Dir gar nicht verstanden worden. Der "rekursive Ansatz" sieht so aus (falls das noch nicht klar sein sollte):
#include <iostream> #include <cassert> void aufzaehlen(char* ioptr, const char* from, int sub=0) { if (!*ioptr) { std::cout << (ioptr-sub) << '\n'; return; } const char* q = from; while (*q) { *ioptr = *q++; aufzaehlen(ioptr+1,from,sub+1); } } int main() { char puffer[] = "xxx"; // bis zu drei Zeichen ... char* p = puffer; while (*p) { aufzaehlen(p,"ABC"); // ... aus A,B,C p++; } }Wie Du feststellen kannst, ist da die Rekursionstiefe höchstens 3.
darkfate schrieb:
Nenne mir ein einziges Beispiel wo Krümmelkacker nicht beteiligt ist.
??
Ich kann mich jetzt nur an 2 Threads erinnern, wo ich mich Dir gegenüber negativ zu Wort gemeldet habe. Das eine Mal hast Du nachgefragt, wozu das "const" hinter Elementfunktionen gut ist, was man auch alleine hätte rausfinden können und das zweite Mal heute hier, wo Du anscheinend nicht auf diese simple Lösung gekommen bist und etwas von Rekursionstiefe n! erzählen wolltest.kk
-
Endl schrieb:
möchte ich allen(die nicht geflamt haben) danken und bitte um Schließung des Threads bevor es noch weiter ausartet.
Vielen Dank. Wir Mods haben bei sowas immer das Problem, ob wir einen Thread abwürgen, was zwar den Streit (kurzfristig) beendet, aber dem Fragesteller unter Umständen die Lösung entzieht. Jetzt weiß jeder Mod, daß er schließen kann. Nett von Dir. Ich werde auch den Thread nicht nur schließen, sondern sogar ganz löschen, weil er doch ein wenig zu weit danebengeht. Aber noch hoffe ich, daß die Kombattanten sich einigen. Nicht wundern, wenn der Thread plötzlich weg ist.
Endl schrieb:
Naja da dies hier alles irgendwie ausartet und ich(dank volkard & darkfate) schon eine ungefähre Vorstellung habe wie ich mein Problem lösen werde,
Ich würde empfehlen, daß Du nochmal einen Thread startest, in dem Du explizit nach einer Lösung fragst für das Alphabet "ABCDEF" und nur alle achtbuchstabigen Kombinationen. (Kein Witzt, da steckt algorithmisch noch ein Klassiker drin, der saulecker ist.)
-
krümelkacker schrieb:
Hast Du etwa nach dem "So ein Quatsch!" aufgehört zu lesen?
Ja weil es überflüssig war. Es geht auch anders.
krümelkacker schrieb:
Ich denke, der "Ansatz" ist von Dir gar nicht verstanden worden. Der "rekursive Ansatz" sieht so aus (falls das noch nicht klar sein sollte)
Super! Damit wäre ich glücklich. Ich bin kein Programmierer ich hatte keine C/C++ Vorlesung. Gönne mir Fehler!
krümelkacker schrieb:
Ich kann mich jetzt nur an 2 Threads erinnern, wo ich mich Dir gegenüber negativ zu Wort gemeldet habe.
Da haben wir doch schon eins. Du weißt ja, negative Dinge brennen sich sehr einfach ins Gedächtnis. Ich bin eben auf der Suche sogar auf sinnvolle Antworten von dir auf meine Fragen gestoßen. Die hatte ich wohl zuvor im Zorn verdrängt.
krümelkacker schrieb:
was man auch alleine hätte rausfinden können
Es ging darum ob man sich die übrigen const in den Argumenten sparen könnte wenn man hinter die Memberfunktion ein const hat. Die Antwort war nein, das const hinter der Memberfunktion gilt nur für this->Pointer. Dafür habe ich einen ganzen Tag suchen müssen bevor nach vielen Vorwürfen der Untätigkeit der richtige Tipp kam. Total unnötig. Diese schnelle Knappe Antwort von 10sec Aufwand hätte mir die frustrierende Suche erspart.
Alleine wäre ich sicherlich auch nach zwei Tagen nicht drauf gekommen weil ich nach einer anderen Form von Antwort gesucht habe. Zu meiner Frustration kamst auch noch du und behauptest ich sei zu faul selber zu suchen. Ich habe es ja versucht zu erklären aber es war fruchtlos.krümelkacker schrieb:
und das zweite Mal heute hier, wo Du anscheinend nicht auf diese simple Lösung gekommen bist und etwas von Rekursionstiefe n! erzählen wolltest.
Es ist nunmal so das man eine Lösung unendlich kompliziert gestalten kann. Ich habe, ohne viel Zeit dafür zu investieren, schnell eine Skizze gemacht und bin auf eine Tiefe von n! gekommen, dafür konnte ich im Moment nichts. Keine gute Lösung, aber auch kein Grund mich so anzufahren. Weil ich mich schon mit einer anderen/besseren Lösung beschäftigt habe (steht irgendwo oben), ließ ich kurz ein Kommentar los damit er sieht das man seine Frage zur Kenntnis genommen hat. Damit hatte er auch eine Richtung in die er schonmal anfangen könnte.
-
rekursiv iterieren
Was denn nun, Rekursion oder Iteration?
Ich hatte Zorn
Siehst du, hilft absolut ueberhaupt nicht.
warum hat bisher eigtl niemand std::next_permutation vorgeschlagen?
Weil das nicht die Loesung des Problems ist.
Und hier die ultimative Loesung in Haskell mit purer REKURSION. Die Laenge der Liste entspricht der Rekursionstiefe.
fun 1 ls = map (\x -> [x]) ls fun n ls = a ++ concatMap (\x -> map (\y ->y:x) ls) a where a = fun (n-1) ls realFun ls = fun (length ls) ls realFun "ABC" fuehrt zu 48 Elementen als AusgabeMan braucht halt drei Arrays mit n³-2n²+n Elementen. Dürfte theoretisch besser sein als andauern Rücksprungadressen auf dem Stack abzulegen.
Das bezweifle ich. Wie sieht dein Ansatz mit "ABCDE" oder laengeren Zeichenketten aus?
-
knivil schrieb:
Was denn nun, Rekursion oder Iteration?
Rekursiv iterieren
-
Es ist aber auch kein Freischein andere Leute absolut zu unrecht anzupöbeln.
Willkommen im Internet.
Wer hat zuerst angefangen zu pöbeln?
Kleinkind?
Er hat nur einfach keine gute Erziehung genossen. In realem Umfeld wäre es sehr unangenehm für Ihn so einen Unfug von sich zu lassen.
Ueberlasse die Erziehung doch anderen, ein Forum ist dafuer wohl das ungeeignetste Medium.
PS: Zu Iteration gehoeren Iterationskonstrukte wie for oder while, im Allgemeinen werden sie auch Schleifen genannt und unterscheiden sich allein dadurch von Rekursion. Jedoch kann mittels Rekursion Iteration nachgebildet werden. Daraus ergibt sich a)es ist doppelt gemoppelt, was du schreibst oder b) komplett widerspruechlich.
-
knivil schrieb:
Willkommen im Internet.
Kleinkind?
Ueberlasse die Erziehung doch anderen, ein Forum ist dafuer wohl das ungeeignetste Medium.
Och komm, mir geht es gerade so gut. Wir müssen das jetzt nicht noch einmal durchdiskutieren. Ich habe auch schon aus diesem Grund aufgehört Fragen zu stellen falls ich mal was nicht verstehe.. es muss nicht noch weiter gehen.
knivil schrieb:
PS: Zu Iteration gehoeren Iterationskonstrukte wie for oder while, im Allgemeinen werden sie auch Schleifen genannt und unterscheiden sich allein dadurch von Rekursion.
Richtig. Wenn man jedoch eine Rekursion hat über der eine Schleife hängt, dann iteriert man rekursiv.
// Schleife for(i=0;i<n;i++){ char *tmpword = malloc((i+1)*sizeof(char)); t=0; tmpword = substr(wort,0,i+1); // Rekursion permutiere(tmpword,tmpword); }
-
darkfate schrieb:
Wenn man jedoch eine Rekursion hat über der eine Schleife hängt, dann iteriert man rekursiv.
Alles das sollte man aus deinem ersten Post mit dieser Formulierung herauslesen. Sorry.
-
knivil schrieb:
Alles das sollte man aus deinem ersten Post mit dieser Formulierung herauslesen.
Den anfänglichen Buchstabensalat wird man wohl am einfachsten mit einer Iteration lösen, bis es zur voller Wortgröße kommt.
A AB BA --- // Mir fällt jetzt nichts ein wie es bis hier ohne zu iterieren kurz zu lösen wäre. ABCDer interessante Teil kommt sowieso erst in der vollen Wortgröße.
Bis gestern Abend habe ich die ersten beiden Arrays hinbekommen..
vielleicht komme ich heute Abend dazu es zu beenden falls überhaupt noch Interesse besteht es ohne Rekursionen zu lösen.knivil schrieb:
Sorry.
Wofür? Man wird sich doch wohl das Recht haben, kritisch zu hinterfragen? So empfindlich bin ich doch gar nicht.