2016-04-01 11 views
0

In der Schule ging mein Lehrer über die Rechtschreibprüfung mit hoher Leistung, die einen numerischen Hashwert oder einen Schlüssel verwendet, der ein Wort darstellt. So werden anstelle von Wörtern die Schlüssel gespeichert. Dann wird das zu überprüfende Wort unter Verwendung desselben Algorithmus, der im Wörterbuch verwendet wurde, in seine eindeutige Nummer umgewandelt. Aber ich kann mich nicht erinnern, wie diese Methode heißt, und ich muss eine ähnliche Methode schreiben.Rechtschreibprüfung, eindeutige Nummer für das Wort

Wer weiß über diese Methode, um eine eindeutige Nummer für eine Reihe von Zeichen zu generieren?

+0

PS ist dies keine Hausaufgaben. Ich benutze das für ein Projekt bei der Arbeit. – netcat

+2

Dies wird als [Hash] (https://en.wikipedia.org/wiki/Hash_function) bezeichnet, was [Was ist eine gute Hash-Funktion für englische Wörter?] (Http://stackoverflow.com/q/7700400/) 2564301) kann Ihnen antworten. – usr2564301

+0

Jedes Wort, wenn Sie jedes Zeichen dieses Wortes in ein int konvertieren würden, würde Ihnen eine eindeutige Zahl für jedes Wort geben ... zum Beispiel - um 'a' in ein int zu konvertieren, sagen Sie einfach (int) a . – Krishna

Antwort

1

eigentlich Standard C++ Bibliothek hat eine hash template structure dafür:

#include <iostream> 
#include <functional> 

int main() { 
    std::string str = "Programmer"; 
    std::size_t str_hash = std::hash<std::string>{}(str); 
    std::cout << str_hash ; 
    return 0; 
} 

ausgeben würde 2561445211.

"std :: hash {} (str)", um den Hash-Wert berechnet;

+0

Danke Herr Mini-James Bond, 047;) – netcat

+0

Ich wusste nicht, dass die Standard-Bibliothek bereits eingebaut hat. Meine Idee ist es, ein Hash für jedes Wort im Wörterbuch zu machen, und dann hash das zu prüfende Wort, b/c wäre es schneller, das richtige Wort in einer sortierten Liste von Hash-Zahlen zu finden, als mit einer Zeichenkette in einer Liste übereinzustimmen. – netcat

+0

@MattFomich Gern geschehen. Standard lib hat es seit 2011 Version von C++ (genannt ... C++ 11). Ihr Rechtschreibprüfungsproblem ist ein gutes Beispiel für ein allgemeineres Schnittpunktproblem, bei dem Wörter in Ihrem Fall Elemente eines Satzes sind. Sehen Sie sich den Standard-Hash-Satz von lib an: [std :: unordered_set Wörterbuch] (http://en.cppreference.com/w/cpp/container/unordered_set). Es ist [count (string word)] (http://en.cppreference.com/w/cpp/container/unordered_set/count) Methode wird überprüft, ob Wort in der Menge in konstanter Zeit ist, während als "Liste der Hash-Zahlen" wird lineare Zeit nehmen. – 047

Verwandte Themen