Wert eines chars



  • @manni66 sagte in Wert eines chars:

    @It0101 sagte in Wert eines chars:

    Die Quersumme ist jetzt an sich nicht total verrückt.

    Ernsthaft? Die naheligende Lösung, die jeder erwartet (und bei C-Strings auf die Schnauze fällt), verwirft man und denkt sich eine aus Absurdistan aus? Bevor man anfängt "querzudenken" sollte man lernen, geradeaus zu denken. Das gilt nicht nur für Veganköche,

    Du hast mit deiner Art zu antworten leider oft die Tendenz, den Fragesteller lediglich mit der Nase darauf zu stossen, was für ein Idiot er ist und es damit bewenden zu lassen (möglicherweise unbeabsichtigt, aber so kommt das für mich rüber).

    Auch wenn du damit meistens recht hast und es immer wieder unbelehrbare Fragesteller gibt, bei denen sowas angebracht ist, halte ich das didaktisch für wenig hilfreich. So eine konfrontative Art ruft psychologisch wahrscheinlich erst einmal Widerstand hervor und senkt die Bereitschaft, sich selbst zu erarbeiten, warum etwas eine schlechte Idee ist. Leute mit weniger gefestigtem Sebstbewusstsein könnten sich sogar irgendwann gar nicht mehr trauen, eigene Ideen zu entwickeln, wenn sie öfter allzu schroff öffentlich zurechtgewiesen werden.

    Ja, die Quersumme kein "geradliniger" Ansatz wie die lexikografische Ordnung, wie man sie in Wörter- oder Telefonbüchern findet (falls man sowas heutzutage noch kennt 😉 ). Allerdings ist die Ordnung auch keine intrinsische und eindeutige Eigenschaft einer Menge. Man kann sehr wohl verschiedene Ordnungsrelationen definieren, die im jeweiligen Kontext mal mehr und mal weniger Sinn machen.

    Die Quersumme hat hier allerdings ein grundlegendes Problem, durch dass sie als Kandidat direkt ausscheidet: Sie ist keine Ordnung im mathematischen Sinn, da sie die Antisymmetrie-Eigenschaft xyyxx=yx \leq y \land y \leq x \Rightarrow x = y verletzt. abc und cba, oder wie im Beispiel von @JTR666 ad und bc hätten die selbe Quersumme (linke Seite der Antisymmetrie-Implikation erfüllt), wären aber dennoch nicht die selben Elemente (Gleichheit nicht erfüllt). Verscheidene Elemente mit gleicher Quersumme lassen sich nicht in eine eindeutige Reihenfolge bringen, dadurch ist der Ansatz unbrauchbar um Strings zu sortieren.

    Wenn wir schon bei "nicht-geradlinigen" Ansätzen sind: Man könnte die Strings auch als lange Integer in einem 256-adischen Zahlensystem mit den chars als "Ziffern" interpretieren. Das gäbe uns eine eindeutige Ordnung und wäre vielleicht sogar für Computer in einigen Fälle ein wenig simpler zu handhaben, da man bei unterschiedlicher Stringlänge direkt anhand dieser sagen kann, welcher String "kleiner" ist, ohne das gemeinsame Präfix beider Strings durchlaufen zu müssen. Das führt allerdings zu Sortierungen, die für uns Menschen etwas sperrig zu lesen sind: a, b, c, aa, zz, aaa, Aachen. Um den Eintrag "Aachen" zu finden müssen wir bis zum Ende der Liste suchen. Man stelle sich vor ein physisches Wörterbuch wäre so sortiert 😉

    TL;DR: Lexikografische Sortierung macht schon am meisten Sinn.


  • Mod

    @Finnegan sagte in Wert eines chars:

    Die Quersumme hat hier allerdings ein grundlegendes Problem, durch dass sie als Kandidat direkt ausscheidet: Sie ist keine Ordnung im mathematischen Sinn, da sie die Antisymmetrie-Eigenschaft xyyxx=yx \leq y \land y \leq x \Rightarrow x = y verletzt. abc und cba, oder wie im Beispiel von @JTR666 ad und bc hätten die selbe Quersumme (linke Seite der Antisymmetrie-Implikation erfüllt), wären aber dennoch nicht die selben Elemente (Gleichheit nicht erfüllt). Verscheidene Elemente mit gleicher Quersumme lassen sich nicht in eine eindeutige Reihenfolge bringen, dadurch ist der Ansatz unbrauchbar um Strings zu sortieren.

    Gewisse Klugscheißer würden in dem Fall sagen, dass das kein Widerspruch ist, sondern du stattdessen dadurch definiert hast, dass 'abc' und 'cba' gleich sind 🙂



  • @SeppJ sagte in Wert eines chars:

    Gewisse Klugscheißer würden in dem Fall sagen, dass das kein Widerspruch ist, sondern du stattdessen dadurch definiert hast, dass 'abc' und 'cba' gleich sind.

    Ja, das kann man so betrachten und es gibt sicher auch eine Kontext, in dem das Sinn macht. Ich meinte aber eine via Quersummen definierte Ordnung über der Menge der Strings und nicht über die Menge der Quersummen - bei letzterer wären natürlich 'abc' und 'cba' Repräsentanten für dasselbe Element. Innerhalb der Strings können wir uns aber sicher darauf einigen, dass es verschiedene Elemente sind (?) 🙂

    Auch schön um die Ecke gedacht, verdirbt einem aber u.a. leider den Spass an schönen Dingen wie std::sort, std::map oder std::binary_search ... einziger Vorteil ist wohl, dass es beim Debuggen nicht langweilig wird, besonders wenn es häufig so aussieht, als würde es funktionieren 😉


  • Mod

    @Finnegan sagte in Wert eines chars:

    Auch schön um die Ecke gedacht, verdirbt einem aber u.a. leider den Spass an schönen Dingen wie std::sort, std::map oder std::binary_search ... einziger Vorteil ist wohl, dass es beim Debuggen nicht langweilig wird, besonders wenn es häufig so aussieht, als würde es funktionieren 😉

    Mit denen würde es ja tatsächlich funktionieren. Das ist es übrigens, was mich überhaupt zu der Bemerkung brachte. Denn sort, map, binary_search & Co. interessiert es nur, dass die Ordnungsfunktion transitiv ist (d.h. a<b und b<c impliziert a<c), was bei der Quersumme gegeben ist. Und bei ihnen gelten dann zwei Elemente a und b als "gleich" (oder vielleicht sollte man lieber "äquivalent" sagen), genau dann wenn !(a < b) && !(b < a).

    PS: Lustig wird's wenn man sort, map, & Co. eine nicht-transitive Ordnungsrelation vorsetzt. Da hat man wirklich Spaß beim Debuggen und glaubt bald an Gremlins 🙂



  • @Finnegan sagte in Wert eines chars:

    Ja, das kann man so betrachten und es gibt sicher auch eine Kontext, in dem das Sinn macht. Ich meinte aber eine via Quersummen definierte Ordnung über der Menge der Strings und nicht über die Menge der Quersummen - bei letzterer wären natürlich 'abc' und 'cba' Repräsentanten für dasselbe Element. Innerhalb der Strings können wir uns aber sicher darauf einigen, dass es verschiedene Elemente sind (?) 🙂

    Die 2||\;||_2 Norm auf den komplexen Zahlen bildet reiϕr e^{i\phi} doch auch auf rr ab, da sind es sogar unendliche viele Zahlen, die auf eine Zahl abgebildet werden. Natürlich ergibt eine Quersumme als Ordnungsrelation kaum einen Sinn, wenn man den normalen täglichen Gebrauch von Worten als Grundlage nimmt.



  • Junge Junge, da hab ich ja mal echt n Thema losgetreten, haha! 😃

    Aber ist echt interessant was man hier so liest! 🙂



  • @SeppJ sagte in Wert eines chars:

    @Finnegan sagte in Wert eines chars:

    Auch schön um die Ecke gedacht, verdirbt einem aber u.a. leider den Spass an schönen Dingen wie std::sort, std::map oder std::binary_search ...

    Mit denen würde es ja tatsächlich funktionieren. Das ist es übrigens, was mich überhaupt zu der Bemerkung brachte. Denn sort, map, binary_search & Co. interessiert es nur, dass die Ordnungsfunktion transitiv ist (d.h. a<b und b<c impliziert a<c), was bei der Quersumme gegeben ist. Und bei ihnen gelten dann zwei Elemente a und b als "gleich" (oder vielleicht sollte man lieber "äquivalent" sagen), genau dann wenn !(a < b) && !(b < a).

    Funktionieren würde es schon für eine Definition von "funktionieren". Ebenso gibt es aber auch eine Definition, für die es eben nicht funktioniert. Oder übersehe ich hier etwas wesentliches? Eine Suche nach "John Jackson" könnte mir z.B. entweder "Jack Johnson" oder <not found> zurückgeben, obwohl sich der gesuchte Wert in der Datenstruktur befindet - oder auch den gesuchten Wert, aber nur wenn ich Glück habe. Das wäre ein Verhalten, dass in meinem Buch mindestens eine Definition von "nicht funktionieren" erfüllt 😉

    Ist es nicht ausschliesslich von der Reihenfolge der Elemente im für eine Definition "korrekt sortierem Array" [cab, abc, bac, acb, bca, cba] abhängig, ob und welches Element eine Binärsuche zutage fördert?

    PS: Lustig wird's wenn man sort, map, & Co. eine nicht-transitive Ordnungsrelation vorsetzt. Da hat man wirklich Spaß beim Debuggen und glaubt bald an Gremlins 🙂

    Ich empfehe dazu auf jeden Fall noch irgendwas mit Threads, um ein wenig Determinismus aus den auftretenden Fehlern herauszunehmen 😉

    @john-0 sagte in Wert eines chars:

    @Finnegan sagte in Wert eines chars:

    Die 2||\;||_2 Norm auf den komplexen Zahlen bildet reiϕr e^{i\phi} doch auch auf rr ab, da sind es sogar unendliche viele Zahlen, die auf eine Zahl abgebildet werden.

    Dennoch sind die Zahlen, die auf diesem Kreis mit Radius rr liegen nicht "gleich". Oder gilt etwa 1=11 = -1? ... abgesehen natürlich von irgendwelchen "Trickbeweisen", bei denen man meist irgendwo durch 00 dividiert, ohne es zu merken ;). Ein std::set.contains(1) würde mich eventuell anlügen (Ja, auch wenn ich vorher noch mit == überprüfe, weil ich nämlich im falschen Unterbaum gelandet bin, wo ich die sehr wohl existierende 1 nicht mehr finde).

    Dein Beispiel bringt mich allerdings auf etwas anderes, wo eine ähnliche Ordnung auf "äquivalenten" Elementen, tatsächlich Sinn machen könnte: Für eine Menge von mathematischen Ausdrücken, bei denen z.B. 1=33=eiπ=ei2π=0.91 = { 3 \over 3 } = -e^{i\pi} = e^{i2\pi} = 0.\overline 9 gilt, auch wenn es sich um verscheidene Ausdrücke handelt.

    Oder vielleicht noch etwas praktischer: Ein UTF-8-Stringvergleich, bei dem z.B.

    a (U+0061 Kleiner lateinischer Buchstabe A) + ̈ (U+0308 Verbindungszeichen Diärese) = ä (U+00E4 Kleiner lateinischer Buchstabe A mit Diärese)

    und eine entsprechende lexikografische Ordnungsrelation gilt.

    @JTR666 sagte in Wert eines chars:

    Junge Junge, da hab ich ja mal echt n Thema losgetreten, haha! 😃

    Das ist der irreversible Schaden, den man nimmt, wenn man so einen Scheiss irgendwann mal studiert hat. Da werden Dinge, die vorher mal simpel waren, auf einmal sehr kompliziert, wenn man anfängt, zuviel darüber nachzudenken. Für die Praxis tuts aber meist erstmal die simple Variante, sonst kommt man nämlich zu nix 😉


  • Mod

    @Finnegan sagte in Wert eines chars:

    @SeppJ sagte in Wert eines chars:

    @Finnegan sagte in Wert eines chars:

    Auch schön um die Ecke gedacht, verdirbt einem aber u.a. leider den Spass an schönen Dingen wie std::sort, std::map oder std::binary_search ...

    Mit denen würde es ja tatsächlich funktionieren. Das ist es übrigens, was mich überhaupt zu der Bemerkung brachte. Denn sort, map, binary_search & Co. interessiert es nur, dass die Ordnungsfunktion transitiv ist (d.h. a<b und b<c impliziert a<c), was bei der Quersumme gegeben ist. Und bei ihnen gelten dann zwei Elemente a und b als "gleich" (oder vielleicht sollte man lieber "äquivalent" sagen), genau dann wenn !(a < b) && !(b < a).

    Funktionieren würde es schon für eine Definition von "funktionieren". Ebenso gibt es aber auch eine Definition, für die es eben nicht funktioniert. Oder übersehe ich hier etwas wesentliches? Eine Suche nach "John Jackson" könnte mir z.B. entweder "Jack Johnson" oder <not found> zurückgeben, obwohl sich der gesuchte Wert in der Datenstruktur befindet - oder auch den gesuchten Wert, aber nur wenn ich Glück habe. Das wäre ein Verhalten, dass in meinem Buch mindestens eine Definition von "nicht funktionieren" erfüllt 😉

    Ich denke eher "übersehen". Da ist gar kein Glück dabei. Die Strukturen funktionieren absolut wohldefiniert, solange die Anforderung an den Vergleichsoperator erfüllt ist. Und sie funktionieren nicht, wenn nicht. Hier ist die Anforderung aber erfüllt. Eine Suche nach "John Jackson" würde dann auch "Jack Johnson" zurück liefern, denn die beiden sind unter dieser Ordnung gleich. Ich erinnere an meine erste Bemerkung:

    @SeppJ sagte in Wert eines chars:

    Gewisse Klugscheißer würden in dem Fall sagen, dass das kein Widerspruch ist, sondern du stattdessen dadurch definiert hast, dass 'abc''Jack Johnson' und 'cba''John Jackson' gleich sind 🙂



  • @Finnegan sagte in Wert eines chars:

    Dennoch sind die Zahlen, die auf diesem Kreis mit Radius rr liegen nicht "gleich". Oder gilt etwa 1=11 = -1?

    Die Strings "abc" und "cba" doch auch nicht! D.h. es gibt sinnvolle Definitionen für Ordnungsrelationen, bei denen mehrere Werte auf einen Wert abgebildet werden.


  • Mod

    @Finnegan sagte in Wert eines chars:

    Das ist der irreversible Schaden, den man nimmt, wenn man so einen Scheiss irgendwann mal studiert hat. Da werden Dinge, die vorher mal simpel waren, auf einmal sehr kompliziert, wenn man anfängt, zuviel darüber nachzudenken. Für die Praxis tuts aber meist erstmal die simple Variante, sonst kommt man nämlich zu nix 😉

    Eigentlich ist alles viel einfacher. Man merkt bloß, dass die einfachen Zusammenhänge, die man aus der Grundschule kennt, auch auf furchtbar komplizierte Dinge anwendbar sind. Die Grundidee hier, dass Dinge genau dann gleich sind, wenn sie weder kleiner noch größer sind, kann jeder begabte Drittklässler nachvollziehen.


Log in to reply