繁体   English   中英

查找比较次数

[英]Finding number of comparisons

我正在尝试跟踪此二进制搜索代码中的键比较次数。 对于2^16的数组大小,比较结果应该在 17 左右。 你能解释一下我为什么要 33 岁吗?

public class AdvancedBinarySearch {

    int count = 0;

    // Returns location of key, or -1 if not found 
    int AdvancedBinarySearch(int arr[], int l, int r, int x) {
        int m;

        while (r - l > 1) {
            count++;
            m = l + (r - l) / 2;
            if (arr[m] <= x) {
                l = m;
                count++;
            } else {
                r = m;
                count++;
            }
        }

        if (arr[l] == x) {
            count++;
            return l;
        }

        if (arr[r] == x) {
            count++;
            return r;

        } else {
            count++;
            return -1;

        }
    }

    public void setCount(int i) {
        this.count = i;
    }
}

您的代码计算if (arr[m] <= x)比较两次。 如果您从l = m下方以及r = m下方移除count++ ,这将不再发生。

我在此更改之前和之后测试了此更改,在从 0 到 65535 的整数数组中搜索 189。该数组的大小为 2^16,在更改之前,计算了 33 次比较,在更改之后,进行了 17 次比较被计算在内,所以我认为这种改变可以达到你想要的效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM