Algorithm 指数搜索与二进制搜索

Algorithm 指数搜索与二进制搜索,algorithm,search,Algorithm,Search,除了在空间复杂度方面,二进制搜索在任何方面都优于指数搜索吗?这两种算法都在有序元素列表中搜索值,但它们解决了不同的问题。指数搜索是为无界列表而显式设计的,而二进制搜索则处理有界列表 指数搜索背后的思想非常简单:搜索一个界限,然后执行二进制搜索 例子 让我们举个例子A=[1,3,7,8,10,11,12,15,19,21,22,23,29,31,37]。此列表可以看作是一个二叉树(尽管不需要构建树): 二进制搜索 对e=27(例如)的二进制搜索将执行以下步骤 b0)让T,R分别为树及其根

除了在空间复杂度方面,二进制搜索在任何方面都优于指数搜索吗?

这两种算法都在有序元素列表中搜索值,但它们解决了不同的问题。指数搜索是为无界列表而显式设计的,而二进制搜索则处理有界列表

指数搜索背后的思想非常简单:搜索一个界限,然后执行二进制搜索

例子 让我们举个例子<代码>A=[1,3,7,8,10,11,12,15,19,21,22,23,29,31,37]。此列表可以看作是一个二叉树(尽管不需要构建树):

二进制搜索 对
e=27
(例如)的二进制搜索将执行以下步骤

b0)让
T,R
分别为树及其根

                 15 (R)
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23_(R)
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31 (R)
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31___
     / \    /  \     /  \   /     \
    1   7  10   12  19  22 29 (R)  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
(R) 1   7  10   12  19  22 29  37
b1)将
e
R
进行比较:
e>15
。设
T,R
分别为
T
右子树及其根

                 15 (R)
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23_(R)
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31 (R)
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31___
     / \    /  \     /  \   /     \
    1   7  10   12  19  22 29 (R)  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
(R) 1   7  10   12  19  22 29  37
b2)将
e
R
进行比较:
e>23
。设
T,R
分别为
T
右子树及其根

                 15 (R)
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23_(R)
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31 (R)
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31___
     / \    /  \     /  \   /     \
    1   7  10   12  19  22 29 (R)  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
(R) 1   7  10   12  19  22 29  37
b3)将
e
R
进行比较:
e<31
。设
T,R
分别为
T
左子树及其根

                 15 (R)
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23_(R)
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31 (R)
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31___
     / \    /  \     /  \   /     \
    1   7  10   12  19  22 29 (R)  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
(R) 1   7  10   12  19  22 29  37
b4)比较
e
R
e29
:元素不在列表中,因为
T
没有子树

指数搜索 对
e=27
(例如)的指数搜索将经历以下步骤

T,R
分别为最左边的子树(即叶
1
)及其根(
1

                 15 (R)
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23_(R)
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31 (R)
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31___
     / \    /  \     /  \   /     \
    1   7  10   12  19  22 29 (R)  37
                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
(R) 1   7  10   12  19  22 29  37
e1)将
e
R
进行比较:
e>1
。设
R
R
的父级,
T
为以
R
为根的树

                 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
  (R) 3      11       21     31 (R)
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
e2)将
e
R
进行比较:
e>3
。让
R
成为
R
的父级,
T
成为以
R
为根的树:

                 15
            ____/  \____
           /            \
      (R)_8__           _23__
       /     \         /     \
      3      11       21     31 (R)
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
             (R) 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31 (R)
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
e3)将
e
R
进行比较:
e>8
。让
R
成为
R
的父级,
T
成为以
R
为根的树:

                 15
            ____/  \____
           /            \
      (R)_8__           _23__
       /     \         /     \
      3      11       21     31 (R)
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
             (R) 15
            ____/  \____
           /            \
        __8__           _23__
       /     \         /     \
      3      11       21     31 (R)
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
e4)将
e
R
进行比较:
e>15
<代码>R没有父项。设
T
T
的右子树,且
R
为其根:

                 15
            ____/  \____
           /            \
        __8__           _23_(R)
       /     \         /     \
      3      11       21     31
     / \    /  \     /  \   /  \
    1   7  10   12  19  22 29  37
e5..7)参见步骤b2..4)

时间复杂性 为了便于演示,让
N=2^N
A
的大小,并让索引从
1
开始。如果
N
不是二的幂,则结果几乎相同


0好吧,你的指标是什么?就我个人而言,我认为“二进制搜索”更容易拼写,这很好。就时间复杂性而言,指数搜索在许多情况下优于二进制搜索。让我们保持时间复杂度作为度量。时间复杂度对于两者都是相同的(因为大O忽略常量)。但如果数组的大小事先已知,则指数搜索对于某些值(接近数组开头的值)更快,而二进制搜索对于其他值更快。我希望二进制搜索平均速度更快,但我没有任何数字支持。你值得我的赏金