今天,我正在解决分词问题,但无法计算所实施解决方案的时间复杂度。
这是问题:- https://practice.geeksforgeeks.org/problems/word-break-part-2/0/
我们必须从测试用例中提供的字典中包含的单词中查找并打印由给定字符串组成的每个句子。
示例:-string =“ snakesandladder”,字典= [“ snake”,“ snakes”,“ and”,“ sand”,“ ladder”]。
解决方案是[“蛇形梯子”,“蛇形沙梯”]。
我实现的功能:-
set<vector<string>> res; `//stores all the sentences`
vector<string> v; `//stores all the words in a sentence`
helper(s, st, 0); `//function call`
void helper(string& s, unordered_set<string>& st, int i){
`//string s is the string and unordered_set<string> st is the dictionary.`
if(i == s.size()){
res.insert(v);
return;
}
string temp = "";
for(int k = i ; k < s.size() ; k++){
temp += s[k];
if(st.find(temp) != st.end()){
v.push_back(temp);
helper(s, st, k+1);
v.pop_back(); `//Backtracking to find more solution`
}
}
}
我的计算表明时间复杂度应为O(n ^ n)。
答案 0 :(得分:0)
看看算法,最坏的情况是类似IIII试图在数组中找到组合:{I,I,I,I},这意味着您从I开始,然后得到要检查的三个I因此,第一个需要7,第二个需要7,所有这些都需要7,因此考虑问题,在最坏的情况下为(2n-1)* n,因此在这种情况下,n为4如果想要大的O表示法,我们需要进行28次计算,否则O(n ^ 2)就不知道如何得到N ^ N...。这真是个庞大的数字,这真是令人惊讶.... < / p>