다음 알고리즘의 복잡성을 줄이려 고합니다. 기본적으로 단어는 입력으로 사용되며 그 안에있는 고유 한 문자의 수 (단어의 "엔트로피")를 계산합니다. 현재의 솔루션은 3 개의 임베디드 for 루프를 사용하며, 이것은 o (n^3)의 복잡성을 낳습니다. 이 코드는 더 큰 프로젝트 (우리는 boggle로 알려진 게임을위한 솔버를 만들었습니다)의 일부이기 때문에 알고리즘의 복잡성을 줄여 실행 시간을 줄이기를 희망했습니다. 미리 감사드립니다! N (o (n^3) C++ 코드의 복잡성 감소
#include <unordered_set>
int wordEntropy(const std::string &word) {
std::unordered_set<char> uniquechars(word.begin(), word.end());
return uniquechars.size();
}
이것은 O의 복잡성을 산출 :
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)입니다. –