循環(huán)不變式(Loop Invariant)

????什么叫循環(huán)不變式?不只是一種計算機(jī)科學(xué)的思想,準(zhǔn)確地說是一種數(shù)學(xué)思想。在數(shù)學(xué)上闡述了通過循環(huán)(迭代、遞歸)去計算一個累計的目標(biāo)值的正確性,屬于基礎(chǔ)數(shù)學(xué)的范疇,而且在計算機(jī)上也應(yīng)用廣泛。

????循環(huán)不變式主要用來幫助理解算法的正確性,其主體是不變式,也就是一種描述規(guī)則的表達(dá)式。過程分三個部分:初始,保持,終止?!?br>  ?。?)初始:保證在初始的時候不變式為真。
 ?。?)保持:保證在每次循環(huán)開始和結(jié)束的時候不變式都為真。
  (3)終止:如果程序可以在某種條件下終止,那么在終止的時候,就可以得到自己想要的正確結(jié)果。
舉個栗子:

    public static int binarySerach1(int[] arr, int target) {
        //循環(huán)不定式條件:定義一個區(qū)間[left...right],在這個區(qū)間內(nèi)查找target
        int left = 0, right = arr.length - 1;
        int mid = -1;
        while(left <= right){//[left...right]滿足條件,比如[12, 12]數(shù)組中有一個元素12
            mid = left + ((right-left)>>1);//注意符號優(yōu)先級
            if(arr[mid] == target){
                return mid;
            }
            if(arr[mid] < target){//更新左邊界,不包含mid,維持循環(huán)不定式:[mid + 1...right]成立
                left = mid + 1;
            }else{//更新右邊界,不包含mid,維持循環(huán)不定式:[left...mid - 1]成立
                right = mid - 1;
            }
        }
        return mid;
    }

    public static int binarySerach2(int[] arr, int target) {
        //循環(huán)不定式條件:定義一個區(qū)間[left...right),在這個區(qū)間內(nèi)查找target
        int left = 0, right = arr.length;
        int mid = -1;
        while(left < right){//[left...right)滿足條件
            mid = left + ((right-left)>>1);//注意符號優(yōu)先級
            if(arr[mid] == target){
                return mid;
            }
            if(arr[mid] < target){//更新左邊界,不包含mid,維持循環(huán)不定式:[mid + 1...right)成立
                left = mid + 1;
            }else{//更新右邊界,不包含mid,維持循環(huán)不定式:[left...mid)成立
                right = mid;
            }
        }
        return mid;
    }

參考:
1.https://baike.baidu.com/item/%E5%BE%AA%E7%8E%AF%E4%B8%8D%E5%8F%98%E5%BC%8F/10593291?fr=aladdin
2.慕課網(wǎng):玩轉(zhuǎn)算法面試 作者:liuyubobobo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容