十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
程序=數(shù)據(jù)結(jié)構(gòu)+算法
1.數(shù)據(jù)、數(shù)據(jù)元素、數(shù)據(jù)項和數(shù)據(jù)對象
2.數(shù)據(jù)結(jié)構(gòu)
3.數(shù)據(jù)類型和抽象數(shù)據(jù)類型
4.算法及算法分析
數(shù)據(jù)結(jié)構(gòu):如何用數(shù)據(jù)正確地描述現(xiàn)實世界的問題,并存入計算機
算法:如何高效地處理這些數(shù)據(jù),以解決實際問題
1.數(shù)據(jù)、數(shù)據(jù)元素、數(shù)據(jù)項和數(shù)據(jù)對象(1)數(shù)據(jù)(Data):是客觀事物的符號表示,是所有能輸入計算機中并能夠被計算機程序處理的符號的總稱。如:整數(shù)、實數(shù)、字符、字符串及多媒體程序處理的圖形、圖像、聲音及動畫等通過特殊編碼定義后的數(shù)據(jù)。
(2)數(shù)據(jù)元素(Data Element):是數(shù)據(jù)的基本單位,數(shù)據(jù)元素用于完整地描述一個對象,如圖中的一個頂點,樹中棋盤的一個狀態(tài)。
(3)數(shù)據(jù)項(Data Item):是組成數(shù)據(jù)元素的、有獨立含義的、不可分割的最小單位。如:學生表中的學生姓名,學號等都是數(shù)據(jù)項。
(4)數(shù)據(jù)對象(Data Object):是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個子集。如:C={‘A’,‘B’,‘C’,‘a(chǎn)’,‘b’,‘c’}。
2.數(shù)據(jù)結(jié)構(gòu)含義:數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。換句話說,數(shù)據(jù)結(jié)構(gòu)是帶“結(jié)構(gòu)”的數(shù)據(jù)元素的集合,“結(jié)構(gòu)”指數(shù)據(jù)元素之間存在的關(guān)系。數(shù)據(jù)結(jié)構(gòu)包括邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)。
(1)邏輯結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)有兩個要素:一是數(shù)據(jù)元素;二是關(guān)系,關(guān)系是指數(shù)據(jù)元素間的邏輯關(guān)系。根據(jù)數(shù)據(jù)元素之間關(guān)系的不同特性,數(shù)據(jù)的邏輯結(jié)構(gòu)通常有:
下面4種結(jié)構(gòu)中所舉的示例是以某班級學生作為數(shù)據(jù)對象(數(shù)據(jù)元素是學生的學籍檔案記錄),來分別考察數(shù)據(jù)元素之間的關(guān)系。
其中,集合結(jié)構(gòu)、樹結(jié)構(gòu)、圖結(jié)構(gòu)或網(wǎng)狀結(jié)構(gòu)都屬于非線性結(jié)構(gòu)。
線性結(jié)構(gòu):線性表、棧和隊列、字符串、數(shù)組、廣義表;
非線性結(jié)構(gòu):樹結(jié)構(gòu)(樹和二叉樹),圖結(jié)構(gòu)(無向圖和有向圖),集合結(jié)構(gòu)。
(2)存儲結(jié)構(gòu):數(shù)據(jù)對象在計算機中的存儲結(jié)構(gòu)表示稱為數(shù)據(jù)的存儲結(jié)構(gòu),也稱為物理結(jié)構(gòu)。數(shù)據(jù)的存儲結(jié)構(gòu)分為:
若采用順序存儲結(jié)構(gòu),則各個元素在物理上必須是連續(xù)的;若采用非順序存儲結(jié)構(gòu),則各個元素在物理上可是是離散的。
數(shù)據(jù)的存儲結(jié)構(gòu)會影響存儲空間分配的方便程度。
數(shù)據(jù)的存儲結(jié)構(gòu)會影響對數(shù)據(jù)運算的速度。
(3)數(shù)據(jù)運算:施加于數(shù)據(jù)的操作。如對一張表格的查找、增加、修改、刪除記錄的工作。運算不僅僅是加減乘除,還包括算法。算法的實現(xiàn)是與數(shù)據(jù)的存儲結(jié)構(gòu)密切相關(guān)的。
運算的定義是針對邏輯結(jié)構(gòu)的,指出運算的功能;運算的實現(xiàn)是針對存儲結(jié)構(gòu)的,指出運算的具體操作步驟。
3.數(shù)據(jù)類型和抽象數(shù)據(jù)類型(1)數(shù)據(jù)類型:是一個值的集合和定義在此集合上的一組操作的總稱。
(2)抽象數(shù)據(jù)類型(ADT):一般指用戶定義的、表示應(yīng)用問題的數(shù)學模型,以及定義在這個模型上的一組操作的總稱,具體包括3個部分:數(shù)據(jù)對象、數(shù)據(jù)對象上關(guān)系的集合以及對數(shù)據(jù)對象的基本操作的集合。
定義一個抽象數(shù)據(jù)類型就是在“定義”一種數(shù)據(jù)結(jié)構(gòu);確定了抽象數(shù)據(jù)類型的存儲結(jié)構(gòu),才能“實現(xiàn)”這種數(shù)據(jù)結(jié)構(gòu)。
4.算法及算法分析(1)算法的定義:為解決某類問題而規(guī)定的一個有限長的操作序列。(換一種說法則是對特定問題求解步驟的一種描述)例如:要解決的問題是做番茄炒蛋,食材則是數(shù)據(jù)結(jié)構(gòu),步驟則為算法。
(2)算法的特性:
算法可以沒有輸入但一定要有輸出。
(3)“好”算法的特性:
(4)時間復雜度O(f(n))
衡量算法效率的方法有事后統(tǒng)計法和事前分析估算法(常用)
問題規(guī)模:不考慮計算機的軟硬件等環(huán)境因素,影響算法時間代價的最主要因素是問題的規(guī)模。
語句頻度:一條語句重復執(zhí)行的次數(shù)
一個算法的執(zhí)行時間大致上等于其所有語句執(zhí)行時間的總和,而語句的執(zhí)行時間則為該條語句的重復執(zhí)行次數(shù)和執(zhí)行一次所需時間的乘積。
常見的時間復雜度按數(shù)量級遞增排隊一次為:
如何計算步驟:
例:1:常量階示例
{
x++;
s=0;
}
兩條語句頻度均為 1,算法的執(zhí)行時間是一個與問題規(guī)模 n 無關(guān)的常數(shù),所以算法的時間復雜度為T(n)= O(1),稱為常量階。
實際上,如果算法的執(zhí)行時間不隨問題規(guī)模n的增長而增長,算法中語句頻度就是某個常數(shù)。即使這個常數(shù)再大,算法的時間復雜度都是O(1)。例如,對上面的程序進行如下改動:
for(i=0;i<10000;i++)
{
x++;
s=0;
}
算法的時間復雜度仍然為O(1)。
例2:線性階示例
for(i=0;i
循環(huán)體內(nèi)兩條基本語句的頻度均為n)=n,所以算法的時間復雜度為T)= O),稱為線性階
例3:平方階示例
x=0;y=0;
for(k=1;k<=n;k++)
x++;
for(i=l;i<=n;i++)
for(j=1;j<=n;j++)
y++;
對循環(huán)語句只需考慮循環(huán)體中語句的執(zhí)行次數(shù),以上程序段中頻度大的語句是(6),其頻度為(n)=n^2,所以該算法的時間復雜度為T(n)= O(n^2),稱為平方階。
例4:立方階示例
x=1;
for(i=l;i<=n;i++)
for(j=l;j<=i;j++)
for(k=1;k<=j;k++)
x++;
則該算法的時間復雜度為T(n)= 0(n^3),稱為立方階
例5:對數(shù)階示例
for(i=1;i<=n;i=i*2)
{
x++;
s=0;
}
算法的時間復雜度為T(n)= O(log2^n),稱為對數(shù)階。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧