k = 4时k-ary搜索算法的运算次数?

时间:2015-10-17 13:55:08

标签: algorithm search pseudocode

我正在分析搜索算法的复杂性。例如,对于下面给出伪代码的二进制搜索,我可以写出

循环外的5个操作(3个赋值,1个减法,1个比较)。

每次循环运行7次操作(2次加法,1次除法,2次比较,2次分配)。

int binary_search(int x, int a[], int n)
{
int i, j, location;
int m;
i = 0;
j = n-1;
while (i < j) {
m = (i + j) / 2;
if (x > a[m]) i = m+1;
else j = m;
}
if (x == a[i]) location = i;
else location = -1;
return location;
}

当k = 4时,我试图对k-ary搜索算法做同样的事情,但我找不到可以分析的伪代码。任何帮助或指导将不胜感激。

1 个答案:

答案 0 :(得分:0)

我问了另一个问题,经过几天的斗争,我又回答了这个问题。在互联网的帮助下,我写了一个与acm库一起正常工作的java代码。我们要查找的数字是x,j是我们集合的最后一个索引,数组的顺序递增。通过更改这些参数,我们可以使用4进制算法查找任何数组中的任何数字。

import java.util.Arrays;

import acm.program.*;


public class quartersearch extends ConsoleProgram {


    public void run() {

        int i = 0;
        int j = 15;
        int location;
        int x = 6;

        int[] a = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

        println(a[2]);

        while ( i < j) {
            int l = (j + 3*i) /4 ;  // 1st divisor
            int m = (j + i) / 2;  // 2nd divisor
            int u = (3*j + i) / 4; // 3rd divisor
            if(x > a[u]) { 
                i = u + 1;
            } else if ( x > a[m] && x <= a[u]) {
                i = m + 1;
                j = u;
            } else if (x > a[l] && x <= a[m]) {
                i = l + 1;
                j = m;
            } else {
                j = l;
            }   
        } 


        int k = (i+j) / 2;
        if (a[i] == x) {
            location = i;
        } else if (a[k] == x) {
            location = k;
        } else if (a[j] == x) {
            location = j;
        } else {
            location = 0;
        }

        println(location);

    }






}