程式設計師每天都在使用的 資料結構 演算法

2021-10-04 11:38:30 字數 2639 閱讀 3687

經常能夠聽到這樣的聲音,都知道資料結構重要,但是開發中,幾乎用不到。其實我們每天都在用,只是不關注。或者說換成了另外的一種形式,比如stl。

還記得這個經典公式嗎?

程式=演算法+資料結構

**資料結構定義:**資料結構是一種儲存和組織資料的方式,以便於訪問和修改。資料結構包括資料的邏輯結構、資料的儲存結構以及資料的運算,即按照某種邏輯關係組織起來的一批資料,按一定的對映方式把它存放在計算機的儲存器中,並在這些資料上定義了乙個運算的集合。

演算法定義

計算機求解乙個問題所需的一系列步驟

演算法的基本特性:

輸入:乙個演算法有0個或者多個輸入,以刻畫運算物件的初始情況,所謂0個輸入是指演算法本身給出了初始條件;

輸出:乙個演算法有乙個或多個輸出,以反映對輸入資料加工後的結果。沒有輸出的演算法是毫無意義的;

有窮性:演算法必須能在執行有限個步驟之後終止;

確切性:演算法的每一步驟必須有確切的定義;

可行性:演算法中執行的任何計算步驟都是可以被分解為基本的可執行的操作步,即每個計算步都可以在有限時間內完成。

演算法設計的要求:

正確性:設計的演算法能滿足具體問題的需求,並且任何合法的輸入都會得出正確的輸出;

可讀性:是指演算法被寫好之後,該演算法理解的難易程度,乙個演算法可讀性的好壞十分重要。如果乙個演算法比較抽象且難以理解,那麼這個演算法就不利於交流和推廣使用,對於修改、擴充套件、維護來說都十分不方便,因此,在追求高效的同時,也應是演算法盡量簡明易懂。

健壯性:當輸入資料非法時,演算法也會做出相應的判斷,而不會因為輸入的錯誤而造成癱瘓。

時間效率高(時間複雜度)和需要的儲存空間少(空間複雜度)

時間複雜度:

程式大概的執行次數(不是執行時間)。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度

空間複雜度:

該演算法所耗費的儲存空間,它也是問題規模n的函式。其是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。乙個演算法在計算機儲存器上所占用的儲存空間,包括儲存演算法本身所占用的儲存空間,演算法的輸入輸出資料所占用的儲存空間和演算法在執行過程中臨時占用的儲存空間這三個方面。

經常能夠聽到這樣的聲音,都知道資料結構重要,但是開發中,幾乎用不到。其實我們每天都在用,只是不關注。或者說換成了另外的一種形式,比如stl。

還記得這個經典公式嗎?

程式=演算法+資料結構

**資料結構定義:**資料結構是一種儲存和組織資料的方式,以便於訪問和修改。資料結構包括資料的邏輯結構、資料的儲存結構以及資料的運算,即按照某種邏輯關係組織起來的一批資料,按一定的對映方式把它存放在計算機的儲存器中,並在這些資料上定義了乙個運算的集合。

演算法定義

計算機求解乙個問題所需的一系列步驟

演算法的基本特性:

輸入:乙個演算法有0個或者多個輸入,以刻畫運算物件的初始情況,所謂0個輸入是指演算法本身給出了初始條件;

輸出:乙個演算法有乙個或多個輸出,以反映對輸入資料加工後的結果。沒有輸出的演算法是毫無意義的;

有窮性:演算法必須能在執行有限個步驟之後終止;

確切性:演算法的每一步驟必須有確切的定義;

可行性:演算法中執行的任何計算步驟都是可以被分解為基本的可執行的操作步,即每個計算步都可以在有限時間內完成。

演算法設計的要求:

正確性:設計的演算法能滿足具體問題的需求,並且任何合法的輸入都會得出正確的輸出;

可讀性:是指演算法被寫好之後,該演算法理解的難易程度,乙個演算法可讀性的好壞十分重要。如果乙個演算法比較抽象且難以理解,那麼這個演算法就不利於交流和推廣使用,對於修改、擴充套件、維護來說都十分不方便,因此,在追求高效的同時,也應是演算法盡量簡明易懂。

健壯性:當輸入資料非法時,演算法也會做出相應的判斷,而不會因為輸入的錯誤而造成癱瘓。

時間效率高(時間複雜度)和需要的儲存空間少(空間複雜度)

時間複雜度:

程式大概的執行次數(不是執行時間)。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度

空間複雜度:

該演算法所耗費的儲存空間,它也是問題規模n的函式。其是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。乙個演算法在計算機儲存器上所占用的儲存空間,包括儲存演算法本身所占用的儲存空間,演算法的輸入輸出資料所占用的儲存空間和演算法在執行過程中臨時占用的儲存空間這三個方面。

程式設計師資料結構筆記2

第二天 轉眼又過了一周了,前面一周裡面我編了一些程式 鍊錶,長整型數相加,三元組表轉置以及一些簡單的函式.其實有些演算法想想是很簡單,不過寫起來還是需要一定耐心和c基礎的,如果你自己覺得各演算法都很懂了,不妨開機編編試試.或許會有一些新的發現與體會.棧和佇列 1 知識點 棧的定義 操作受限的線性表 ...

程式設計師資料結構筆記4

第四天 列舉 揹包問題 列舉策略 1 可能的方案 2n 2 對每一方案進行判斷.列舉法一般流程 while 還有其他可能方案 列舉策略 例 把所有排列列舉出來 p6 6 min 123456 max 654321 a1a2a3a4a5a6 下一排列 比如 312654的下和種情況 314256 遞迴...

程式設計師每天該做的事

1 總結自己一天任務的完成情況 最好的方式是寫工作日誌,把自己今天完成了什麼事情,遇見了什麼問題都記錄下來,日後翻看好處多多 好記性不如爛筆頭。呵呵 2 考慮自己明天應該做的主要工作 把明天要做的事情列出來,並按照優先順序排列,第二天應該把自己效率最高的時間分配給最重要的工作 worklist。計畫...