<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 閱讀(2019) 評論(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;他們的和就不會溢出了?
    主站蜘蛛池模板: 18禁免费无码无遮挡不卡网站| 久久久高清免费视频| a级毛片毛片免费观看久潮喷| 18禁美女裸体免费网站| 国产在线a不卡免费视频| 亚洲av日韩av高潮潮喷无码| 中文字幕无码精品亚洲资源网久久| 一出一进一爽一粗一大视频免费的| 亚洲无砖砖区免费| 亚洲国产成人久久99精品| 中文字幕的电影免费网站| 成年人免费观看视频网站| 亚洲av永久无码制服河南实里| 亚洲国产AV一区二区三区四区| 中文字幕日本人妻久久久免费| 大陆一级毛片免费视频观看| 亚洲成熟xxxxx电影| 4399影视免费观看高清直播| 亚洲国产成人久久| 四虎永久在线免费观看| 亚洲免费观看在线视频| 免费人成在线视频| 亚洲一区二区影视| 97公开免费视频| 亚洲综合av永久无码精品一区二区| 亚洲国产成人久久综合| 亚洲高清最新av网站| 亚洲成a人片在线不卡一二三区| 国产成人无码免费视频97| 中文无码日韩欧免费视频| 亚洲理论片在线观看| 一级毛片**不卡免费播| 国产99视频免费精品是看6| 丁香花在线观看免费观看图片 | 永久黄网站色视频免费| 亚洲天堂一区二区三区| 三年片在线观看免费大全电影| 国产精品亚洲成在人线| 91免费福利视频| 中文字幕 亚洲 有码 在线| 久久久高清免费视频 |