If Anweisung wird übersprungen
-
Nur so am Rande, wenn hier schon wieder wortreich mikrooptimiert wird: Da der Mose-Code zusammen mit der Pause zwischen den Buchstaben als Zeichen ein Präfixcode ist, wäre das eventuell mal wieder eine Gelegenheit einen Trie zu verwenden. Die werden ja sonst gerne etwas stiefmütterlich behandelt
Natürlich nur, wenn man sich den Aufwand geben will, diese Datenstruktur kommt leider nicht fertig aus dem Werkzeugkasten wie die
std::map
.
-
Ich sage voraus: Die optimalste Variante wird am Ende aber doch irgendwas langweiliges wie ein flaches Array sein. Weil mickrige ~40 Code in einer einfachen, kompakten Struktur mittels Brute-Force zu behandeln ist erfahrungsgemäß immer besser als jede noch so gut skalierende Datenstruktur.
-
@SeppJ sagte in If Anweisung wird übersprungen:
Ich sage voraus: Die optimalste Variante wird am Ende aber doch irgendwas langweiliges wie ein flaches Array sein.
So einen Trie kann man auch sehr kompakt in ein flaches Array quetschen. Der Unterschied ist nur, wie man letztendlich durch dieses Array hüpft, um ans Ziel zu kommen.
Das war ehrlich gesagt auch das, woran ich bei dem Vorschlag dachte. Schliesslich ist das Morse-Alphabet ja nicht sonderlich gross. Für einen "High Performance Morse Decoder" würde ich so einem kompakten Trie auf jeden Fall mal austesten um zu sehen wie er sich gegen die Alternativen schlägt.
-
@Bushmaster Es geht nicht um einen einzelnen Vorfall irgendwo sondern um deine allgemeine Tendenz einfach irgendwas als wahr anzunehmen was du dir gerade ausgedacht hast ohne es nachzuprüfen. Und auf Dinge zu antworten die du nicht bzw. nicht ausreichend verstanden hast.
Konkret zum Thema
map::operator []
: Die Standard Library bietetat
undoperator []
grundsätzlich nur dort an wo sie effizient implementierbar sind. D.h. besser alsO(N)
- was konkret dann meistensO(log N)
und manchmalO(1)
ist. Was z.B. auch der Grund ist warumstd::list
wederat
nochoperator []
hat, obwohl beide trivial zu implementieren wären.Das selbe gilt übrigens auch für einige andere Funktionen, z.B.
push_back
undpush_front
.
-
@hustbaer sagte in If Anweisung wird übersprungen:
Es geht nicht um einen einzelnen Vorfall irgendwo sondern um deine allgemeine Tendenz einfach irgendwas als wahr anzunehmen was du dir gerade ausgedacht hast ohne es nachzuprüfen.
ich behauptete nie eine expertenmeinung zu vertreten. ich bin nur ein einfacher user mit wissenslücken, wie die meisten hier.
@hustbaer sagte in If Anweisung wird übersprungen:
Und auf Dinge zu antworten die du nicht bzw. nicht ausreichend verstanden hast.
das sowas in einem öffentlichen diskussionsforum ein problem sein kann, hätte ich zuvor nicht für möglich gehalten.
-
@Ein-ehemaliger-Benutzer sagte in If Anweisung wird übersprungen:
@hustbaer sagte in If Anweisung wird übersprungen:
Und auf Dinge zu antworten die du nicht bzw. nicht ausreichend verstanden hast.
das sowas in einem öffentlichen diskussionsforum ein problem sein kann, hätte ich zuvor nicht für möglich gehalten.
Klappe halten wenn man keine Ahnung hat - insofern konsequent, dass dieser Ahnungslose hier nicht weiter mit sinnfreien Aussagen die Beiträge zumüllt.
-
@Ein-ehemaliger-Benutzer sagte in If Anweisung wird übersprungen:
@hustbaer sagte in If Anweisung wird übersprungen:
Und auf Dinge zu antworten die du nicht bzw. nicht ausreichend verstanden hast.
das sowas in einem öffentlichen diskussionsforum ein problem sein kann, hätte ich zuvor nicht für möglich gehalten.
Wenn man so wie du den Unfug als Aussage formuliert ohne diese weiter zu qualifizieren, dann ist das ein Problem, ja.
-
@hustbaer
Der o.g. Herr ist von Prekariatsforen - genannt SocialMedia - verwöhnt, wo im Gegensatz zu moderierten Fachforen jeder seinen Schwachsinn ablassen kann und Klicks/Likes von Leuten mit negativem IQ gleichrangig zu denen von aufgeklärten Leuten behandelt werden.
-
Aggressiv vorgetragene Arroganz ist trotzdem nicht angebracht.
-
Dieser Beitrag wurde gelöscht!
-
@titan99_ Datenstrukturen insbesondere red black trees und algorithmen und hpc.
-
@Wutz schon ironisch, dass die aufgeklärten Mitglieder dieses Forums @Tyrdal's Post 8 Punkte höher bewertet haben, als deinen. Was sagt Dir das?
-
Dieser Beitrag wurde gelöscht!
-
@titan99_ sagte in If Anweisung wird übersprungen:
@hustbaer sagte in If Anweisung wird übersprungen:
Und auf Dinge zu antworten die du nicht bzw. nicht ausreichend verstanden hast.
Verstehe nicht welche Dinge gemeint sind.
Macht nix, das Problem hat sich ja nun von selbst gelöst.
-
@titan99_
Best of Wutz:- Klappe halten
- Der o.g. Herr ist von Prekariatsforen
- Was soll der Schrott?
- Anfänger und alle Möchtegern-C-Profis sollen immer for benutzen und niemals while. So auch bei dir.
- Dorftrottel.
- Getroffene Hunde heulen.
- Niveau von Stümpern
Er hat schon eine ziemlich herablassende Ader. Und daher spricht mir der Beitrag von Tydral ein wenig aus der Seele.
-
@Columbo
Nanu? Ein Mod, der offtopic daherredet? Müssest du dich nicht selbst verwarnen? Von dir habe ich noch keinen einzigen qualifizierten C-Beitrag gelesen. Welchen von meinen > 4.000 C-Beiträgen meinst du?
-
@Wutz Du bist genauso fehlbar wie jedes andere Mitglied hier. Was soll z.B. das hier? Fuer einen informierten Beobachter der Diskussion gibst Du einen Eindruck von einem overten Narzissten mit der dafuer typischen Hysterie. Beiss dir mal auf die Lippe, anstatt dich gegenueber anderen Mitgliedern feindselig zu benehmen. Das ist entschieden nicht die Kultur dieser Community.
-
@Columbo
Du hast meine beiden Fragen nicht beantwortet.
-
Die Frage, welche Beiträge @Columbo z.B. meint, hat doch @Quiche-Lorraine schon für ihn beantwortet.
-
@Columbo sagte in If Anweisung wird übersprungen:
Du benutzt
std::map
im high-performance Sektor? Also einen red-black tree der jeden Knoten mitnew
alloziert?Lies Dir bitte den Thread noch einmal genau durch, da war die Rede von
.at()
auf beliebigen Containern. Denn Swordfish schrieb folgendes : „@Bushmaster Deswegen gibt es bei Containern generell at() UND operator[].“Zum Thema map und HPC, das Einfügen in eine map ist langsam beim Verwenden des Standardallokators. Solange man meistens nur liest, ist das aber nicht von Nachteil.
Und weshalb sprechen wir von Cache-hits, wo es hier um zwei Funktionen
operator[]
/at
geht, deren einziger Unterschied darin besteht, was eine branch, die im gegebenen Rahmen (Key soll bereits existieren) als "unlikely" kategorisiert wird, macht?Sobald man Datenstrukturen verwendet, die größer sind als der L1, L2, L3, L4 … Cache, muss man die Algorithmen darauf optimieren. D.h. auch beim
operator[]
wirkt sich das zum Teil dramatisch aus. Wie stark hängt immer davon ab, was für einen Container, mit welchen Allokator und mit welchem Algorithmus man nutzt. Wenn man nur einmal über den Arbeitsspeicher schreibt z.B. für eine Initialisierung, dann ist die Auswirkung gleich null. Wenn man aber öfters die gleichen Elemente nutzt, dann kann eine Optimierung auf Cache Lines und die Cache Größen Wunder wirken – auch bei so schnöden Dingen wie eine Sortierung. Im Grunde kann man die alten Kapitel aus TAOCP von Knuth mit dem externen Sortieren wieder hervor kramen. Zwar nutzt man keine Tapes mehr, aber die Wartezeit auf den Hauptspeicher ist mittlerweile sehr lang.