具有大串列的更快搜索協議?您好,感謝您閱讀我的帖子。我正在制作一些簡單的自動完成軟體,將輸入的單詞與英語詞典中與該單詞的字母序列相匹配的每個單詞進行比較。該詞典包含 400,000 個元素,因此您可以預期它會為簡單搜索花費很長時間。
for (int j = 0; j < list.size(); j )
{
if (list[j].length() >= input[input.size()-1].length() && input[input.size() - 1] == list[j].substr(0, input[input.size() - 1].length()))
{
suggestions.push_back(list[j]);
}
}
上面的代碼可能是運行時優化效率最低的,但我嘗試了其他一些方法,例如為所有 27 個字母創建一個位移變數,然后將其添加到 i。并將最大值減少到下一個字母開始(如果第一個字母的索引,比如 r,是 400,并且以 s 開頭的第一個字母的索引是 800,那么我將設定范圍在 400 和 800 之間而不是 0 - 1,500 但它仍然很慢)。任何幫助,將不勝感激
uj5u.com熱心網友回復:
整理你的字典。然后你可以二分搜索這個詞,因為你只匹配前綴(即你不是試圖通過輸入“ell”來找到“hello”)。
這也是非常低效的:
input[input.size() - 1] == list[j].substr(0, input[input.size() - 1].length())
那個看起來很無辜的人std::string::substr()每次都分配記憶體!您可以std::string::compare()在不分配記憶體的情況下進行相同的比較,這將使這部分速度提高約 10 倍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361257.html
