算法_监视哨兵能让顺序查找时间减半! 真的吗?

本文通过实验证明,在顺序查找中引入监视哨兵能够有效减少查询时间,优化搜索效率,尽管实际优化效果未达预期的一半。实验采用C语言编程,比较了带与不带哨兵的查找函数的时间消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在严奶奶版的《数据结构》一书中, 严奶奶引用了别的书的观点: 在顺序查找时(设表长>=1000), 引入监视哨兵, 可以减少几乎一半的查询时间。

       理论上,引入监视哨兵, 的确可以优化时间。来测试一下, 看看引入监视哨兵的前后对比:

#include<stdio.h>
#include<time.h>


#define TIMES 10000
#define N 10001

void fillArray(int *arr, int c)
{
    int i = 0;
    for(i = 0;i < c ;i++)
    {
        arr[i] = i;
    }
}

int func_v1(int *arr, int c, int k)
{
    int i = 1;
    for(; i < c && arr[i] != k; i++);
    
    return (i == c) ? 0:i;
}

int func_v2(int *arr, int c, int k)
{
    int i = c-1;
    arr[0] = k;
    
    for(; arr[i] != k; i--);
    return i;
}

int main()
{
    int arr[N] = {0};
    int k = -1;
    int j = 0;
    int start = 0,end = 0;
    fillArray(arr, N);
    
    
    start = clock();
    for(j=0; j < TIMES; j++)
    {
        func_v1(arr, N, k);   //不带哨兵
    }
    end = clock();
    printf("func_v1 time:%d\n", end - start);
    
    start = clock();
    for(j=0; j < TIMES; j++)
    {
        func_v2(arr, N, k);   //带哨兵
    }
    end = clock();
    printf("func_v2 time:%d\n", end - start);
    
    
}

 运行结果:

func_v1 time:317277
func_v2 time:262358

 多次反复测试, 均表明引入监视哨兵确实有好处, 但从我的测试来看, 远远达不到一半的优化。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值