我在一组有序的字符串中添加了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)
步骤(