【问题标题】:binary search tree vs sorted doubly linked list二叉搜索树与排序的双向链表
【发布时间】:2013-07-17 08:25:33
【问题描述】:

我想知道,如果二进制搜索用于排序的链表插入、搜索,那么它们的性能有什么区别。以及在哪些情况下它们的表现会有所不同,或者可能出于何种目的,例如 list 将无法使用,反之亦然。

【问题讨论】:

    标签: algorithm sorting data-structures


    【解决方案1】:

    您不能对链表(单或双)进行二分搜索,因为如果不遍历链表的一半(从一端),就无法到达链表的中间。

    毫无疑问,多级跳过列表的一种形式可以做到这一点,但在我看来,这只是模拟具有更复杂结构的二叉树。

    排序后的链表查找、插入和删除往往是 O(n)(实际插入/删除本身是 O(1) 但您仍然需要找到插入或删除点首先)。

    或者,二叉树(平衡树)是 O(log n) 的搜索、插入和删除(所有这些操作都与树的 高度 成正比)。

    【讨论】:

    • 所以,如果我理解正确的话,对于链表,问题将是在执行二分搜索时每次移动到当前中间元素都会增加开销,对吧?那么,二分查找的复杂度将是 logn * logn 而不是 logn,对吧?
    • @dhblah,是的,没错,至少是开销位。是不是(log N)^2,我不确定,但肯定比log N差。
    • @dhblah 如果您当前的“兴趣区间”长度为 n,则移动到中间的成本为 O(n)。随着您进行二分搜索,每次迭代的感兴趣区间的长度减半,因此所有迭代的总和仍为 O(n)。但是,该常数比线性搜索要差得多。简而言之,我想不出为什么二进制搜索比线性搜索更适合链表。
    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多