復雜度

為什么要學習數據結構與算法

  1. 提到數據結構與算法大多數人的第一印象一定是復雜犀填、難學舵稠、工作用不到超升、面試還老問
  2. 既然工作用不到為什么面試還總是問呢入宦,難道是為了故意刁難人?當然不是室琢,他是考察一個人是否具有長期發(fā)展?jié)摿Φ闹匾笜?就如同武俠秘籍里邊的內功心法一樣)
  3. 在哪里有用到乾闰?操作系統(tǒng)內核,一些框架源碼盈滴,人工智能....
  4. 是否應該學涯肩? 如果想在計算機行業(yè)長久待下去 可以說是畢竟之路

如何評價一個算法的好壞

1. 事后統(tǒng)計法

  • 即對于同一組輸入比較其最終的執(zhí)行時間
public static void main(String[] args) {
   Executors.execute(() -> sum(1000));
}
private static int sum(int n) {
    int result = 0;
    for (int i = 1; i <= n; i++) {
        result += i;
    }
    return result;
}
 public static void execute(Executor execute) {
    if (Objects.isNull(execute)) { return; }
    long start = System.currentTimeMillis();
    execute.execute();
    long end = System.currentTimeMillis();
    long seconds = (start - end) / 1000;
    System.out.println("該算法行時長為:【 " + seconds + " 】秒");
 } 
 public interface Executor {
    /**
     * execute
     */
    void execute();
 }

此方法最大的特點就是簡單直觀,但卻存在以下弊端

  1. 代碼的執(zhí)行時間嚴重依賴于硬件設備
  2. 需要編寫一定量的代碼才能測算出其好壞
  3. 難以保障測算公平性

2. 大O表示法(漸近分析)

  • 特點
    1.他是在數據規(guī)模為n時的一種估算方法 如:O(n)等巢钓。
    2.大o表示法是一種粗略的估算模型病苗,能幫助我們快速了解一個算法的執(zhí)行效率
    2.忽略常數 系數
  • 示例
  1. O(n)
public static void print1(int n) {
    for (int i = 0; i < n; i++) {
        System.out.println(i);
    }
}
  1. int i = 0; 復雜度 +1
  2. i < n; 每執(zhí)行一次 +1 共需要+n次
  3. i++; 每執(zhí)行一次 +1 共需要+n次
  4. System.out.println(i); +n次
  5. 1 + 3n 去掉常數以及系數
  6. 復雜度: O(n)
  1. O(n^2)
public static void print2(int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            System.out.println(i);
        }
    }
}
  1. 外層執(zhí)行次數 1 + 2n
  2. 內層執(zhí)行次數 n * (1 + 3n)
  3. 總工 1 + 2n + n * (1 + 3n) = 1 + 2n + n + 3n^2 = 1 + 3n + 3n^2
  4. 復雜度: O(n^2)
  1. O(logn)
 public static void print3(int n) {
    while ((n = n / 2) > 0) {
        System.out.println(n);
    }
}
  1. 如果n 為 8 執(zhí)行次數為 3 即 2^3 = 8
  2. 執(zhí)行次數為:log2(n)
  3. 復雜度 logn
  1. O(2^n)
public static int fib(int n) {
    if (n <= 1) { return n; }
    return fib(n - 1) + fib(n -2);
}
  1. 如果n為4
  2. 需要調用 16次 函數
  3. 復雜度為 2^n
  1. O(nlogn)
  public static void print4(int n) {
    for (int i = 0; i < n; i *= 2) {
        for (int j = 0; j < 0; j ++) {
            System.out.println(j);
        }
    }
}
  1. 1 + logn + logn + logn * (1 + 3n)
  2. 1 + 3logn + 3n * logn
  3. 復雜度為:O(nlogn)
  1. O(1)
public static int add(int a, int b) {
    return a + b;
}
  1. 斐波那契數 O(n)級別寫法
public static int fib1(int n) {
    if (n <= 1) { return n; }
    int first = 0;
    int second = 1;
    for (int i = 0; i < n - 1; i ++) {
        int sum = first + second;
        first = second;
        second = sum;
    }
    return second;
}
public static int fib2(int n) {
    if (n <= 1) { return n; }
    int first = 0;
    int second = 1;
    while (n-- > 1) {
        second += first;
        first = second - first;
    }
    return second;
}
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市症汹,隨后出現的幾起案子硫朦,更是在濱河造成了極大的恐慌,老刑警劉巖背镇,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咬展,死亡現場離奇詭異,居然都是意外死亡芽世,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門诡壁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來济瓢,“玉大人,你說我怎么就攤上這事妹卿⊥” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵夺克,是天一觀的道長箕宙。 經常有香客問我,道長铺纽,這世上最難降的妖魔是什么柬帕? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮狡门,結果婚禮上陷寝,老公的妹妹穿的比我還像新娘。我一直安慰自己其馏,他們只是感情好凤跑,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叛复,像睡著了一般仔引。 火紅的嫁衣襯著肌膚如雪扔仓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天咖耘,我揣著相機與錄音翘簇,去河邊找鬼。 笑死鲤看,一個胖子當著我的面吹牛缘揪,可吹牛的內容都是我干的。 我是一名探鬼主播义桂,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼找筝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了慷吊?” 一聲冷哼從身側響起袖裕,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎溉瓶,沒想到半個月后急鳄,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡堰酿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年疾宏,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片触创。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡坎藐,死狀恐怖,靈堂內的尸體忽然破棺而出哼绑,到底是詐尸還是另有隱情岩馍,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布抖韩,位于F島的核電站蛀恩,受9級特大地震影響,放射性物質發(fā)生泄漏茂浮。R本人自食惡果不足惜双谆,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望席揽。 院中可真熱鬧佃乘,春花似錦、人聲如沸驹尼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽新翎。三九已至程帕,卻和暖如春住练,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背愁拭。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工讲逛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岭埠。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓盏混,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惜论。 傳聞我的和親對象是個殘疾皇子许赃,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內容