- 为什么map基于键查询的时间复杂度为O(log n)
- 红黑树是一种自平衡的二叉搜索树。在二叉搜索树中,对于任意一个节点,其左子树中所有节点的键值都小于该节点的键值,右子树中所有节点的键值都大于该节点的键值。
- 红黑树的自平衡性质保证了树的高度是O(log n)。在进行基于键的查询时,从根节点开始,每次比较键值,然后根据比较结果向左子树或右子树移动。
- 由于树的高度为O(log n),在最坏情况下,查询操作需要遍历从根节点到叶节点的路径,所以基于键查询的时间复杂度为O(log n)。
- 代码示例
#include <iostream>
#include <map>
int main() {
std::map<int, std::string> myMap;
myMap[1] = "apple";
myMap[2] = "banana";
myMap[3] = "cherry";
// 基于键查询
auto it = myMap.find(2);
if (it != myMap.end()) {
std::cout << "找到键2,对应的值为:" << it->second << std::endl;
} else {
std::cout << "未找到键2" << std::endl;
}
return 0;
}