17.第22章:算法時間復雜度

復雜度O允許忽略非主導部分(n-1中的-1)梯醒,并強調重要部分(n-1中的n)

  • 1. 線性查找

最壞情況:比較n次妨猩,O(n)
最好情況:比較1次担敌,O(1)
平均情況:(1+2+...+n)/n=(1+n)n/2/n=(1+n)/2,可以忽略1,就是O(n/2)

  • 2. 選擇排序

對于一次迭代堪夭,n個數(shù)字咏删,假設最小的數(shù)字就是第一個惹想,用min保存。然后剩下n-1個數(shù)字和當前min比較督函,找到更小的就更新min值嘀粱,得到最小的min值激挪,如果不是第一個數(shù)字,就和第一個數(shù)字交換草穆,就找出來第一小的值灌灾。然后再進行剩下的迭代。
第一次迭代悲柱,比較次數(shù)為n-1锋喜;
第二次迭代,比較次數(shù)n-2豌鸡;
第n-1次迭代嘿般,比較次數(shù)1;
假設T(n)表示選擇排序的復雜度涯冠,c表示每次迭代中其他操作的總數(shù)(如賦值和比較)
T(n)=(n-1)+C+(n-2)+C+.......+2+c+1+c
=n(n-1)/2+(n-1)c
=O(n的平方)

  • 3. 漢諾塔


  • 4.斐波那契數(shù)


效率不高炉奴,我們使用動態(tài)編程方法實現(xiàn)斐波那契數(shù)列。效率為O(n)


 private static long fib2(int index){
        long f0=0;
        long f1=1;
        long f2=1;
        if(index==0)return f0;
        if (index==1)return f1;
        if (index==2)return f2;
        for(int i=3;i<=index;i++){
            f0=f1;
            f1=f2;
            f2=f0+f1;
        }
        return f2;
    }
  • 5.最大公約數(shù)

1)算法一:窮舉 O(n)



2)改進蛇更,從兩個數(shù)中相對小的數(shù)向下找瞻赶。但最壞情況時間復雜度還是O(n)



3)再改進,較小的數(shù)字n的除數(shù)派任,除了n之外砸逊,不可能大于除以2的n/2的值。這個for循環(huán)最多循環(huán)n/2次掌逛,速度快了一半的時間师逸,但時間復雜度還是O(n).

4)歐幾里得算法,遞歸思想豆混,O(logn)




圖片.png
常用的遞推關系
  • 6.尋找素數(shù)

1)算法一:時間復雜度O(n*sqrt(n))




2)算法二:埃拉托色尼篩選算法





  • 7.回溯法解決八皇后問題

八皇后問題:在一個棋盤的每一行放置一個皇后棋子篓像,不存在在同一列或者在對角線的兩個棋子。



1)從第一行開始為每一行尋找合適的位置
2)如果找到了位置皿伺,則繼續(xù)為下一行搜索位置员辩。
3)如果沒有找到位置,回溯到前一行鸵鸥,在前一行之前位置之后搜索一個新的位置屈暗。
4)如果算法回溯到第一行且不能在該行找到一個新的位置,則不能找到方案脂男。

public class text1_回溯法解決八皇后問題 {
    private static final int SIZE=8;
    //用queens數(shù)組來存每一行放置的位置
    int []queens={-1,-1,-1,-1,-1,-1,-1,-1};

    //回溯算法
    private  boolean search() {
        int row=0;
        while (row>=0&&row<SIZE){
            //找到第i行放置的位置
            int k=findPosition(row);
            //說明沒有找到位置,要回溯到上一行
            if(k==-1){
                //在回溯上一行之前种呐,要將當前行的值恢復初始值-1宰翅,重新找
                queens[row]=-1;
                row--;
            }
            else{
               queens[row]=k;
               row++;
            }

        }
        //如果放置一遍,回溯到第一行,并且第一行也沒找到,i--就變成1了
        if(row==-1)
            return false;
        else
            return true;

    }

    private int findPosition(int row) {
        //每次放置的位置爽室,從上次位置的下一個開始
        int start=queens[row]+1;
        for(int col=start;col<SIZE;col++) {
            //判斷row行汁讼,col列的位置是否可行
            if (isvalid(row, col))
                return col;
        }
        return -1;
    }

    private boolean isvalid(int row, int col) {
        //判斷前面的每一行的queen[row-i]和col是否相等,相等表示在同一列
        //判斷前面的每一行的queen[row-i]和col-i是否相等,相等表示在左對角線
        //判斷前面的每一行的queen[row-i]和col+i是否相等嘿架,相等表示在右對角線
       for(int i=1;i<=row;i++){
           if(queens[row-i]==col||queens[row-i]==col-i||queens[row-i]==col+i)
               return false;
       }
       return true;

    }


    @Test
    public void test(){
        if(search())
            for (int i:queens)
                System.out.print(i+" ");
        else
            System.out.print("沒找到");
    }

}

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓶珊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子耸彪,更是在濱河造成了極大的恐慌伞芹,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝉娜,死亡現(xiàn)場離奇詭異唱较,居然都是意外死亡,警方通過查閱死者的電腦和手機召川,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門南缓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荧呐,你說我怎么就攤上這事汉形。” “怎么了倍阐?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵概疆,是天一觀的道長。 經(jīng)常有香客問我收捣,道長届案,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任罢艾,我火速辦了婚禮楣颠,結果婚禮上,老公的妹妹穿的比我還像新娘咐蚯。我一直安慰自己童漩,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布春锋。 她就那樣靜靜地躺著矫膨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪期奔。 梳的紋絲不亂的頭發(fā)上侧馅,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音呐萌,去河邊找鬼馁痴。 笑死,一個胖子當著我的面吹牛肺孤,可吹牛的內(nèi)容都是我干的罗晕。 我是一名探鬼主播济欢,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼小渊!你這毒婦竟也來了法褥?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤酬屉,失蹤者是張志新(化名)和其女友劉穎半等,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梆惯,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡酱鸭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了垛吗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凹髓。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怯屉,靈堂內(nèi)的尸體忽然破棺而出蔚舀,到底是詐尸還是另有隱情,我是刑警寧澤锨络,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布赌躺,位于F島的核電站,受9級特大地震影響羡儿,放射性物質發(fā)生泄漏礼患。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一掠归、第九天 我趴在偏房一處隱蔽的房頂上張望缅叠。 院中可真熱鬧,春花似錦虏冻、人聲如沸肤粱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽领曼。三九已至,卻和暖如春蛮穿,著一層夾襖步出監(jiān)牢的瞬間庶骄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工践磅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓢姻,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓音诈,卻偏偏與公主長得像幻碱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子细溅,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經(jīng)驗褥傍。 張土汪:刷leetcod...
    土汪閱讀 12,738評論 0 33
  • 回溯算法 回溯法:也稱為試探法,它并不考慮問題規(guī)模的大小喇聊,而是從問題的最明顯的最小規(guī)模開始逐步求解出可能的答案恍风,并...
    fredal閱讀 13,632評論 0 89
  • 一、實驗目的 學習使用 weka 中的常用分類器誓篱,完成數(shù)據(jù)分類任務朋贬。 二、實驗內(nèi)容 了解 weka 中 explo...
    yigoh閱讀 8,497評論 5 4
  • 在我小的時候 你去了遠方 小小的船在水面游蕩 小小的我在岸上遙望 你會回來吧 說好了給我?guī)乱律?一路煙霞 鶯飛草...
    R先森airy閱讀 398評論 2 6
  • 我從三月的清晨走來窜骄,愿做你明亮的眼睛锦募,迎接每天的第一縷陽光,我想路過五月所有繁茂的樹邻遏,只愿風吹起的時候糠亩,剛好念起你...
    與你光年閱讀 626評論 0 0