2016-04-01 12 views
0

Okulda, öğretmenim sayısal bir karma veya bir kelimeyi temsil eden anahtar kullanan yüksek performanslı yazım denetimi gerçekleştirdi. Yani kelimeler yerine, anahtarlar saklanır. Daha sonra kontrol edilecek sözcük, sözlükte kullanılan aynı algoritma kullanılarak benzersiz numarasına dönüştürülür. Ama bu yöntemin ne olduğunu hatırlayamıyorum ve benzer bir yöntem yazmam gerekiyor.Yazım denetleyicisi, kelime için benzersiz bir numara

Bir grup karakter için benzersiz bir numara oluşturmak için bu yöntemi bilen var mı?

+0

ps, ​​bu ev ödevi değildir. Bunu işte bir proje için kullanıyorum. – netcat

+2

Buna [karma] (https://en.wikipedia.org/wiki/Hash_function) denir. Bu, [İngilizce kelimeler için iyi bir karma işlev nedir?] (Http://stackoverflow.com/q/7700400/) 2564301) size cevap verebilir. – usr2564301

+0

her sözcük, eğer o kelimenin her karakterini bir int'ye çevirecekseniz, her bir kelime için size benzersiz bir numara verir ... örneğin, 'a'yı bir int'ye dönüştürmek için basitçe (int) a . – Krishna

cevap

1

Aslında, standart C++ kütüphanesi bunun için bir hash template structure var 2561445211.

"Std :: karma {} (str)" karma değer hesaplar

#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; 
} 

çıktılayacaktır;

+0

Teşekkürler mister mini-james bağı, 047;) – netcat

+0

Standart kütüphanenin zaten bu yerleşik olduğunu bilmedim. Benim fikrim sözlükte her kelimenin bir karmaşasını yapmak ve daha sonra kontrol edilecek kelimeyi çıkarmak, b/c Bu, bir listedeki bir dizeyle eşleşmek yerine, hashed sayılarının sıralanmış bir listesinde doğru kelimeyi bulmak için daha hızlı olacaktır. – netcat

+0

@MattFomich Rica ederim. Standart lib C++ (2011 ... C++ 11) sürümünden beri var. Yazım denetimi probleminiz, daha genel bir kesişim probleminin iyi bir örneğidir. Standart lib'in karma kümesine bir göz atın: [std :: unordered_set sözlük] (http://en.cppreference.com/w/cpp/container/unordered_set). [Count (string word)] (http://en.cppreference.com/w/cpp/container/unordered_set/count) yöntemi, kelimenin sabit zaman içinde olup olmadığını kontrol edecek, "karma sayıların listesi" olarak doğrusal zaman alacaktır. – 047

İlgili konular