Hallo ersteinmal,
nach stundenlanger Recherche im Internet und dem Verwerfen einiger eigener Ideen würde ich Euch gerne um Rat fragen.
Für die Vorlesung "Algorithmen und Datenstrukturen" sollen wir ein kleines Wörterbuch schreiben, welches über eine Hashtable realisiert werden soll.
Für das Hashen sollen wir die Divisionsrestmethode nutzen ( k % m ). So weit so gut. In der Aufgabe wird verlangt, dass wir dafür den String (das entsprechende Wort aus dem Wörterbuch) möglichst geschickt (und hier liegt mein Problem ) in einen Integer umwandeln sollen, den wir dann hashen können.
Meine erste Idee war durch einfaches shiften die ASCII-Werte in einen Integer zu verwandeln, das geht ja aber leider nur bis fünf Zeichen gut..
Als negativ-Beispiel ist die einfache Addition der ASCII-Werte genannt.
Mein bisheriger Ansatz ist:
int LinHTable::hash(string hashString)
{
const int MAX_TABLESIZE = 29;
int hashNumber=0;
int intChar;
for(int i=0; i!=hashString.size(); i++)
{
hashNumber = ((hashNumber << 8) + hashString[i])%MAX_TABLESIZE ;
}
return hashNumber;
}
Alles anzeigen
Nur leider kann ich auch nicht viel dazu sagen, warum ich das so mache... wir sollen unseren algorithmus aber leider begründen
deswegen kann ich auch nicht einfach irgendwelche kryptischen Hashverfahren nehmen, die ich im Internet finde djb etc.
Habt ihr vielleichtg einen guten Ansatz für mich?
Vielen Dank im Voraus!
Christian