找到搜索的效率?算法。 C ++

时间:2013-10-04 20:33:40

标签: c++ algorithm performance

我被告知要找到这段代码的效率,我们已经花了大约1个小时(我和我的伙伴)试图找出这段代码的真正功能。

我们认为这是一种搜索算法,但我们无法找到一种方法使其无法进入无限循环:

int busq(int *v, int x, int b, int a){
    int m1, m2;
    int result;
    m1 = (b+a) / 3;
    m2 = 2*m1;

    if (v[m1] == x)
         result = m1;
    else
        if (v[m2] == x)
            result = m2;
        else
            if (x<v[m1])
                result = busq(v, x, b, m1-1);
            else
                if (x>v[m2])
                    result = busq(v, x, m2+1, a);
                else
                    result = busq(v, x, m1+1, m2-1);
    return result;
}

这就是我们所有的,参数a,b或x没有值,不是* v(向量)的大小或向量的内容。

应该可以像这样解决它。

如果有什么我们想知道这个代码的作用,但是如果你能告诉我们效率,那么也会受到赞赏。 (我们使用O()表示法E.J。:O(1),O(n ^ 2)...)

1 个答案:

答案 0 :(得分:3)

基本上是ternary searchv必须是排序数组,x是搜索的值,b是范围的开头,a是结尾(不包括)。

该函数尝试将范围划分为三个大致相等的分区m1m2(计算错误,只有在搜索第一个元素时才起作用)并检查x是否在界限。如果没有,它会依据x分区进行递归。

可以使用

修复代码
m1=b+(a-b)/3;
m2=b+(a-b)*2/3;

然后,效率应为O(log n)