Kombinationsmöglichkeiten eines char Arrays berechnen
-
darkfate schrieb:
Immer deine sinnlosen Beiträge. Wie schon so oft gesagt: Wenn du nicht hilfst oder einen sinnvollen Beitrag zu melden hast, dann melde dich doch einfach nicht.
Sinnlos war das garantiert nicht. Deine Aussagen werden nicht wahrer, indem du andere schlecht machst.
Bei Beispiel des Threaderstellers sind es drei Zeichen. Das sind drei Rekursionsebenen. Du hast in jedem komplexeren Programm die hundertfache Aufruftiefe und es stört niemanden.
Natürlich musst du das Problem nicht rein funktional angehen und auch die Zeichen auf gleicher Ebene mit Rekursion behandeln.
-
-
volkard schrieb:
krümelkacker hat aber sowas von recht.
Hat er eben nicht. Er wusste doch gar nicht wie ich es bei der ersten Betrachtung implementieren würde? Ich bitte mal an dieser Stelle um eine Antwort woher du wusstest wie ich es geplant habe?
volkard schrieb:
do weißt, was passiert, wenn man mehr als 69 elemente zum permutieren hat? du kannst die rechenzeit nicht mehr mit dem schultaschenrechner berechnen. und 69 dinge passen eigentlich meistens vielleicht schon gelegentlich auf den stack.
Diese Begründung ist absolut Nachvollziehbar. Nachdem ich auch ein wenig rumprobiert habe, bin ich auch darauf gekommen, dass es besser und schneller geht. Wenn er so geantwortet hätte, würde es auch keinen Flame geben. Er ist wie immer der Brandherd.
Nexus schrieb:
Sinnlos war das garantiert nicht. Deine Aussagen werden nicht wahrer, indem du andere schlecht machst.
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?
Nexus schrieb:
Das sind drei Rekursionsebenen. Du hast in jedem komplexeren Programm die hundertfache Aufruftiefe und es stört niemanden.
So intelligent konnte man argumentieren. Hat er aber nicht.
xDDDD schrieb:
darkfate schrieb:
...
Klarer Fall: [SELF](OWNED)
Komm lass gut sein krümmelkacker, hier weiß jeder dass es nur einen gibt der auf so ein Niveau sinken kann, da hilft auch kein neuer nick.
Ich poste mal einen ersten Ansatz ohne Gewähr auch Typsicherheit/undefiniertes Verhalten und Sonstiges... damit der Thread wenigstens einen Sinn hat.
#include <stdio.h> #include <string.h> static int t=1; void permutiere(char *eingabe, char *permutation); char *substr (const char *eingabe, int start, int laenge); int main() { char wort[] = "AB"; int i,n = (int) strlen(wort); for(i=0;i<n;i++){ char *tmpword = malloc((i+1)*sizeof(char)); t=0; tmpword = substr(wort,0,i+1); permutiere(tmpword,tmpword); } printf("Entgueltige Tiefe %i\n",t); return 0; } void permutiere(char *eingabe, char *permutation) { char *tausche,*selbst; char tempwort; t++; if (*(permutation+1) == 0) printf("%s\n", eingabe); else { for(tausche = permutation; *tausche; ++tausche) { for(selbst = permutation; *selbst != *tausche; ++selbst); if (selbst == tausche) { tempwort = *tausche; *tausche = *permutation; *permutation = tempwort; permutiere(eingabe, permutation+1); *permutation = *tausche; *tausche = tempwort; } } } } char *substr (const char *eingabe, int start, int laenge) { char *puffer; if (eingabe == NULL) return NULL; if (start < 0) start = strlen (eingabe) + start; if (start < 0) start = 0; if (laenge < 0) laenge = 0; if (start >strlen (eingabe)) start = strlen (eingabe); if (laenge > strlen (&eingabe[start])) laenge = strlen (&eingabe[start]); if ((puffer= (char*) malloc (laenge + 1)) == NULL) return NULL; memcpy (puffer, &(eingabe[start]), laenge); puffer[laenge] = '\0'; return buff; }Ist aber wie man sieht nur rekursiv und kein C++
-
darkfate schrieb:
volkard schrieb:
krümelkacker hat aber sowas von recht.
Hat er eben nicht. Er wusste doch gar nicht wie ich es bei der ersten Betrachtung implementieren würde? Ich bitte mal an dieser Stelle um eine Antwort woher du wusstest wie ich es geplant habe?
Weil ich angenommen hatte, daß Du schlau bist. Ich fürchte, nach Deinem letzen Posting kannst Du das in Bezug auf Permutationenprogrammierung auch nicht mehr so recht leugnen. hihi.

Naja, eventuell ist dies oder jenes einen MOment zu spät oder zu früh gesagt worden, aber alles im Bereich, wie es für mich gut verständlich ist und kein Grund für rote Köpfchen
. 
-
Nexus schrieb:
Bei Beispiel des Threaderstellers sind es drei Zeichen.
Endl schrieb:
sämtliche Kombinationsmöglichkeiten des Inhaltes eines char Arrays zu berechnen und auszugeben
Jetzt könnte ich genau so antworten wie Krümmelkacker in seinem ersten Post mit: SO EIN QUATSCH! Ist es angenehme Antwort nachdem du sein Anliegen nicht richtig verstanden hast so wie ich im ersten Moment anscheinend keine optimale Lösung hatte? Nein ist es nicht. Da wird aber kein Wort in seine Richtung gesprochen der es permanent fast in jedem Post macht. Scheuklappen?
Ein char Array kann auch laenger als drei Zeichen sein. Hat nirgendwo geschrieben dass es nur drei Zeichen sein sollen.
-
volkard schrieb:
Weil ich angenommen hatte, daß Du schlau bist.
Tja..

volkard schrieb:
Ich fürchte, nach Deinem letzen Posting kannst Du das in Bezug auf Permutationenprogrammierung auch nicht mehr so recht leugnen. hihi.

Ich hatte Zorn und wollte bei dem ganzen Ärger wenigstens eine Lösung bieten damit der Fragende nicht andauernd Flame lesen muss.
volkard schrieb:
Naja, eventuell ist dies oder jenes einen MOment zu spät oder zu früh gesagt worden, aber alles im Bereich, wie es für mich gut verständlich ist und kein Grund für rote Köpfchen
. 
Nein eben nicht. Dieser Krümmelkacker buksiert andauernd mit seinen absolut Sinnlosen kommentaren die eher Zorn als Hilfe bringen.
-
darkfate schrieb:
volkard schrieb:
krümelkacker hat aber sowas von recht.
Hat er eben nicht. Er wusste doch gar nicht wie ich es bei der ersten Betrachtung implementieren würde? Ich bitte mal an dieser Stelle um eine Antwort woher du wusstest wie ich es geplant habe?
Wen interessiert, wie du es geplant hast? Du kannst die rekursive Lösung nicht dadurch schlecht machen, dass du sie total verunstaltest.
So intelligent konnte man argumentieren. Hat er aber nicht.
Ich erkenne bei ihm mehr Argumentation als bei dir => eigene Nase.
-
Michael E. schrieb:
Wen interessiert, wie du es geplant hast?
Lies erst einmal um was es geht.
Michael E. schrieb:
Ich erkenne bei ihm mehr Argumentation als bei dir => eigene Nase.
Lies doch einmal den Thread durch bevor du schreibst.
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?
-
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