有没有办法减少O(n ^ 2)的时间复杂度?

时间:2013-11-17 12:57:06

标签: performance algorithm sorting

我制作了一个程序(hw),它计算所有单词的频率。 我的所有算法都需要O(n)或O(n log n),但是我的字计数器需要O(n ^ 2)

算法如下所示:

for (int i = 0; i < no of elements; i++)
            for (int j = 0; j < no of elements; j++)
                if (the ith word == the jth word)
                {
                    increase that word counter by 1;
                    break;
                }

我使用这种方式的原因是因为单词列表未排序。所以我的问题是,使用插入排序或排序可以按字母顺序对单词列表进行排序是一个好主意吗?对于字符串数组,这种排序怎么样? 单词列表是一个字符串数组,例如:

string words[no of elements]

感谢您的时间。

3 个答案:

答案 0 :(得分:2)

为你的单词创建哈希表,然后你的单词计数将是O(n),因为查找表将是O(1)。

答案 1 :(得分:1)

是的,您可以使用任何良好的排序算法(如quicksort)在O(nlogn)时间内对元素进行排序。然后检查重复迭代顺序元素的重复。

编辑:在大多数语言(如C ++)中,可以使用常规比较运算符比较字符串。因此像任何数组一样排序。此外,通常还有内置功能。<​​/ p>

答案 2 :(得分:1)

如果您可以创建其他数据结构,那么您也可以使用map

只需在map<string, int>字词中进行计数,并在迭代元素时对其进行更新。

(时间复杂度中的O(nlogn))