本篇部落格主要介紹資料結構和演算法的對應概念,以及**的時間複雜度(ti)和空間複雜度(si)。
1.資料結構的概念
首先說說資料結構定義,官方的話是這麼說的。
而用言簡意賅的方法來說,就是研究資料元素
相互之間的特定關係。
而資料結構分為邏輯結構和物理結構。
邏輯結構:資料物件中資料元素之間的相互關係。(重要)
物理結構:資料的邏輯結構在計算機中的儲存形式。
邏輯結構又分為4種:集合結構(從屬同一集合)、線性結構(一對一)、樹形結構(一對多)以及圖形結構(多對多)
而物理結構研究的實質上就是資料元素的儲存,分為順序儲存結構和鍊錶儲存結構
順序儲存結構:相當於陣列,每個元素依次排列。
鍊錶儲存結構:把資料元素存放在任意的儲存單元中,在這種情況下每乙個元素需要乙個
具體的位址用以訪問這個元素。
2.演算法的概念
演算法與資料結構的關係是密不可分的,先用乙個例子來闡述演算法的優越性。
在計算1+2+……+100時,很多時候用的是for迴圈,如下圖左;但是如果使用以下演算法,運算速度將會快很多,如下圖右所示。
由上例引出演算法的定義:演算法是解決特定問題求解步驟的描述,
從實用角度來看就是減少複雜度的一些技巧。
演算法有如下幾個特性:輸入、輸出、有窮性、確定性和可行性。分開進行闡述。
輸入:演算法有0個或者多個輸入。
輸出:演算法至少有1個或多個輸出。
有窮性:在執行有限步驟後,自動結束,不會無窮執行。
確定性:每個步驟都有確定的含義。
可行性:每一步都是可行的。
在開發過程中,演算法需要滿足一些具體的要求,分為4個階段,逐級遞增。也是對演算法是否完備的檢驗。
沒有語法錯誤。
對於合法輸入能產生滿足要求輸出。
對於非法輸入能產生提示說明。
對於各種輸入都有滿足要求的輸出結果。
3.時間複雜度和空間複雜度
在演算法設計中,需要考慮時間效率和空間效率,即
時間效率高(執行快)以及
儲存量低(冗餘小),這就涉及到ti(時間複雜度)和si(空間複雜度),這也是很多學科中涉及到的效率指標。
3.1時間複雜度
時間複雜度:在這裡用簡單的方法解釋一下。就是隨著輸入的增多,執行時間的增長速率。增長速率最慢的演算法為最優演算法。時間複雜度用o(n)表示。
例如下圖中的三個演算法的時間複雜度分別為:
藍色:o(1)
紅色:o(n)
黑色:o(n^2)
在分析時間複雜度時,可以運用簡化思想。
在下圖左中,雖然執行了7條語句,但都是單語句,無迴圈巢狀等功能,複雜度是o(1)
在下圖右中,在for迴圈語句塊中執行了n次,總的執行次數是n+1次,在衡量複雜度時,
只需考慮最高端,最高端前的係數可以忽略,因此複雜度為o(n)
在下圖左中,由於加入了巢狀迴圈,總執行次數是n^2+1次,複雜度為o(n^2)
在下圖右中,每次執行後i的值變為原來的2倍,因此只要2^x>=n即可,解出n=log2n(2為底數),因此複雜度為o(logn)
常用的時間複雜度表以及對應關係如下。
3.2 空間複雜度
空間複雜度與時間複雜度的關係是相互矛盾的,其中乙個提高的結果會使另乙個的效果降低,因此如何平衡也是乙個具體運用中需要權衡的點。
空間複雜度的定義如下:
舉個簡單的例子,在判斷某一年是否是閏年的時候,可以採用普通的演算法進行判斷 ;也可以新建乙個上千個元素的陣列,把所有年份是否是閏年的結果儲存在陣列中。
前者節約了空間複雜度,但是每次查詢都要經過計算,空間複雜度增大。
後者只需要提供乙個陣列的索引值即可返回判斷結果,雖然空間複雜度大,但是時間複雜度小。
資料結構與演算法學習筆記 (1) 基本概念
資料結構 演算法 程式 資料結構是計算機儲存 組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。演算法 algorithm 是解決特定問題的步驟的描述,是解決問題的思想方法。程式是計算機語言的具體實現。說明 資料 表 資料元素 一行資料 資料項 表中乙個元素 資料型別 表的...
資料結構與演算法(一) 基本概念
輸入,輸出,有窮性,確定性和可行性。好的演算法,應該具有正確性 可讀性 健壯性 高效率和低儲存量的特徵。1.事後統計方法 缺陷 必須預先編制程式,浪費時間精力 比較以來硬體和環境等因素 演算法的測試資料設計困難,還有規模問題。2.事前分析估算法 在計算機程式編制前,依據統計方法對演算法進行估算。乙個...
資料結構與演算法基本概念
一 基本資料結構 基本資料結構的定義 特性 運算 演算法。基本資料結構的分類 邏輯結構 1 線性結構 線性表 棧 佇列 雙佇列 陣列 廣義表 串 2 非線性結構 樹 二叉樹 圖 網 儲存結構 1 順序儲存 向量 一維陣列 2 鏈式儲存 鍊錶 二 演算法 查詢 順序 折半 分塊 雜湊 二叉排序樹 排序...