Tôi muốn giảm độ phức tạp của thuật toán sau. Về cơ bản, nó có một từ như là một đầu vào và tính toán số lượng các chữ cái duy nhất bên trong nó ("entropy" của từ). Giải pháp hiện tại của tôi sử dụng 3 nhúng cho vòng, mà đi ra đến một phức tạp của o (n^3). Vì mã này là một phần của dự án lớn hơn (chúng tôi đã xây dựng bộ giải cho trò chơi được gọi là boggle), tôi đã hy vọng giảm độ phức tạp của thuật toán để giảm thời gian thực thi của nó. Cảm ơn trước!Giảm độ phức tạp của mã 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;
}
Giữ đơn giản? Lặp lại từ đó, ghi lại những chữ cái bạn đã thấy trong một bitet. Cuối cùng, tổng hợp các bitet. Độ phức tạp thời gian O (n + m) trong đó n là độ dài của từ và m là kích thước của bảng chữ cái (ví dụ 26). –