前端JavaScript數據結構和算法——基本概念

前端JavaScript數據結構和算法——基本概念

簡介:本部分主要是介紹數據結構和算法的基本概念,尤其是講解了時間複雜度,提及了空間複雜度。

第一部分:
1.數據結構基本概念
a.數據
數據是信息的載體,是描述事物屬性的數,字符串,以及所有能輸入到計算機中並被計算機識別和處理的符號集合
b.數據元素
數據元素是數據的基本單位,一個數據元素可由多個數據項構成
c.數據對象
是具有相同性質的數據元素的集合。是數據的一個子集
d.數據類型
數據類型是一個值的集合和定義在此集合上的一組操作的總稱
(1)原子類型:其值不能再分割的數據類型
(2)結構類型:其值可再分爲若干成分的數據類型
(3)抽象數據類型:抽象數據組織及相關操作
e.抽象數據類型
指的是一個數學模型及定義在該模型上的一組操作。(抽象數據類型的定義僅僅取決於它的一組邏輯特性,與其在計算機內如何表示和實現無關。也就是說不管他內部結構如何變化,只要他的數學特性不變,就不影響其外部使用),通常用(數據對象、數據關係、基本操作集)這樣三元組來表示抽象數據類型。
f.數據結構
任何問題中,數據元素都不是孤立的。他們之間的關係稱爲結構。也就是數據結構是相互之間存在一種或多種特定關係的數據元素的集合。一般包括這三個方面(邏輯結構、存儲結構、和數據的運算)。(數據的邏輯結構和存儲結構是密不可分的。一個算法的設計取決於所選定的邏輯結構,算法的實現依賴於所採用的存儲結構

2.數據結構三要素
a.邏輯結構
指的是數據之間的邏輯關係。與數據的存儲無關是獨立於計算機的。(一般分爲線性結構[例如:線性表]和非線性結構[例如集合、樹、圖])
(1)線性結構:數據之間只存在一對一的關係
(2)樹形結構:數據之間存在一對多的關係
(3)圖或網狀結構:數據之間存在多對多的關係
b.數據的存儲結構
即數據結構在計算機中的表示(物理結構),(數據的存儲結構是由計算機語言實現的邏輯結構(比如JavaScript),依賴於計算機語言),數據的存儲結構主要有:順序存儲、鏈式存儲、索引存儲、散列存儲

第二部分:

3.算法
算法是對特定問題求解步驟的一種描述
算法5特性如下:
a.有窮性
b.確定性
c.可行性
d.輸入
e.輸出

4.時間複雜度
一條語句的頻度是指該語句在算法中被重複執行的次數。算法中所有語句的頻度之和記爲T(n),他是問題規模n的函數。時間複雜度主要是分析T(n)的數量級。因爲算法中基本運算的頻度與T(n)通數量級,所以採用算法基本運算頻度f(n)來分析算法的時間複雜度。

一般有一條準則就是:一般是考慮最壞時間複雜度,以保證算法的運行時間不會比它更長。
時間複雜度的加法規則:T(n,m)=T1(n)+T2(n)=O(max(f(n),g(m))
時間複雜度的乘法規則:
(1)T(n,m)=T1(n)∗T2(m)=O(f(n)∗g(m))T(n,m)=T1(n)∗T2(m)=O(f(n)∗g(m))
(2)O(n)∗O(m)=O(n∗m

常見的漸進的時在這裏插入代碼片間複雜度爲:O(1)<O(log2n)<O(n)<O(nlog2n)<O(n²)<O(n³)<O(2ⁿ)<O(n!)<O(nⁿ)

5.時間複雜度的實例分析:

//分析函數text1的時間複雜度
function test1(n){
    let a = 1;
    while(a<=n){
        a = a*2;
    }
}
//分析函數text2的時間複雜度
function test2(n){
    let a = 1
    for(let i = 0;i<n;i++){
        a ++;
    }
}

首先分析函數test1。
設執行a= a * 2 這條語句執行了t次,根據a = a*2,a=1 有a= 2^t那麼又while中的條件可知 2^t = n;推出t = log2n 因此次函數的時間複雜度爲O(log2n)

函數test1就比較簡單了,a++這條語句一直執行n次因此時間複雜度爲O(n)

//分析其時間複雜度
function test3(n){
    let i = 0,sum = 0;
    while(sum<n){
        sum += ++i;
        return i;
    }
}

test3函數的時間複雜度是O(n^(1/2));具體解決見下期(js算法——數組(線性表))

5.空間複雜度
空間複雜度是指:算法的空間複雜度S(n)定義爲該算法所耗費的存儲空間。他是問題規模n的函數。(一般來說:一段程序除了本身所用的指令、常數、變量、和輸入數據以外,還需要一些對數據進行操作的工作單元和存儲爲實現計算所需要的一些信息的輔助空間,比如遞歸是常見的空間複雜度很高的一種場景)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章