<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;他們的和就不會溢出了?
    主站蜘蛛池模板: 亚洲国产精品无码久久| 婷婷精品国产亚洲AV麻豆不片| 亚洲福利视频一区二区三区| 国产精品99久久免费观看| 亚洲日韩激情无码一区| 色www永久免费| 一级特级女人18毛片免费视频| 精品国产免费观看| 污视频网站免费在线观看| 亚洲AV无码专区日韩| 皇色在线免费视频| 亚洲AV永久无码精品成人| 日韩免费无码一区二区三区| 亚洲精品电影在线| 一二三四在线播放免费观看中文版视频 | 亚洲av午夜国产精品无码中文字| 免费看大美女大黄大色| 老司机福利在线免费观看| 久久精品亚洲乱码伦伦中文| 久久精品成人免费网站| 亚洲人成在线精品| 又粗又大又硬又爽的免费视频| 久久免费香蕉视频| 亚洲综合网美国十次| 精品国产免费一区二区| 日批视频网址免费观看| 亚洲专区中文字幕| 免费在线精品视频| 免费成人高清在线视频| 亚洲自国产拍揄拍| 亚洲午夜激情视频| 亚洲高清视频免费| 黄人成a动漫片免费网站| 亚洲av中文无码乱人伦在线播放 | 五月亭亭免费高清在线| 国产精品亚洲一区二区在线观看 | 最近免费中文字幕大全高清大全1 最近免费中文字幕mv在线电影 | 亚洲视频在线一区| 全免费a级毛片免费看无码| 青青操在线免费观看| 国产精品亚洲自在线播放页码|