【发布时间】:2013-07-25 21:32:19
【问题描述】:
我有一个排序的字符串向量,我试图找到向量中每个元素的共现:
V = {"AAA","AAA","AAA","BCA",...}
int main()
{
vector<string> vec;
//for every word in the vector
for(size_t i = 0; i < vec.size();i++)
{
int counter = 0;
//loop through the vector and count the coocurrence of this word
for(size_t j = 0; j < vec.size();j++)
{
if(vec[i] == vec[j]) counter +=1;
}
cout << vec[i] << " "<<counter <<ed,l
}
}
复杂度是 O(n^2) 对吧?太费时间了,怎么解决呢?
谢谢,
这就是编辑:
int main()
{
vector<string> vec;
//for every word in the vector
for(size_t i = 0; i < vec.size();i++)
{
int counter = 0;
//loop through the vector and count the coocurrence of this word
for(size_t j = i+1; j < vec.size()-1;j++)
{
if(vec[i] == vec[j]) counter +=1;
}
cout << vec[i] << " "<<counter <<ed,l
}
}
【问题讨论】:
-
已经排序了吗?
-
@hivert 是的,向量已经排序了
-
即使它没有排序,将它的运行时间减半也是微不足道的。
for(size_t j=i+1; ...) -
@MooingDuck:但是还是 O(n*n)
-
是的,它将是 O(n^2)
标签: c++ string algorithm sorting vector