b-tree - 为什么要搜索的单个节点的时间复杂度是 O(1) 而不是 O(logn)?
问题描述
在存储n个元素的四阶B树中搜索时,为什么要搜索的单个节点的时间复杂度是O(1)而不是O(logn)?查找单个节点的时间复杂度不应该是 O(logn) 吗?请帮助我。
解决方案
B-tree 定义引入了一个因子m
来表示单个节点可以拥有的最大子节点数,单个节点可以存储的最大键数为m - 1
。此外m < N
,其中N
是 B 树中的节点数。
单个节点的精确搜索时间为:
O(log(m))
,如果单个节点内的所有键都已排序(因此您可以对其执行二进制搜索)。O(m)
,如果它们没有在单个节点中排序。(所以执行线性搜索)
但是,m
它不依赖于N
,并且m
应该被视为常数,因为一旦m
确定,它就不太可能随着输入大小的增长而动态变化。(不像N
,N
会根据输入大小增长到一定的体积) 常量 likem
可以在Big-O notation中删除,因此上面提到的搜索时间(O(m)
和O(log(m))
)都可以被认为是O(1)
旁注:这也提供了关于搜索时间分析的清晰解释。
推荐阅读
- javascript - TypeError: $(...).substring 不是函数
- angularjs - 如何使用angularJs选择所有输入元素
- cmake - 与 cmake 链接错误 - fPIC
- spring-boot - 带有弹簧靴的keycloak openid单次注销
- c++ - 检查一个字符串是否有多个逗号彼此相邻c ++
- python - 使用给定的字符串在python中对数据框进行排序或分组
- c# - 根据早期线程的成功结果逐渐增加工作线程的数量
- laravel - 我在 Vuejs 中的组件没有在我的 Blade View 中呈现
- c# - ASP .NET Core 授权处理程序:获取单个失败要求
- javascript - 在先前选择的更改上添加具有独特名称的新选择