Fehler in Bubblesort
Schnaps
- perl
0 Struppi0 Klaus Mock
Servus
Ich habe zum sortieren eines Mehrdimensionalem hash ein Bubblesort programmiert.
Nur leider sortiert dieses nicht komplett durch.
Die ersten werden alle richtig eingeordnet nur irgentwann ist es dann vorbei mit der Sortierung.
Zum Aufbau meines Hashes
Es ist wie eine Tabelle aufgebaut,
$neu_alignment{'$key'}{} , der Key steht dann für die Namen die die einzelnden Zeilen haben.
$neu_alignment{'$key'}{$i} sind dann Buchstaben die zusammengesetzt den String mit dem namen $key ergeben.
Und in $neu_alignment{'quali'}{$i} ist immer die Qualität (ein numerischer wert) von der jeweiligen SPALTE des Hashes gespeichert. Nach diesem Wert soll das Hash sortiert werden.
Ich wäre euch sehr Dankbar wenn ihr mal drüber schauen würdet, da ich so langsam den Überblick verliere.
hier mal mein Code
my $anzahl_saetze = (scalar keys %neu_alignment)-1;
my %temp;
foreach my $test(%neu_alignment){
for(my $j=$length; $j>0; $j--) {
if($neu_alignment{'quali'}{$j-1} < $neu_alignment{'quali'}{$j} ) {
while (($key) = each(%neu_alignment)) {
$temp{$key} = $neu_alignment{$key}{$j-1};
}
while (($key) = each(%neu_alignment)) {
$neu_alignment{$key}{$j-1} = $neu_alignment{$key}{$j};
}
while (($key) = each(%temp)) {
$neu_alignment{$key}{$j} = $temp{$key};
}
}
}
}
Ich habe zum sortieren eines Mehrdimensionalem hash ein Bubblesort programmiert.
Ich hab dir doch schon mehrere Tipps gegeben?
Warum verwendest du die die nicht funktionieren und dazu total lahm sind anstatt denen die schnell, einfach sind und funktionieren?
Ich wäre euch sehr Dankbar wenn ihr mal drüber schauen würdet, da ich so langsam den Überblick verliere.
Das glaub ich dir und ist bei dem Aufbau ja auch kein Wunder.
Ein HASH ist nicht das Allheilmittel, sondern im Gegenteil er kann sogar sehr langsam sein. Wenn du ein Array verwenden kannst du das, es ist immer um einiges schneller als ein Hash. Aber das hab ich dir mittlerweile 2 mal? dreimal? ich weiss es nicht geraten.
for(my $j=$length; $j>0; $j--) {
selbst wenn das sinnvoll wäre (ich sach's einfach nochmal: du hast ein Array und bist aus irgendeinem Grunde der Meinung dieses als Hash verwenden zu müssen) in Perl kann man das so schreiben:
for my $i($length..0)
Struppi.
Nett das du geantwortet hast,
aber leider hast du mir lediglich eine andere Schreibweise gesagt für eine for Schleife.
Sieht zwar nett aus , aber hat nichts mit dem Problem zu tun.
Und ein hash das ich über $neu_alignment{'name'}{$i} anspreche ist doch ein hash und kein Array wie du schreibst????????
Nett das du geantwortet hast,
ich hab dir bereits x-mal geantwortet (allein gestern zweimal).
Und ein hash das ich über $neu_alignment{'name'}{$i} anspreche ist doch ein hash und kein Array wie du schreibst????????
Das hatte ich dir in den anderen Postings dioch schon geschrieben. Dort hatte ich dir geschrieben, wie du mit einem einfachen sort deine Tabelle sortieren kannst, wie du deine Datenstruktur verbesserst usw.
Ich hab dir auch gesagt, das du hier ein Hash verwendest, obwohl es klar und deutlich ein Array sein müßte. du gehst die Zahlen von 0 bis $length durch und greifst auf ein key mit diesen Werten zu. Würdest du einen Index verwenden wäre das um eineiges schneller.
Aber dein Hauptproblem ist, das deine Datenstruktur falsch ist. Du hast vorne den key und dahinter den Index, würdest du das andersherum machen wären alle deine Probleme mit einem Streich gelöst. Wie das funktioniert hatte ich dir gestern? vorgestern? ich weiß es nicht mehr - schon geschrieben und ein funktionierendes Beispiel dazu.
Struppi.
Ja ich hatte meine Version hier auf eine Idee von euch oder vielleicht auch von dir aufgebaut.
Ich finde das ist kein Grund so gereizt auf meine Frage zu reagieren.
Zigtausend Antworten......
Na ja, es waren wohl eher so um die 5 und wenn du jedem unter den Bart reiben willst wieviel du schon geschrieben hast ist das glaube ich nicht gerade der richtige Weg.
Ach ja, das Programm läuft jetzt übrigens, es hat einen Fehler bei der Berechnung der 'Quali' Werte in dem Hash gegeben und deswegen ging die Sortierung nicht ganz durch.
Der Code so wie er da steht funktioniert aber.
Aber trotzdem nochmal danke für deine Hilfe, ohne deine Ideen wäre ich wohl nicht auf den richtigen Trichter gekommen, auch wenn es nicht der Trichter geworden ist den du meintest.
MFG
Schnaps
Ich finde das ist kein Grund so gereizt auf meine Frage zu reagieren.
Ich hatte dir gestern mehrmals geantwortet und davor auch schon (ich glaub am Samstag). Jetzt postest du Quellcode der völliger Schrott ist und in dem nicht ein einziger Vorschlag umgesetzt ist den ich dir zeigte.
Zigtausend Antworten......
Na ja, es waren wohl eher so um die 5 und wenn du jedem unter den Bart reiben willst wieviel du schon geschrieben hast ist das glaube ich nicht gerade der richtige Weg.
Mir geht es nicht darum dir etwas unter den Bart zu reiben, sondern ich frage mich was dich an meinen sehr konkreten und funktionierenden Vorschlägen gestört hat, dass du jetzt wieder mit so einem Mistcode ankommst?
Ach ja, das Programm läuft jetzt übrigens, es hat einen Fehler bei der Berechnung der 'Quali' Werte in dem Hash gegeben und deswegen ging die Sortierung nicht ganz durch.
Der Code so wie er da steht funktioniert aber.
Er bleibt aber Schrott und langsam.
Aber trotzdem nochmal danke für deine Hilfe, ohne deine Ideen wäre ich wohl nicht auf den richtigen Trichter gekommen, auch wenn es nicht der Trichter geworden ist den du meintest.
Ich befürchte du willst dir sowieso nicht helfen lassen.
Mir egal, ich ärger mich nur, weil ich mich hingesetzt habe eine Lösung dir programmiert hatte die gut einfach und sinnvoll ist - letztlich meine Zeit die ich - weil du hier gefragt hast - für dich verschwendet habe. Wenn du gesagt hättest - will ich nicht, weil ich es nicht versteh - kein Problem. Aber du hast alle meine Vorschläge bisher ingnoriert und willst mir jetzt noch erzählen es stimmt nicht.
Gut dann programmier so weiter wie bisher. Aber du wirst sehen es ist einfach Mist wie es jetzt ist.
Struppi.
Gäääääähhhhhhhhhhhhhhnnnnnnnnnnnn......
oh man, du langweilst mich!!!!!!
Ich hatte einen freundlichen letzten Post und von dir kommen nur Beleidigungen und selbstherliche eigen Zitate.
du und dein ach so genialer Code!!!!
also ich hab noch mal nach deinem von dir so oft gepriesenem Code geschaut und in dem selben Post ist auch noch ein Vorschlag von jemand anders den ich auch genommen habe. er hat nicht drauf bestanden alles um zu bauen wie er es mag sondern war gut genug aus meinen bestimmt nicht idealen ausgangs bedingungen noch eine richtige lösung zu zaubern.
und das du deine Zeit wie du sagst verschwendest, tja, was soll man dazu sagen.
Antworte halt nicht hier im Forum Leuten die Hilfe suchen.
ich kann nur sagen du bist ein Selbstherlicher Klugscheißer der mal etwas seinen Ton überdenken sollte, denn den freundlichen letzten Post von mir hätte man bestimmt etwas netter beantworten können.
gruß
Schnaps
oh man, du langweilst mich!!!!!!
Ich brauch die Hilfe nicht.
also ich hab noch mal nach deinem von dir so oft gepriesenem Code geschaut und in dem selben Post ist auch noch ein Vorschlag von jemand anders den ich auch genommen habe. er hat nicht drauf bestanden alles um zu bauen wie er es mag sondern war gut genug aus meinen bestimmt nicht idealen ausgangs bedingungen noch eine richtige lösung zu zaubern.
Genau.
Du ignorierst den besseren Vorschlag um einen der dir jetzt wieder Probleme bereitet und auch von sonstigen Aspekten nicht sinnvoll ist vorzuziehen.
Wenn du es freundlich findest jemand der dir versucht zu helfen permanet zu ignorieren, ok.
ich kann nur sagen du bist ein Selbstherlicher Klugscheißer der mal etwas seinen Ton überdenken sollte, denn den freundlichen letzten Post von mir hätte man bestimmt etwas netter beantworten können.
Klar, bin ich das, wenn ich mich hinsetzt dir ein paar Zeilen schreibe um dir zu zeigen wie man in Perl tolle Sachen schreiben kann und du kommst kurz darauf mit einem noch schlechteren Code an. Ich antworte dir nochmal - du ignorierst es noch mal. Nicht das wir uns falsch verstehen - ich will keine Antwort ich will nicht das du sagst toll - ich will lediglich Wissen warum du mich wie ein Depp behandelst und meine Antworten permament ignorierst. Dann pack ich dich in meinem Filter und werde dich nie mehr mit meinen Antworten behelligen.
Struppi.
ich kann nur sagen du bist ein Selbstherlicher Klugscheißer der mal etwas seinen Ton überdenken sollte, denn den freundlichen letzten Post von mir hätte man bestimmt etwas netter beantworten können.
Ich bin durchaus selbstkritikfähig und ich hab mir mal die Mühe gemacht und deine Vorwürfe versucht nachzuvollziehen. Hier sind einige Auszüge aus meinen Vorschlägen an dich:
----------------
http://forum.de.selfhtml.org/my/?t=79952&m=463768
Deine Datenstruktur ist sehr fragwürdig.
ok, das ist nicht nett gebe ich zu
Vielleicht wäre alle einfacher, wenn du die Struktur sinnvoll änderst.
Ach du Scheiße, stimmt ich will dir total meine Vorstellungen aufdrängen ich schlimmer Finger. Ich bin so selbstherrlich.
(naja, das danach noch noch ein Beispiel code folgt der a.) wesentlich kürzer ist und b.) mit sort funktioniert macht mein Posting noch unverzeihlicher)
----------
http://forum.de.selfhtml.org/my/?t=80061&m=464500
Das ist doch wieder genau das gleiche, du willst hier kein Hash sondern ein Array. warum verwendest du dann keins?
ertappt, ich kann nicht aufhören etwas aufzudrängen.
und dann kanst du einfach mit einer foreach Schleife alle Elemente durchgehen:
print $_ foreach( @{$neu_alignment{$key}} ) ;
Oh Mann, ich bin so ein Besserwisser - tut mir ganz schrecklich leid.
Struppi.
Zuerst hast du mich ja noch genervt mit deiner Art, aber jetzt wo ich sehe das du immer noch weiter machen mußt und dich anscheinend wirklich angegriffen fühlst, geht es mir doch immer besser und ich fange an richtig schön über dich lachen zu können.
Bist halt nur ein kleiner armer Wurm!!!!
Bist halt nur ein kleiner armer Wurm!!!!
Klar - das weiß ich.
Aber trotz allem hätte ich Wurm dir geholfen - naja, wenn man's genau nimmt hab ich's auch - da du ja so toll andere beleidigen kannst fällt dir vielleicht auch eine passende für Menschen wie dich ein - denen man es nicht recht machen kann und wenn sie nicht kriegen was sie wollen reagieren wie 3-jährige. (ich möchte hier keine 3 jährigen beleidigen, fals du unwesentlich älter bist, nehm ich das zurück und wunder mich nicht mehr über dein Verhalten)
Struppi.
Hallo,
Bist halt nur ein kleiner armer Wurm!!!!
Ich denke, es reicht. Vielleicht kannst Du es nicht sehen, aber so wie ich Struppi's Reaktionen interpretiere, ist er ziemlich enttäushct darüber, dass Du, obwohl Dir mehrere gesagt haben, dass Deine Lösung, sagen wir es einmal vorsichtig, suboptimal ist, diese Ratschläge nicht angenommen hast.
Dass Deine Lösung jetzt anscheinend funktioniert, hat an sich noch nicht viel zu bedeuten. Vor allem gibt sie Dir nicht das Recht, derart überheblich zu sein. Bedenke, dass da jemand in siener Freizeit und unentgeltlich versucht hat, eine gute Lösung für Dein Problem zu finden. Er hat es einfach nicht verdient, als Wurm bezeichnet zu werden.
@Struppi: Ich denke Du solltest es auch bleiben lassen. Wenn sich jemand beständig gegen einen besseren Vorschlag entscheidet, so ist jedes weitere Wort an sich schon eines zu viel.
Naja, wie gesagt, ich denke es reicht.
Grüße
Klaus
@Struppi: Ich denke Du solltest es auch bleiben lassen. Wenn sich jemand beständig gegen einen besseren Vorschlag entscheidet, so ist jedes weitere Wort an sich schon eines zu viel.
Naja, mich hatte lediglich interessiert warum. Ich bin schließlich auch immer nur am lernen und vielleicht kann ich etwas dazu lernen.
Aber meine Fragen hat er schön ignoriert um stattdessen hier so'ne *bääh ich bin beleidigt* Show abzuziehen.
Wurm - Struppi macht euch alle fertig ;-)
<img src="http://home.arcor.de/struebig/js/test/wurm.gif" border="0" alt="">
Hallo Schnaps,
Und ein hash das ich über $neu_alignment{'name'}{$i} anspreche ist doch ein hash und kein
Array wie du schreibst????????
Das ist ja das Problem. Wenn ich dich mal zitieren darf:
for(my $j=$length; $j>0; $j--) {
if($neu_alignment{'quali'}{$j-1} < $neu_alignment{'quali'}{$j} ) {
Du greifst mit numerischen Indizes auf %{$neu_alignment{'quali'}} zu. Da deine Indizes
numerisch sind, ist es unfug, einen Hash zu benutzen, da ist ein Array viel sinnvoller
und schneller.
Grüße,
CK
Hallo,
Ich kann Dir nur dringend raten, dich erst einmal mit
http://www.perldoc.com/perl5.8.0/pod/perllol.html bzw.
http://www.perldoc.com/perl5.8.0/pod/perldsc.html und auch http://www.perldoc.com/perl5.8.0/pod/func/sort.html
auseinanderzusetzen. Da findest Du nämlich wirklich alles, was Du brauchst um Dein Problem zu lösen.
Natürlich würde ich auch, genauso wie Struppi oder auch Christian, ein Hash Of Array verwenden, aber auch ohne könntest Du nach obiger Lektüre ein brauchbares Ergebnis bekommen.
Was ich mich noch Frage ist, ob $neu_alignment{'quali'} wirklich Bestandteil dieses Hashes sein muß. Imho wäre es besser, es in einer eigenen Variable zu verwalten, da ja, so wie ich es sehe, vollkommen andere Daten als in den anderne Elementen des Hashes stehen.
Grüße
Klaus