算法与数据结构_数据结构与算法专题--算法基本概念
很多開發(fā)者都知道“程序=數(shù)據(jù)結(jié)構(gòu)+算法”這個著名的公式,并不真正明白算法的定義或概念。究竟什么是算法呢?從字面意義上理解,算法即用于計算的方法,通過這種方法可以達(dá)到預(yù)期的計算結(jié)果。
1.算法的特征
有窮性:算法的指令或步驟的執(zhí)行次數(shù)是有限的,執(zhí)行時間也是有限的。確切性:算法的每一個指令或步驟都必須又明確的定義和描述。輸 入:一個算法應(yīng)該又相應(yīng)的輸入條件,用來刻畫運(yùn)算對象的初始情況。輸 出:一個算法應(yīng)該又明確的結(jié)果輸出。這是容易理解的,因為沒有得到結(jié)果的算法毫無意義。可行性:算法的執(zhí)行步驟必須是可行的,且可以在有限時間內(nèi)完成。2.算法分類
1、按照應(yīng)用來分類
按照算法的應(yīng)用領(lǐng)域,即解決的問題,算法可以分為基本算法、數(shù)據(jù)結(jié)構(gòu)相關(guān)的算法、幾何算法、圖論算法、規(guī)劃算法、數(shù)值算法、數(shù)值分析算法、加密/解密算法、排序算法、查找算法、并行算法和數(shù)論算法等。
2、按照確定性來分類
按照算法結(jié)果的確定性來分類,算法可以分為確定性算法和非確定性算法。
- 確定性算法:這類算法在有限的時間內(nèi)完成計算,得到的結(jié)果是唯一的,且經(jīng)常取決于輸入值。
- 非確定性算法:這類算法在有限的時間內(nèi)完成計算,單是得到的結(jié)果往往不是唯一的,即存在多值性。
3、按照算法的思路來分類
按照算法的思路來分類,算法可以分為遞推算法、遞歸算法、窮舉算法、貪婪算法、分治算法、動態(tài)規(guī)劃算法和迭代算法等多種算法。
3.算法與數(shù)據(jù)結(jié)構(gòu)的關(guān)系
數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)的組織形式,可以用來表征特定的對象數(shù)據(jù)。在計算機(jī)程序設(shè)置中,操作的對象是各式各樣的數(shù)據(jù),這些數(shù)據(jù)往往擁有不同的數(shù)據(jù)結(jié)構(gòu),如數(shù)組、結(jié)構(gòu)體、聯(lián)合、指針和鏈表等。因為不同的數(shù)據(jù)結(jié)構(gòu)所采用的處理方法不同,計算的復(fù)雜度也不同,因材算法往往依賴于某種數(shù)據(jù)結(jié)構(gòu)。也就是說,數(shù)據(jù)結(jié)構(gòu)的算法實現(xiàn)的基礎(chǔ)。(程序=數(shù)據(jù)結(jié)構(gòu)+算法)
4.算法的性能評價
一個算法的優(yōu)劣往往通過算法復(fù)雜度來衡量,算法復(fù)雜度包括時間復(fù)雜度和空間復(fù)雜度兩個方面。
1、時間復(fù)雜度
時間復(fù)雜度即通常所說的算法執(zhí)行所需要耗費(fèi)的時間,時間越短,算法越好。一個算法執(zhí)行的時間往往無法精確估計,通常需要在實際的計算機(jī)中運(yùn)行才能夠知道。但是,也可以對算法的代碼進(jìn)行估計,而得到算法的時間復(fù)雜度。
2、空間復(fù)雜度
空間復(fù)雜度是指算法程序在計算機(jī)中執(zhí)行所消耗的存儲空間。空間復(fù)雜度可以分為如下兩個方面。
1)程序保存所需要的存儲空間,即程序大小。
2) 程序在執(zhí)行中所需要小號的存儲空間資源,如程序在執(zhí)行過程中的中間變量等。
一般來說,程序的大小越小,執(zhí)行過程中消耗的資源越少,這對程序就越好。
總結(jié)
以上是生活随笔為你收集整理的算法与数据结构_数据结构与算法专题--算法基本概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: V8 Promise源码全面解读
- 下一篇: 电脑剪贴板在哪里打开_这个小玩意让手机的