की जटिलता को कम करना मैं निम्नलिखित एल्गोरिदम की जटिलता को कम करना चाहता हूं। असल में, यह एक इनपुट के रूप में एक शब्द लेता है और इसके भीतर अद्वितीय अक्षरों की संख्या (शब्द की "एन्ट्रॉपी") की गणना करता है। मेरा वर्तमान समाधान लूप के लिए 3 एम्बेडेड नियोजित करता है, जो ओ (एन^3) की जटिलता के लिए आता है। चूंकि यह कोड एक बड़ी परियोजना का हिस्सा है (हमने गेम के लिए एक सॉल्वर बनाया है जिसे बोगलॉग कहा जाता है), मैं अपने निष्पादन समय को कम करने के लिए अपने एल्गोरिदम की जटिलता को कम करने की उम्मीद कर रहा था। अग्रिम में धन्यवाद! (ओ (एन^3) सी ++ कोड
#include <unordered_set>
int wordEntropy(const std::string &word) {
std::unordered_set<char> uniquechars(word.begin(), word.end());
return uniquechars.size();
}
यह हे की एक जटिलता पैदावार n:
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;
}
इसे आसान रखें? शब्द पर लूप, रिकॉर्डिंग जो आपने बिट्स में देखा है। अंत में, बिटसेट को योग करें। समय जटिलता ओ (एन + एम) जहां एन शब्द की लंबाई है, और वर्णमाला का आकार (यानी 26)। –