c++ - 为什么在树中插入顺序元素比在树中插入随机元素需要更多时间?

标签 c++ tree time-complexity

这不是作业我正在上数据结构课,我们最近完成了树。下课时,我的教授展示了这张图片。 Tree Times

ConcreteBTree 是一种不自平衡的二叉树。我对完成这些程序所花费的时间有一些疑问。

  1. 为什么将 100,000 个顺序元素插入 ConcreteBTree 所花费的时间比将随机元素插入其中所花费的时间多得多?我的直觉是,由于元素是连续的,因此插入 1,000,000 个随机元素所需的时间应该更少。

  2. 为什么随机元素的ConcreteBTree的insert()和find()的时间相差这么近?是因为两者具有相同的时间复杂度吗?我以为 insert 是 O(1) 而 find 是 O(n)

我真的很想了解这里发生了什么,任何解释将不胜感激。谢谢

最佳答案

将顺序项(1,2,3,4...)插入二叉树将导致它始终将节点添加到同一侧(例如左侧)。 当您插入随机项目时,您将在左右随机添加节点。

顺序添加将导致列表表现为普通链表(对于顺序项),因为新项将必须访问每个先前添加的项,这将花费 O(n) 步,而随机添加将花费 O ( log N) 平均步数。

关于c++ - 为什么在树中插入顺序元素比在树中插入随机元素需要更多时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17038901/

相关文章:

C++ Win32 : Calling WM_PAINT from another thread using SendMessage, 绘图无效

c++ - OpenCV 2.4.13 错误 : ‘Moments’ in namespace ‘cv’ does not name a type

algorithm - 确定有向图或无向图是否为树

algorithm - 哈夫曼码的全二叉树有什么优势?

go - 如何将 interface{} 转换为 Golang 中的嵌套树

string - 为什么这个算法的时间复杂度是指数级的?

python - numpy 的 irr 函数的复杂度是多少?

c++ - boost::function 变量在析构函数中为空

C++如何将非常数列表传递给需要常量列表的函数

java - 通过数组的所有可能序列进行迭代的时间复杂度是多少