夏日強化二日目

遇到問題,用暴力就對了!

著作權聲明

本講義屬於接棒程式設計學院所擁有,如需取得重製權以及公開傳輸權需要透過接棒程式設計學院取得著作人同意;
如果需要修改本講義著作,則需要取得改作權;
另外,如果有需要以光碟或紙本等實體的方式傳播,則需要取得接棒程式設計學院散佈權。

——接棒程式設計學院

作者:sa072686(sa072686@gmail.com)

時間複雜度

這方法是好是壞?會不會 TLE?

「時間」其實不可靠

  • 受硬體和執行環境影響太大
  • 受語言、實作等各種影響
  • 如何證明在資料量更大/更小時的優劣?
    • 如果要跑數百年單位的時間才跑得完呢?

跑不掉的指標「計算量」

  • 管你在哪台電腦跑、什麼環境跑
  • 你需要加總 100 萬次就是 100 萬次,一次也少不了
    • 跑快跑慢,總是要跑這麼多的運算
    • 計算量少總是贏過計算量多的

考慮資料量的大小

  • 10 筆資料和 10 萬筆資料,計算量通常不同
  • 定義「在資料量 n 時,需要 f(n) 次計算」
  • 例如加總 n 個數字,大約是 f(n) = n
  • 例如對 n 數求兩兩相加是否能湊出 k
    • 窮舉每個數搭配其它所有數時,約是 f(n) = n^2

定義方法的好壞

  • 設想「最糟情況」時的計算量
  • 「關鍵」情況下表現較佳的,被認為是較好的方法
    • 假設同樣差 100 倍速度
      • 萬分之一秒 vs 百萬分之一秒
      • 1 年 vs 100 年
    • 哪個關鍵?哪個重要?

函數的成長速度

  • 資料量大時,計算量要更低
  • 函數成長就要慢
    • 只要你成長更快,不論落後多少,總有一天趕上
    • 計算量超越 → 跑輸人家
  • 結論:函數成長越慢,就越優秀

討論題

討論題

討論題

動手做做看

Copy of 暑期強化一日目

By sa072686

Copy of 暑期強化一日目

  • 187