数据结构(二)算法基础与复杂度
一、算法基礎(chǔ)
1.算法是解決特定問(wèn)題求解步驟的描述,在計(jì)算機(jī)中表現(xiàn)為指令的有限序列,并且每條指令表示一個(gè)或多個(gè)操作。
2.算法具有五個(gè)基本特性:輸入、輸出、有窮性、確定性和可行性。
(1)輸入輸出:算法具有零個(gè)或多個(gè)輸入,但是至少有一個(gè)或多個(gè)輸出。
(2)有窮性:指算法在執(zhí)行有限的步驟之后,自動(dòng)結(jié)束而不會(huì)出現(xiàn)無(wú)限循環(huán),并且每一個(gè)步驟在可接受的時(shí)間內(nèi)完成。
(3)確定性:算法的每一步驟都具有確定的含義,不會(huì)出現(xiàn)二義性。
(4)可行性:算法的每一步都必須是可行的,也就是說(shuō),每一步都能夠通過(guò)執(zhí)行有限次數(shù)完成。
3.算法設(shè)計(jì)的要求:正確性、可讀性、健壯性、時(shí)間效率高和存儲(chǔ)量低
(1)正確性:是指算法至少應(yīng)該具有輸入、輸出和加工處理無(wú)歧義性、能正確反映問(wèn)題的需求、能夠得到問(wèn)題的正確答案。
- 算法程序沒(méi)有語(yǔ)法錯(cuò)誤。
- 算法程序?qū)τ诤戏ǖ妮斎霐?shù)據(jù)能夠產(chǎn)生滿足要求的輸出結(jié)果。
- 算法程序?qū)τ诜欠ǖ妮斎霐?shù)據(jù)能夠得出滿足規(guī)格說(shuō)明的結(jié)果。
- 算法程序?qū)τ诰倪x擇的,甚至刁難的測(cè)試數(shù)據(jù)都有滿足要求的輸出結(jié)果。
(2)可讀性:算法設(shè)計(jì)的另一目的是為了便于閱讀、理解和交流。
(3)健壯性:當(dāng)輸入數(shù)據(jù)不合法時(shí),算法也能做出相關(guān)處理,而不是產(chǎn)生異常或莫名其妙的結(jié)果。
(4)時(shí)間效率高和存儲(chǔ)量低:對(duì)于同一個(gè)問(wèn)題,如果有多個(gè)算法能夠解決,執(zhí)行時(shí)間短的算法效率高,程序運(yùn)行時(shí)所占用的內(nèi)存或外部硬盤(pán)存儲(chǔ)空間少的存儲(chǔ)量低。
4.算法效率的度量方法
(1)事后統(tǒng)計(jì)方法:通過(guò)設(shè)計(jì)好的測(cè)試程序和數(shù)據(jù),利用計(jì)算機(jī)計(jì)時(shí)器對(duì)不同算法編制的程序的運(yùn)行時(shí)間進(jìn)行比較,從而確定算法效率的高低。
(2)事前分析估算方法:在計(jì)算機(jī)程序編制前,依據(jù)統(tǒng)計(jì)方法對(duì)算法進(jìn)行估算。一個(gè)用高級(jí)程序語(yǔ)言編寫(xiě)的程序在計(jì)算機(jī)上運(yùn)行時(shí)所消耗的時(shí)間取決于下列因素:①算法采用的策略、方法。②編譯產(chǎn)生的代碼質(zhì)量。③問(wèn)題的輸入規(guī)模。④機(jī)器執(zhí)行指令的速度。
二、算法時(shí)間復(fù)雜度`
1.定義:在進(jìn)行算法分析時(shí),語(yǔ)句總的執(zhí)行次數(shù)T(n)是關(guān)于問(wèn)題規(guī)模n的函數(shù),進(jìn)而分析T(n)隨n的變化情況并確定T(n)的數(shù)量級(jí)。算法的時(shí)間復(fù)雜度,也就是算法的時(shí)間度量度,記作:T(n) = O(f(n))。它表示隨問(wèn)題規(guī)模n的增大,算法執(zhí)行時(shí)間的增長(zhǎng)率和f(n)的增長(zhǎng)率相同,稱作算法的漸進(jìn)時(shí)間復(fù)雜度,簡(jiǎn)稱為時(shí)間復(fù)雜度。其中f(n)是問(wèn)題規(guī)模n的某個(gè)函數(shù)。
2.推到大O階的方法:①用常數(shù)1取代運(yùn)行時(shí)間中的所有加法常數(shù)。②在修改后的運(yùn)行次數(shù)函數(shù)中,只保留最高階項(xiàng)。③如果最高階項(xiàng)存在且不是1,則去除于這個(gè)項(xiàng)相乘的常數(shù)。
3.算法時(shí)間復(fù)雜度可以分為:O(1)常數(shù)階、O(n)線性階、O(n^2)平方階、O(log2n)對(duì)數(shù)階、O(mxn)平方階變體。?
?
三、算法空間復(fù)雜度
1.算法的空間復(fù)雜度通過(guò)計(jì)算算法所需的存儲(chǔ)空間實(shí)現(xiàn),算法空間復(fù)雜度的計(jì)算公式記作:S(n) = O(f(n)),其中n為問(wèn)題的規(guī)模,f(n)為語(yǔ)句關(guān)于n所占存儲(chǔ)空間的函數(shù)。
2.當(dāng)不限定詞地使用“復(fù)雜度”時(shí),通常都是指時(shí)間復(fù)雜度。
轉(zhuǎn)載于:https://www.cnblogs.com/BigJunOba/p/9173593.html
總結(jié)
以上是生活随笔為你收集整理的数据结构(二)算法基础与复杂度的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: nginx核心模块常用指令
- 下一篇: get_called_class与get