2020-10-12(算法基礎)

算法的基本概念和要素

  • 運算
  • 查找
  • 排序
  • 最優(yōu)決策

數據結構

為了更高效地存儲、訪問和修改數據,數據結構就產生了。

  • 線性結構
    數組、鏈表(衍生——>棧、隊列、哈希表)

  • 二叉樹、二叉堆等

  • 多對多的關聯關系
  • 其他
    由基礎的數據結構變形而來,為了解決某些特定的問題。(跳表、哈希鏈表、位圖)

時間復雜度

基本操作執(zhí)行次數

運行環(huán)境 輸入規(guī)模的影響,程序運行的絕對執(zhí)行時間是無法確定的。

靈魂拷問:你還記得log2(下標)n嗎?
對數,以2為底,n的對數,也就是n要除以2多少次才能得到1。

程序執(zhí)行次數可能與輸入規(guī)模(n)存在一定的對應關系,如

  • T(n) = 3n;
  • T(n) = 5logn;
  • T(n) = 3;
  • T(n) = 3n^2 + 3n;
    這就呈現了一定的對應關系。

那么3n 一定小于 5logn嗎??

漸進時間復雜度

若存在f(n)使得當n無窮大時,T(n)/f(n)的極值為不為0的常數,則該f(n)是T(n)的同數量級函數。

T(n) = O(f(n))。這個O就是時間復雜度。他將相對時間函數T(n)簡化為一個數量級(n、n2、n3)

推導時間復雜度

  • 如果運行時間為常數量級,則用1表示;
  • 保留時間函數中的最高階項;
  • 如果最高階存在,則省去前系數。

1、T(n) = 3n ——> T(n) = O(n);
2、T(n) = 5logn ——> T(n) = O(logn);
3、T(n) = 3 ——> T(n) = O(1);
4、T(n) = 3n^2 + 3n ——> T(n) = O(n^2);

如果n足夠大,他們的時間大小為
O(1) < O(logn) < O(n) < O(n^2)

空間復雜度

在運算的過程中,我們經常需要一些中間數據來輔助我們更好地進行計算,那這些中間數據用什么數據結構來存儲才能提高我們的運算效率呢?

S(n) = O(f(n))
同樣的,他也有幾種隨n增長的趨勢變化:

  • 當所占空間與輸入規(guī)模n無關時(只需要固定的存儲空間),其空間復雜度記作O(1);
  • 分配的空間為一個線性的集合(數組等),且集合大小與n成正比,則記作O(n)
  • 分配空間為二維空間(二維數組[][]),且長度與寬度都與n成正比,則記作O(n^2);
  • 遞歸空間,當執(zhí)行遞歸時,系統(tǒng)會分配一塊空間來存儲方法調用棧,存在兩個動作"入棧"和"出棧",當我們每次遞歸執(zhí)行函數時,系統(tǒng)都會將函數代碼和參數壓入棧中,而當函數執(zhí)行返回操作時,才會出棧。很明顯,空間復雜度與遞歸深度成正比,即O(n);

兩者該如何權衡,還是具體看應用場景的,一般來說,大家對程序執(zhí)行的時間要求比較苛刻。

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

友情鏈接更多精彩內容