数据结构算法

时间:2015-06-17 07:04:50

标签: algorithm data-structures time-complexity

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

1 个答案:

答案 0 :(得分:3)

在这个答案中,我将为每个数据结构提供一个启动器,让你自己完成剩下的工作。

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

    • log(n!)
    • O(nlogn)位于{{1}}