<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;他們的和就不會溢出了?
    主站蜘蛛池模板: 国产精品亚洲视频| 亚洲男人第一无码aⅴ网站| MM131亚洲国产美女久久| 日韩a毛片免费观看| 免费在线观看亚洲| 福利免费在线观看| 亚洲av无码一区二区三区不卡| 中国极品美軳免费观看| 亚洲综合国产成人丁香五月激情| 99久久精品免费精品国产| 亚洲天堂一区二区三区| 国产jizzjizz免费视频| 国产精品免费久久| 亚洲人配人种jizz| 亚洲片国产一区一级在线观看| 免费永久看黄在线观看app| 青青草国产免费久久久下载| 亚美影视免费在线观看| 国产无限免费观看黄网站| 亚洲成人网在线播放| 亚洲另类春色国产精品| 亚洲精品无码永久在线观看 | 亚洲精品亚洲人成人网| 久久国产乱子伦免费精品| 色婷婷亚洲一区二区三区| 亚洲免费视频网站| 亚洲国产精品国产自在在线| 成年人网站免费视频| 亚洲精品免费在线观看| 黄色视屏在线免费播放| 一级毛片aaaaaa免费看| 日本亚洲免费无线码| 8x8×在线永久免费视频| 久久精品女人天堂AV免费观看| 夜夜爽免费888视频| 无码精品人妻一区二区三区免费看 | 免费看a级黄色片| 在线人成精品免费视频| 精品免费久久久久久久| 两个人看www免费视频| 亚洲午夜在线一区|