以下のアルゴリズムの複雑さを軽減したいと思います。基本的には、入力として単語を取り、その中のユニークな文字の数(単語の「エントロピー」)を計算します。私の現在のソリューションでは、3つの埋め込みforループが使用されています。これはo(n^3)の複雑さを伴います。このコードは大規模なプロジェクトの一部であるため(私たちはboggleというゲームのソルバーを作った)、実行時間を短縮するためにアルゴリズムの複雑さを減らすことを望んでいました。前もって感謝します!o(n^3)C++コードの複雑さの軽減
int wordEntropy(string word)
{
int length = word.length();
int uniquewords = length;
string compare = word;
char save[17];
int cond=0;
for (int ii=0; ii < length; ii++)
{
for (int jj=ii+1; jj < length; jj++)
{
for (int kk=0; kk<= ii; kk++)
{
if (save[kk] == word[ii]) {cond++;}
}
if (word[ii] == word[jj])
{
if (cond>0) {break;}
uniquewords--;
}
}
save[ii] = word[ii];
cond = 0;
}
return uniquewords;
}
これは簡単ですか?単語の上をループして、ビットセットで見た文字を記録します。最後に、ビットセットを合計します。時間複雑度O(n + m)ここで、nは単語の長さ、mはアルファベットのサイズ(つまり26)です。 –