在一组有序的字符串c++中查找字符串的复杂性是多少



我在一组有序的字符串中添加了n个字符串,

set<string>

现在我使用find方法来查找一个字符串,这个操作的时间复杂度应该是多少。对于整数集,它是logn,所以它会是为此搜索的字符串的大小*logn吗?如果可能的话,也请解释一下。

std::set<T>::find执行O(log(n((比较,而与T的类型无关。

您可能会感到困惑,因为比较两个整数具有恒定的时间(即O(1((复杂度,但比较字符串是线性的(即0(N((。但这与该集合执行的比较次数无关。所以,一组字符串上的find执行字符串长度*log(N(运算是正确的。

根据std::set手册页:

Complexity:
Logarithmic in the size of the container.

那就是O(log(N))。(这背后的原因是std::set通常由二叉树类型的数据结构实现,具有N节点的二叉树的根到叶遍历需要O(N)步骤(

最新更新