1. 程式人生 > >資料結構和演算法基礎概念介紹

資料結構和演算法基礎概念介紹

一、什麼是演算法

演算法是指一系列解決問題的清晰指令。

二、演算法特徵

  1. 有窮性:演算法必須能夠在執行有限個步驟之後終止
  2. 確切性:演算法的每一步都必須要有確切的定義
  3. 輸入項:演算法必須有0個或多個輸入,描述演算法執行的初始狀態。0個輸入即演算法本身已經擁有了初始條件
  4. 輸出項:演算法必須要有一個或者多個輸出,反應演算法加工後的結果,沒有輸出的演算法是沒有意義的
  5. 可行性:演算法的每個操作都是可以在有限時間內完成的

三、演算法評定

不同演算法的優劣不同,影響到程式的執行效率。演算法分析主要從時間複雜度和空間複雜度兩個維度來評定。其餘還有正確性、可讀性、健壯性等。

1. 時間複雜度

時間複雜度描述演算法的執行時間,記作 T(n)。時間複雜度通常使用大O表示法。

1.1 概念

大O表示法指出了演算法有多快。例如存在n個元素,查詢其中是否存在某個元素,使用簡單查詢檢查每個元素的話需要進行n次操作,使用大O表示法表示執行時間即O(n)。

大O表示法的單位並非是秒或者毫秒這樣的時間單位,而是讓你能夠比較運算元,指出了演算法執行時間的增速。

大O表示法忽略常量和低階的資料,例如 "3n^2 + n + 2" 的時間複雜度也是 O(n^2),"2n" 的時間複雜度即 O(n)。

1.2 常見時間複雜度

  • O(1) :常量時間。演算法耗時與元素個數n無關,耗時為固定時長,例如獲取陣列中某個索引處的值。
  • O(logn) :對數時間。例如二分查詢。
  • O(n) :線性時間。例如簡單查詢。
  • O(n*logn) :這樣的演算法包括快速排序——一種速度較快的排序演算法
  • O(n^2) :平方時間。例如選擇排序、氣泡排序
  • O(n!) :階乘時間。例如旅行商問題——一種非常慢的演算法 以上時間複雜度依次增大。

2. 空間複雜度

空間複雜度是指演算法執行過程中臨時所需要的記憶體空間大小的量度,通常記作 S(n)。

四、資料結構

1. 什麼是資料結構

資料結構是計算機儲存、組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。

2. 常用資料結構

  • 陣列:按序列排列的連續的相同型別的資料集合成為陣列
  • 棧:只能在一端進行插入和刪除的線性表
  • 佇列:只能在前端進行刪除操作,只能在後端進行插入操作的線性表
  • 連結串列:物理上非連續的儲存結構。每個結點儲存兩部分資訊:資料和下一個結點位置
  • 樹:一系列結點的有窮集合
  • 圖:結點的有窮結合V和邊的集合E組成
  • 堆:堆是一種特殊的樹形結構,每個結點都有一個值
  • 散列表:以鍵值對形式存在的一種資料結構