數據結構算法基礎

算法是一步步的過程,它定義一組指令在一定的順序,以執行獲得所需的輸出。算法通常在獨立的基本語言,即一種算法可以在一個以上的程序設計語言中實現。

但從數據結構來看,以下是算法的一些重要類別 −

  • 搜索 − 在一個數據結構中搜索一個項目算法。

  • 排序− 排序在某些順序算法

  • 插入 − 在數據結構中插入項算法

  • 更新 − 在數據結構中更新現有的項算法

  • 刪除 − 從數據結構中刪除現有項目算法

算法的特點

並非所有的程序可以被稱爲一種算法。算法應具有下面特徵 -

  • 明確 − 算法應該是明確的,毫不含糊的。它的每個步驟(或相),和它們的輸入/輸出的應明確和必須導致只有一個意思

  • 輸入 − 算法應該具有0個或多個明確定義的輸入

  • 輸出 − 算法應該有1個或多個明確定義的輸出,並且應當匹配所需的輸出

  • 有限性 − 算法必須終止在有限的之後的步驟

  • 可能性 − 應當與可用資源是可行的

  • 獨立 − 算法應該有逐步的方向,應該是獨立於任何編程代碼

如何寫一個算法?

沒有用於寫入的算法定義明確的標準。相反,它是問題和資源依存。算法不是寫來支持特定的編程代碼。

我們知道,所有的編程語言共享基礎代碼結構,如循環(do, for, while),流程控制(if-else)等。這些常見的結構可用於寫一種算法。

我們以一步一個腳印的方式來寫算法,但它並非總是如此。算法的編寫是一個過程,是執行的明確定義的問題域之後。也就是說,我們應該知道問題域,爲此我們設計一個解決方案。

示例

讓我們嘗試用一個例子來學習算法的編寫。

問題 − 設計一個算法,兩個數字相加並顯示結果。

step 1 − START
step 2 − declare three integers a, b & c
step 3 − define values of a & b
step 4 − add values of a & b
step 5 − store output of step 4 to c
step 6 − print c
step 7 − STOP

算法告訴程序員如何編寫程序。可替代地,算法可以寫爲 −

step 1 − START ADD
step 2 − get values of a & b
step 3 − c ← a + b
step 4 − display c
step 5 − STOP

在設計和算法分析,通常第二個方法是,用於描述的算法。它可以很容易的分析算法忽略所有不必要的定義。可以觀察正在使用什麼操作方法以及該過程是流動的。

寫入步驟的數字是可選的。

我們設計一個算法,獲得特定問題的解決方案。問題可以有一個以上的方式解決。

one

因此,許多解決方案的算法可以衍生爲一個給定的問題。下一步就是分析這些提議解決方案的算法和實現最適合的。

算法分析

算法的效率可以在兩個不同的階段進行分析,實施前和實施後,如下所述 −

  • 先驗分析 − 這是一種算法的理論分析。算法的效率是通過假設所有其它因素,例如測量,處理器速度,是常數,對實施無影響。

  • 後驗分析 − 這是一種算法的實證分析。所選的算法使用編程語言來實現。這接着目標計算機的機器上執行。在這種分析中,實際統計像運行時間和所需的空間,會被收集。

我們將在這裏學習的先驗算法分析。算法分析與處理涉及的各種操作的執行或運行時間。操作的運行時間可以定義爲每操作來執行的計算機指令編號。

算法複雜度

假設X是一種算法,n是輸入數據的大小,所使用算法 X 的時間和空間是決定 X 的效率的兩個主要因素:

  • 時間因素 − 時間是通過計算鍵操作的數量來衡量,例如,在排序算法的比較

  • 空間因素 − 空間是通過計數,由算法所需的最大存儲器空間來測量。

在一個算法F(N)算法測量運行時間和/或存儲空間複雜性,輸入數據的規模是必需的。

空間複雜度

算法空間的複雜性表示存儲器空間由該算法在其生命週期所需的時間。算法所需的空間等於以下兩個要素的總和 −

  • 固定部件是存儲某些數據和變量,是獨立的問題的大小所需的空間。例如,簡單變量和常量在使用,程序大小等。

  • 可變部分是由變量所需要的空間,其大小取決於問題的大小。例如動態內存分配,遞歸棧空間等。

任何算法的 P 空間複雜度 S(P)是 S(P) = C + SP(I),其中 C 是固定部分和S(I)在算法中是可變部分這依賴於實例特徵 I 。下面是一個簡單的例子,試圖解釋這一概念 −

Algorithm: SUM(A, B)
Step 1 - START
Step 2 - C ← A + B + 10
Step 3 - Stop

在這裏,我們有三個變量A,B和C和一個常數。這裏 S(P)=1+3. 現在空間取決於數據類型定變量和常數類型,它會相應地相乘。

時間複雜度

算法的時間複雜度表示運行到完成算法所需的時間量。時間要求可以被定義爲一個數值函數 T(n), 這裏 T(n) 可測的步驟的數量,提供的每個步驟消耗恆定的時間。

例如,增加了兩個n位整數需要n步。因此,總的計算時間是 T(n)= c*n, 這裏 c 是採取另外兩個比特的時間。這裏可以觀察到 T(n)的線性增長作爲輸入大小增加。