<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    關于binary search

    Posted on 2008-04-02 10:08 dennis 閱讀(2013) 評論(2)  編輯  收藏 所屬分類: 數據結構與算法計算機科學與基礎
        編程珠璣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

    評論

    # re: 關于binary search  回復  更多評論   

    2008-04-02 23:41 by ZelluX
    int mid = ((unsigned) (low + high)) >> 1。
    這段代碼沒錯的。不管signed還是unsigned,轉成匯編就是直接二進制相加。這里unsigned和signed只在位移時會有不同的行為。

    # re: 關于binary search[未登錄]  回復  更多評論   

    2008-04-04 09:24 by Ryan
    你修改的有問題, ((unsigned int)low + (unsigned int)high)) >> 1;他們的和就不會溢出了?
    主站蜘蛛池模板: 一个人看的www在线免费视频| 黄色片在线免费观看| 国产午夜免费秋霞影院| 亚洲人成网站影音先锋播放| 暖暖免费中文在线日本| 好男人www免费高清视频在线| 亚洲成A人片777777| 免费人成在线观看播放a| 中国在线观看免费高清完整版 | 最新国产精品亚洲| 香港a毛片免费观看 | 99久久99久久精品免费看蜜桃| 国产AV无码专区亚洲AWWW| 久久精品亚洲日本波多野结衣| 久久久久av无码免费网| 久久综合图区亚洲综合图区| 九九综合VA免费看| 国产无遮挡吃胸膜奶免费看| 亚洲一级毛片在线播放| 一级毛片免费观看| 亚洲午夜福利在线观看| 乱淫片免费影院观看| 在线观看免费大黄网站| 亚洲人成日本在线观看| 95免费观看体验区视频| 亚洲av综合色区| 男女一边摸一边做爽的免费视频| 又粗又大又长又爽免费视频| 亚洲精品无码成人| 性感美女视频免费网站午夜| 亚洲啪啪免费视频| 亚洲美女视频免费| 亚洲短视频男人的影院| 免费人成在线观看视频高潮| 亚洲中文字幕第一页在线| fc2成年免费共享视频网站| 亚洲国产精品成人AV无码久久综合影院| 亚洲精品9999久久久久无码| 四虎国产精品免费久久| 77777亚洲午夜久久多喷| 免费看国产成年无码AV片|