1.什么是算法?算法有哪些特征?
答:算法是求解問題的一系列計算步驟。算法具有有限性、確定性、可行性、輸入性和輸出性5個重要特征。
2.算法設計應滿足的幾個目標
答:算法設計應滿足正確性、可使用性、可讀性、健壯性和高效率與低存儲量需求。
3.算法設計的基本步驟
答:算法設計的基本步驟是:
(1)分析求解問題
(2)選擇數據結構和算法設計策略
(3)描述算法
(4)證明算法正確性
(5)算法分析
各步驟之間存在循環和反復過程。
4.什么是算法復雜性?它主要有哪兩個方面構成?
答:算法復雜性是算法運行時所需要的計算機資源的量,它包括兩個方面:時間復雜性(需要時間資源的量)和空間復雜性(需要空間資源的量) 。
5.分析算法復雜性的意義是什么?
算法的復雜性是算法效率的度量,是評價算法優劣的重要依據。一個算法的復雜性的高低體現在運行該算法所需要的計算機資源的多少上面,所需的資源越多,我們就說該算法的復雜性越高;反之,所需的資源越低,則該算法的復雜性越低。
6.f(n)=O(g(n))
答:f(n)=O(g(n))當且僅當存在正常量c和n0,使當n≥n0時,f(n)≤cg(n),即g(n)為f(n)的上界。
7.f(n)=W(g(n))
答:f(n)=W(g(n))當且僅當存在正常量c和n0,使當n≥n0時,f(n)≥cg(n),即g(n)為f(n)的下界。
8.f(n)=Q(g(n))
答:f(n)=Q(g(n))當且僅當存在正常量c1、c2和n0,使當n≥n0時,有c1g(n)≤f(n)≤c2g(n),即g(n)與f(n)的同階。
9.算法的平均情況、最好情況、最壞情況,哪種情況的可操作性最好,最具有實際價值?
答:設一個算法的輸入規模為n,Dn是所有輸入的集合,任一輸入I∈Dn,P(I)是I出現的概率,有 =1,T(I)是算法在輸入I下所執行的基本語句次數,則該算法的平均執行時間為:A(n)=
算法的最好情況為:G(n)= ,是指算法在所有輸入I下所執行基本語句的最少次數。
算法的最壞情況為:W(n)= ,是指算法在所有輸入I下所執行基本語句的最大次數。
可操作性最好、最具有實際價值的是最壞情況下的時間復雜性。最壞情況時間復雜性是規模為n的所有輸入中,基本運算執行次數最多的時間復雜性。
10.按照漸進階從低到高的順序排列以下表達式:
4n2 , logn, 3n , 20n, n2 / 3
又n!應該排在哪一位?
答:順序: logn<n2/3<20n<4n2<3n ;n!應排在后一位。
11.證明: 10n2 + 4n + 2 = O(n2)
證明:設n0 = 5,則當n≥n0,f(n) = 10n2 + 4n + 2≤11n2,所以f(n) = O(n2)。
12.采用直接推導方法求解以下遞歸方程:
T(1)=1 當n=1
T(n)=T(n-1)+n 當n>1
解:
T(n)=T(n-1)+n
=[T(n-2)+n-1)]+n
=T(n-2)+n+(n-1)
=T(n-3)+n+(n-1)+(n-2)
…
=T(1)+n+(n-1)+…+2
=n+(n-1)+ +…+2+1
=n(n+1)/2
=O(n2)。
13.(1)假設某算法在輸入規模為n時的計算時間為T(n)=3*2n。該算法在計算機A上完成輸入規模為n時運行時間為t秒。計算機B的運行速度為計算機A的64倍,那么該算法在計算機B上t秒內能夠完成的問題規模是多大?
(2)假設某算法在輸入規模為n時的計算時間為T(n)=2n,該算法在計算機A上完成輸入規模為n時運行時間為t秒。計算機B的運行速度為計算機A的64倍,那么該算法在計算機B上t秒內能夠完成的問題規模是多大?
(3)假設某算法在輸入規模為n時的計算時間為T(n)=8,該算法在計算機A上完成輸入規模為n時運行時間為t秒。計算機B的運行速度為計算機A的64倍,那么該算法在計算機B上t秒內能夠完成的問題規模是多大?
答:
(1)假設在計算機A上t秒內完成的基本運算的次數=3*2n
則在計算機B上t秒內完成的基本運算的次數=64*3*2n=26*3*2n=3*2(n+6)
所以該算法在計算機B上t秒內能夠完成的問題規模為n+6。
(2)假設在計算機A上t秒內完成的基本運算的次數=n2
則在計算機B上t秒內完成的基本運算的次數=64* n2=82*n2=(8n)2
所以該算法在計算機B上t秒內能夠完成的問題規模為8n
(3)由於T(n)是常數,因此算法可解任意規模的問題。
14.XYZ公司宣研制的微處理器運行速度為ABC公司同類產品的100倍。對於計算復雜性分別為n,n2,n3的各算法,若用ABC公司的計算機能在t時間內解輸入規模為n的問題,那么用XYZ公司的計算機在t時間內分別能解輸入規模為多大的問題?
答:
ABC公司的計算機能在t時間內解輸入規模為n的問題,則XYZ公司的計算機在t時間內100n問題。
ABC公司的計算機能在t時間內解輸入規模為n2的問題,則XYZ公司的計算機在t時間內100n2問題,所以,若ABC公司的計算機能在t時間內解輸入規模為n的問題,則XYZ公司的計算機在t時間內10n問題。
ABC公司的計算機能在t時間內解輸入規模為n3的問題,則XYZ公司的計算機在t時間內100n3問題,所以,若ABC公司的計算機能在t時間內解輸入規模為n的問題,則XYZ公司的計算機在t時間內1001/3n=4.64n問題。
15.解決某問題有三種算法,復雜性分別為1000N,10N2,2N ,在一台機器上可處理問題的規模分別為S1,S2,S3。若機器速度提高到原來的10倍,問在同樣時間內可處理問題的大小如何?答:
復雜性 原來處理問題規模 速度提高以后
1000N S1 10S1
10N2 S2 3.16S2
2N S3 S3+log10≈S3+3.32
16.問題P的算法復雜度為T(n)=n3(毫秒),現改善為T(n)=n2(毫秒)。問原來運行一小時的問題實例,現在要運行多少時間?
答:設實例的規模大小為n,
則 n3=3600*1000
n=153.3
∴ 現在需要時間t=153.32毫秒≈ 23.5秒
17.遞歸
答:在定義一個過程或函數時出現調用本過程或本函數的成分,稱之為遞歸。
18.第一數學歸納法原理
答:第一數學歸納法原理:若{P(1),P(2),P(3),P(4),…}是命題序列且滿足以下兩個性質,則所有命題均為真:
(1)P(1)為真。
(2)任何命題均可以從它的前一個命題推導得出。
19.第二數學歸納法原理
答:第二數學歸納法原理:若{P(1),P(2),P(3),P(4),…}是滿足以下兩個性質的命題序列,則對於其他自然數,該命題序列均為真:
(1)P(1)為真。
(2)任何命題均可以從它的前面所有命題推導得出。
20.窮舉法的基本思想
答:窮舉法的基本思想是對問題的所有可能狀態一一測試,直到找到解或將全部可能狀態都測試為止。
21.使用窮舉法的幾種情況
答:(1)搜索所有的解空間,(2)搜所有的路徑,(3)直接計算,(4)模擬和仿真。
22.簡述分治法的基本思想。
分治法的基本思想是:將一個規模為n的問題分解為k個規模較小的子問題,這些子問題互相獨立且與原問題相同;對這k個子問題分別求解。如果子問題的規模仍然不夠小,則再划分為k個子問題,如此遞歸的進行下去,直到問題規模足夠小,很容易求出其解為止;將求出的小規模的問題的解合並為一個更大規模的問題的解,自底向上逐步求出原來問題的解。
23.分治法所能解決的問題所具備的特征
答:分治法所能解決的問題一般具有以下幾個特征:
(1)該問題的規模縮小到一定的程度就可以很容易地解決。
(2)該問題可以分解為若干個較小的相同問題。
(3)利用該問題分解出的子問題的解可以合並為該問題的解。
(4)該問題所分解的各個子問題是相互獨立的,即子問題之間不包括公共子問題。
24.二路歸並排序算法的基本思想是什么?
合並排序算法是用分治法的策略實現對n個元素進行排序的算法。基本思想是:將待排序元素分成大小大致相同的兩個子集,按照這種方法一直進行下去,直到每個子集中只有一個元素,然后自低向上逐步合並排序,最終合並成有序集合。
25.二分搜索算法、快速排序算法、線性時間選擇算法最壞情況下的時間復雜性各為多少?
答:二分搜索算法:最壞情況O(log2n)。
快速排序算法:最壞情況O(n2)。
線性時間選擇算法:最壞情況O(n)。
26.貪心法的基本思想
答:貪心法的基本思想是在對問題求解時總是做出在當前來看是最好的選擇,也就是說貪心法不從整體最優上加以考慮,所做出的僅是在某種意義上的局部最優。
27.貪心法求解的問題應具有的性質
答:能夠用貪心法求解的問題一般具有貪心選擇性質和最優子結構性質。
28.貪心選擇性質
答:貪心選擇性質是指所求問題的整體最優解可以通過一系列局部最優解的選擇來達到。
29.最優子結構性質
答:一個問題的最優解包含其子問題的最優解,則稱此問題具有最優子結構性質。
22.貪心法求解問題的基本過程。
答:貪心法求解問題的基本過程如下:
(1)建立數學模型來描述問題
(2)把求解的問題分成若干個子問題
(3)對每一子問題求解,得到子問題的局部最優解
(4)把子問題的局部最優解合成原來問題的一個解。
23.試比較貪心法與動態規划法。
答:貪心法:在當前狀態下做出局部最優選擇,然后求解此選擇之后的子問題。貪心選擇依賴於以往做出的選擇,但不受將來所作的選擇,即不依賴於子問題的解。
動態規划法:每步所作的選擇依賴於相關子問題的解,只有在解出相關子問題以后,才能做出選擇。
24.動態規划求解的問題應具有的性質
答:能采用動態規划求解的問題的一般要具有3個性質:(1)最優化原理,(2)無后效性,(3)有重疊子問題
25.無后效性
答:無后效性:即某階段狀態一旦確定,就不受以后決策的影響。
26.重疊子問題
答:即子問題之間不是獨立的,一個子問題在下一階段決策中可能被多次使用到。
27.動態規划設計的步驟
答:動態規划的設計都一般要經歷以下幾個步驟:(1)划分階段,(2)確定狀態和狀態變量,(3)確定決策並寫出狀態轉移方程,(4)尋找邊界條件。
28.請簡要闡述動態規划算法的本質。
答:動態規划的實質是分治思想和解決冗余,將問題分解為更小的、相似的子問題,並存儲子問題的解而避免計算重復的子問題。
29.設計動態規划算法的主要步驟是什么?
答::
(1)找出最優解的性質,並刻划其結構特征。
(2)遞歸地定義最優值。
(3)以自底向上的方式計算出最優值。
(4)根據計算最優值時得到的信息,構造最優解。
30.分治法與動態規划法的相同點和不同點是什么?
分治法與動態規划法的相同點是:將待求解的問題分解成若干個子問題,先求解子問題,然后從這些子問題的解得到原問題的解。兩者的不同點是:適合於用動態規划法求解的問題,經分解得到的子問題往往不是互相獨立的。而用分治法求解的問題,經分解得到的子問題往往是互相獨立的。
31.什么是回溯法?
答:在問題的解空間樹中,按深度優先策略,從根結點出發搜索解空間樹。算法搜索至解空間樹的任一結點時,先判斷該結點是否包含問題的解。如果肯定不包含,則跳過對以該結點為根的子樹的搜索,逐層向其祖先結點回溯;否則,進入該子樹,繼續按深度優先策略搜索。
32.請簡要描述回溯法的實現過程。用回溯法求解0/1背包問題、TSP問題、N皇后問題時,其各自的解空間樹各是什么形式?
答:實現過程:確定解空間的組織結構,然后從開始結點(根結點)出發,以深度優先方式搜索整個解空間。這個開始結點成為活結點,同時也成為當前的擴展結點。在當前擴展結點處,搜索向縱深方向移至一個新結點。這個新結點成為新的活結點,並成為擴展結點。否則如果在當前擴展結點處不能再向縱深方向移動,則當前擴展結點就成為死結點。此時,應往回移動(回溯)到最近的活結點處,並使該結點成為當前的擴展結點。回溯法按上述方式遞歸地在解空間中搜索,直到找到所要求的解或解空間中無活結點為止。
0/1背包:n+1層的子集樹,TSP問題:(n-1)!個葉節點的排列樹,N皇后問題:完全n叉樹。
33.用回溯法解題的步驟
答:用回溯法解題的一般步驟如下:(1)針對所給問題,確定問題的解空間樹,問題的解空間樹應至少包含問題的一個(最優)解。(2)確定結點的擴展搜索規則。(3)以深度優先方式搜索解空間樹,並在搜索過程中可以采用剪枝函數來避免無效搜索。
34.請簡述分支限界法的算法思想。
答:分支限界法的算法思想是在問題的解空間樹上以廣度優先或最小耗費(最大效益)優先方式搜索問題的滿足約束條件的一個解或最優解。
35.請簡述分支限界法的搜索策略
答:搜索策略:在搜索解空間樹時,每一個活結點只有一次機會成為擴展結點。擴展結點一次性產生其所有兒子結點。在這些兒子結點中,導致不可行解或導致非最優解的兒子結點被舍棄,其余兒子結點被加入活結點表中。此后,從活結點表中按一定的策略取下一結點成為當前擴展結點,並重復上述結點擴展過程。這個過程一直持續到找到所需的解或活結點表為空時為止。
36.用分支限界法設計算法的步驟
(1)針對所給問題,定義問題的解空間(對解進行編碼)
(2)確定易於搜索的解空間結構(按樹或圖組織解);
(3)以廣度優先或以最小耗費(最大收益)優先的方式搜索解空間,並在搜索過程中用剪枝函數避免無效搜索。
37.隊列式分枝限界法的步驟
答:隊列式分枝限界法將活結點表組織成一個隊列,並按照隊列先進先出(FIFO)原則選取下一個結點為擴展結點。步驟如下:
①將根結點加入活結點隊列。
②從活結點隊中取出隊頭結點,作為當前擴展結點。
③對當前擴展結點,先從左到右地產生它的所有孩子結點,用約束條件檢查,把所有滿足約束條件的孩子結點加入活結點隊列。
④重復步驟②和③,直到找到一個解或活結點隊列為空為止。
38優先隊列式分枝限界法的步驟
答:優先隊列式分枝限界法的主要特點是將活結點組成一個優先隊列,並選取優先級最高的活結點成為當前擴展結點。步驟如下:
①計算起始結點(根結點)的優先級並加入優先隊列(與特定問題相關的信息的函數值決定優先級)。
②從優先隊列中取出優先級最高的結點作為當前擴展結點,使搜索朝着解空間樹上可能有最優解的分枝推進,以便盡快地找出一個最優解。
③對當前擴展結點,先從左到右地產生它的所有孩子結點,然后用約束條件檢查,對所有滿足約束條件的孩子結點計算優先級並加入優先隊列。
④重復步驟②和③,直到找到一個解或優先隊列為空為止。
39.請簡述分支限界法的兩種主要實現方法。
答:1)隊列式FIFO分支限界法:按照隊列先進先出(FIFO)原則選取下一個節點為擴展節點。
2)優先隊列式分支限界法:按照優先隊列中規定的優先級選取優先級最高的節點成為當前擴展節點。
40.請指出回溯法與分支限界法的相同點與不同點。
答:相同點:1)兩者在進行問題求解前,都需要完成解空間的定義和組織;2)都是通過在解空間樹上搜索來尋找問題的解;
不同點:(1)求解目標不同;(2)搜索方式不同;(3)對擴展結點的擴展方式不同;(4)存儲空間的要求不同。