我需要優化一個搜索引擎。 什麼是找到所有可能的2到n個字母的單詞,通過使這樣的所有可能的組合Android搜尋所有可能的單詞。更快的方式?
(對於2個字母的單詞)w =任何字母可以在一個字母的位置上+任何字母離開但第一點)爲第二點; checkIfIsWord(w)
(對於n個字母詞)n1 + n2 + n3 + n4 + ... n; checkIfIsWord(w)
這是工作,但相當耗時。 請幫我理解如何讓它更快!
下面是代碼:
String w = "";
for (int i = 0; i < letters.length; i++)
{
for (int j = 0; j < letters.length; j++)
{
if (i == j) continue;
w = "" + (char) letters[i] + (char) letters[j];
checkIfIsWord(w);
for (int k = 0; k < letters.length; k++)
{
if (i == k || j == k) continue;
w = "" + (char) letters[i] + (char) letters[j] + (char) letters[k];
checkIfIsWord(w);
for (int m = 0; m < letters.length; m++)
{
if (i == m || j == m || j == m || k == m) continue;
w = "" + (char) letters[i] + (char) letters[j] + (char) letters[k] + (char) letters[m];
checkIfIsWord(w);
...
}
}
}
}
方法checkIfIsWord
void checkIfIsWord(String w)
{
if (w.length() > 2
&& words.contains(w.toLowerCase()) // (1)
&& !allWords.contains(w))
{
allWords.add(w);
runOnUiThread(updateMaxWords);
}
}
你的方法'checkIfIsWord'做什麼? – Thrakbad 2013-03-07 14:37:59
看來你確實需要做一個遞歸函數。 http://danzig.jct.ac.il/java_class/recursion.html。另外'if(i == j)continue;'表示不允許「aa」,「bb」,「cc」的組合? – Timmetje 2013-03-07 14:39:57
遞歸不會真的加速這個過程,它只會使代碼更易於維護和閱讀 – Thrakbad 2013-03-07 14:42:12