algorithm - 优于 O(log(N)) 以 2 为底的情况

标签 algorithm language-agnostic time-complexity segment-tree

我正在解决线段树和四叉树相关的问题;虽然我注意到,在线段树中,我们将一维数组分成 2 (2^1) 段,并递归地执行此操作,直到基本情况到达。类似地,在四叉树中,我们在每一步中将 2D 网格分割为 4 (2^2) 段。所有这些分治机制都是为了实现对数时间复杂度。无意冒犯!

但是为什么我们不将数组分割为 4 (4^1) 部分或更多部分,而不是线段树中的 2 部分呢?为什么我们不将网格分成 16 (4^2) 部分而不是 4 部分?通过这样做,我们可以实现 O(log(N)) 性能,但它会是更好的 log 作为 log(N)(以 4 为底)优于 log(N)(以 2 为底)。

我知道在这种情况下,实现起来会有点困难。是否存在内存开销问题?或者什么?

如果我有什么错误的地方,请纠正我。谢谢!

最佳答案

它实际上不会运行得更快。假设我们将其分为 4 部分。然后我们必须在每个节点中合并 4 个值而不是 2 个值来回答查询。假设合并 4 个值需要 3 倍的时间(例如,要获得 2 个数字的最大值,我们需要 1 次调用 max 函数,但要获得 4 个值的最大值,则需要 3 次调用),我们有 log4(n) * 3 > log2(n) * 1。而且,实现起来会比较困难(要考虑更多的情况等等)。

关于algorithm - 优于 O(log(N)) 以 2 为底的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25120083/

相关文章:

javascript - Mergesort - 自下而上比自上而下更快吗?

algorithm - 如何找到对已知列表进行排序的最小交换集?

algorithm - 计算递归算法的时间复杂度

algorithm - 为什么使用 for 循环的 Fibonacci 的时间复杂度是 O(n^2) 而不是 O(n)?

c++ - 多个连接字符串的同步模式匹配算法

algorithm - 找到线段上等距点的最大数量

java - 生成正则表达式以匹配列表 A 中的字符串,但不匹配列表 B 中的字符串

language-agnostic - 新的设计模式/设计策略

算法复杂度 O(n*log(n))- 我们需要除以 2 吗?

xml - 设计一个数据结构来比较两个 XML 文档