Hash berechnen



  • Hallo habe n kleines Problem(was auch sonst)

    Ich versuche grad mit C++ den Hash eines Satzes zu ermitteln...bloß wie...

    Also folgendes:

    Ich habe das wort Hallo, der Buchstabe hat ja einen Wert inner ASCII tabelle...und wie kann ich jetzt mit hilfe dieser Werte einen unverwechselbaren Hash erstellen...habe schon vieles ausprobiert, bloß dann kamen Werte bei raus die auch
    z.B. bei Halol rauskommen...das ist doof...

    H    a    l    l    o
    
      72   94   108  108  111
    

    Das sind zb die Werte...

    Wikipedia hilft mir da auch nicht wirklich weiter...

    wäre nett wenn ihr mir helfen könntet



  • also wenn du unverwechselbar im mathematischen sinne meinst, nimm einfach den ausgangstext selbst, brauchst ja eh ne bijektion. ansonsten kannst du md5 verwenden.



  • einfach nur die summe

    unsigned int s=0;
    foreach ch in string
     s+=ch
    

    geht nicht, weil dann h(hallo)==h(halol). hingegen ist schonmal

    unsigned int s=0;
    unsigned gewicht=1;
    foreach ch in string
     s+=ch*gewicht
     ++gewicht
    

    gegen vertauscher dicht.

    sehr beliebt ist diese:
    foreach ch in string
    s=31s+ch
    siehe zum beispiel auf http://www.cogs.susx.ac.uk/courses/dats/notes/html/node114.html
    der compiler macht as 31
    s automagisch (s>>5)-s, weshalb die sache sogar lecker schnell ist.



  • hashes sind nicht eindeutig. wenn du eindeutigkeit willst, dann musst du dir eine bijektive abbildung ausdenken.



  • Hi,

    danke für die vielen Antworten...naja habe es wohl gelöst...ist zwar eine individuelle form der Hash ermittlung, aber es ist jetzt egal ob ich Zeichen vertausche, der Wert ist zum Schluss anders...das ist das was ich wollte...der Hashwert soll auch garnicht zurück verwandelt werden(wegen bijektive Abbildung)

    naja die ganze mühe hat eh nichts gebracht...da ich mit char arbeite und wenn ich char als eingabe nutze müsste ich es als MAX_PATH deklarieren, aber wenn ich das tue weiß ich nicht wie ich die genaue Zeichenanzahl auslesen soll...

    danke aber für die Hilfe^^

    EDIT: Habe es jetzt so hinbekommen wie hier:
    http://www.cogs.susx.ac.uk/courses/dats/notes/html/node114.html

    das hat gut geholfen danke



  • thordk schrieb:

    hashes sind nicht eindeutig. wenn du eindeutigkeit willst, dann musst du dir eine bijektive abbildung ausdenken.

    injektiv reicht



  • jo, aber da ich surjektiv und injektiv immer durcheinanderbring, hab ich mich für das entschieden, was auf jeden fall richtig ist 😉



  • wie bringst du das durcheinander? sur heisst auf franzoesich auf.



  • wie ich die durcheinanderbring? na ganz einfach, ich kann mir nicht merken, welches der beiden viecher für urpsrungs- und bildmenge zuständig ist.

    ach, heisst es das auf französisch? die sprache beherrsch ich nich 😉


Anmelden zum Antworten