【问题标题】:Data Structure algorithm数据结构算法
【发布时间】:2015-09-02 06:27:56
【问题描述】:

如何按平均情况下插入所需时间复杂度的升序排列以下数据结构。 1. 排序数组 2.哈希表 3. 二叉搜索树 4. B+树

【问题讨论】:

  • 对你来说应该是很好的锻炼……自己动手吧……
  • 很抱歉我在面试中遇到了问题
  • 本网站不适用于家庭作业或面试问题。请查看tourhow to ask
  • 你应该考虑一下这些事情......你可以在谷歌中轻松找到你需要的一切......当然,正如我已经提到的那样,这对你来说将是一个很好的练习...... :- ) .. 自己做..

标签: algorithm data-structures time-complexity


【解决方案1】:

在这个答案中,我会给你一个关于每个数据结构的初学者,让你自己完成其余的。

  1. 排序数组:在大小为k 的排序数组中,每个问题 插入是你首先需要找到索引i 应该插入元素(简单),然后移动所有元素 i,i+1,...,k 向右,以便为新的“让位” 元素。这需要O(k) 时间,实际上是k/2 平均移动。
    因此,将元素插入排序数组的平均复杂度为1/2 + 2/2 + 3/3 + ... + n/2 = (1+...+n)/2
    使用sum of arithmetic progression 了解它的复杂性。
  2. 哈希表为插入元素提供O(1) 平均摊销案例性能。当您执行n 操作时会发生什么,每个O(1)?总的复杂度是多少?
  3. 在二叉搜索树 (BST) 中,每个操作都是O(h),其中h 是树的当前高度。幸运的是,当向二叉搜索树(甚至非自平衡)随机添加元素时its average height is still O(logn)
    因此,要获得添加所有元素的复杂度,您需要求和 Some_Const*(log(1) + log(2) + ...+ log(n))
    见文末提示
  4. 与 BST 类似,B+ 树每次插入也需要 O(h) 时间。不同之处在于,h 即使在最坏的情况下也必然是对数的。因此,在计算平均情况时,时间复杂度的计算将保持Some_Other_Const*(log(1) + log(2) + .. + log(n))

提示:

  • log(x) + log(y) = log(x*y)
  • log(n!)O(nlogn)

【讨论】: