`

关于binary search

阅读更多
    编程珠玑Column 4关于binary search的部分相当精彩,1946年就有人发表binary search,但直到1962第一个正确运行的算法才写出来。尽管算法描述看起来简单明了,但是要写的正确却是有许多地方要仔细考虑。作者着重强调的是对程序正确性的分析方法,仔细分析方法的pre-condition, invariant,和post-condition。g9老大翻译过Joshua Bloch在google blog上的文章《号外,号外,几乎所有的binary search和mergsort都有错》,原文在这里。今天看了下原文,有更新,对于求中值索引的c/c++方法原文仍然是有错的,本来是这样:
int mid = ((unsigned) (low + high)) >> 1
 
但是在c99标准中,对于两个signed数值之和,如果溢出结果是未定义的(undefined),也就是说与编译器实现相关。上面的代码应该修改为:
mid = ((unsigned int)low + (unsigned int)high)) >> 1;

 
我查了下jdk6的java.util.Arrays的源码,joshua bloch说的这个问题已经解决,现在的binary search如下:

// Like public version, but without range checks.
    private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                     int key) {
    int low = fromIndex;
    int high = toIndex - 1;

    while (low <= high) {
        int mid = (low + high) >>> 1;
        int midVal = a[mid];

        if (midVal < key)
        low = mid + 1;
        else if (midVal > key)
        high = mid - 1;
        else
        return mid; // key found
    }
    return -(low + 1);  // key not found.
    }
 


    如原文所讨论的,采用了>>>操作符替代除以2

4
2
分享到:
评论

相关推荐

    你清楚Arrays.binarySearch()方法的返回值吗?

    在Java编程语言中,`Arrays`类是Java.util包下的一个非常重要的工具类,它提供了大量用于操作数组的静态方法,其中包括我们今天要讨论的`binarySearch()`方法。`Arrays.binarySearch()`方法允许我们在有序数组中查找...

    折半查找 binarySearch

    A binary search algorithm (or binary chop) is a technique for finding a particular value in a sorted list. It makes progressively better guesses, and closes in on the sought value, by comparing an ...

    BinarySearch

    标题中的"BinarySearch"指的是二分查找算法,这是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分为三个部分:小于目标值的元素、等于目标值的元素和大于目标值的元素,然后逐步缩小搜索范围,直到...

    Multidimensional Binary Search Trees Used for Associative Searching

    1975年,来自斯坦福大学的Jon Louis Bentley在ACM杂志上发表的一篇论文:Multidimensional Binary Search Trees Used for Associative Searching 中正式提出和阐述的了把空间划分为多个部分的k-d树。

    matlab开发-BinarySearch

    这个"matlab开发-BinarySearch"项目提供了一个名为`bsearch.m`的MATLAB函数,用于在向量中执行二进制查找操作。下面我们将深入探讨二进制搜索的原理、MATLAB实现以及它在数据分析和机器学习中的应用。 二进制搜索的...

    Optimal Binary Search Tree

    ### 最优二叉查找树(Optimal Binary Search Tree) #### 概述 最优二叉查找树(Optimal Binary Search Tree, OBST)是计算机科学领域内一种高效的搜索数据结构,其设计目标是在已知各节点访问概率的情况下,构建...

    optimal binary search tree

    最小成本二分检索树optimal binary optimal binary

    Search in a Binary Search Tree.zip

    二叉搜索树(Binary Search Tree,BST)是一种特殊类型的二叉树,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子树的引用和一个指向右子树的引用。在二叉搜索树中,对于任意节点,其左子树中的所有...

    Binary_Search_Data.rar_binary_binary search

    - 在`binarySearch`函数中实现上述的二分搜索逻辑,包括计算中间索引、比较元素和更新边界。 总的来说,二分搜索是计算机科学中一种重要的搜索算法,尤其适用于处理大量有序数据。在C语言中实现二分搜索,可以显著...

    matlab开发-Binarysearch

    本项目“matlab开发-Binarysearch”显然聚焦于如何在MATLAB中实现二进制搜索算法。该算法利用分治思想,通过不断缩小搜索范围来定位目标元素,时间复杂度为O(log n),在大数据量的处理中具有显著优势。 `bsearch.m`...

    BinarySearch_C++_算法_折半查找_

    在这个“BinarySearch_C++_算法_折半查找_”的项目中,我们将会探讨如何使用C++实现这个算法。 首先,我们要明白二分查找的基本思想。假设我们有一个已排序的数组,我们需要查找一个特定值。我们从数组的中间开始...

    Binary Search Tree

    Binary Search Tree 利用C++實現 Binary Search Tree

    二分查找 Binary Search(C++)

    int binarySearch(int arr[], int left, int right, int target) { while (left ) { int mid = left + (right - left) / 2; // 计算中间索引,避免整型溢出 if (arr[mid] == target) { // 如果中间元素就是目标...

    二叉搜索树(Binary Search Tree,BST)的实现与操作.docx

    二叉搜索树(Binary Search Tree,BST)的实现与操作.docx 二叉搜索树(Binary Search Tree,BST)的实现与操作.docx 二叉搜索树(Binary Search Tree,BST)的实现与操作.docx 二叉搜索树(Binary Search Tree,BST...

    BinarySearch.java

    实现折半查找的程序 希望大家功能学习,共同进步

    Java.binarySearch.docx

    在Java编程语言中,`binarySearch()`方法是`java.util.Arrays`类的一个静态方法,它采用二分查找算法来高效地在有序数组中查找指定的元素。二分查找是一种在有序数据集合中寻找目标值的算法,其效率远高于线性搜索。...

    binarysearch.py

    binarysearch.py

    binary search tree.rar_Binary_Search_Tree_tree

    二叉搜索树(Binary Search Tree,简称BST)是一种在计算机科学中广泛应用的数据结构,它具有以下特性:每个节点包含一个键(key)、一个关联的值、一个指向左子树的引用以及一个指向右子树的引用。在二叉搜索树中,...

    binary_search-master_TheFirst_binarysearch_

    The most commonly used binary search variant was first published by Hermann Bottenbruch in 1962 and hasn't notably changed since. Below I'll describe several novel variants with improved performance. ...

Global site tag (gtag.js) - Google Analytics