Chciałbym zmniejszyć złożoność następującego algorytmu. Zasadniczo przyjmuje słowo jako dane wejściowe i oblicza liczbę unikalnych liter w nim ("entropia" słowa). Moje obecne rozwiązanie wykorzystuje 3 osadzone dla pętli, które wychodzi na złożoność o (n^3). Ponieważ ten kod jest częścią większego projektu (stworzyliśmy rozwiązanie dla gry znanej jako boggle), miałem nadzieję zmniejszyć złożoność mojego algorytmu w celu skrócenia czasu jego wykonywania. Z góry dziękuję!Redukcja złożoności kodu 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;
}
Czy to proste? Zapętlaj słowo, rejestrując litery, które widziałeś w bitsecie. Na koniec podsumuj bitset. Złożoność czasowa O (n + m) gdzie n jest długością słowa, a m wielkością alfabetu (tj. 26). –