實驗7 演算法

2021-08-31 16:00:45 字數 3351 閱讀 6733

完成教材「演算法」章節內容知識驗證。驗證理論演算法部分迭代、遞迴等**。從而體會演算法的實現過程,學會將簡單問題轉換成用電腦程式求解。

相比於人腦,計算機更加擅長自動處理重複性的任務。這電腦程式中,這種重複被稱為迭代。下面,我們將展示乙個迭代演算法的經典例子:判斷素數。素數的定義是只有1和它本身兩個因數的自然數。讓我們新建乙個名為c7_ex1.py的檔案,輸入以下**,判斷乙個數是否為素數。1 2

3 45 6

7 89 10

n=int(input("

請輸入乙個自然數:

"))

j=2

while(j<n):

a=n%j

if(a==0):

print(n,"

非素數")

break

j=j+1

else:

print(n,"

是素數")

我們還可以使用迭代來求解算數平方方根。例如我們從任意估值x起,求解a的平方根,我們可以利用下面的公式計算出更為精確的估值:

例如,假設我們要求4的平方根。首先,我們估計x的值為3,代入到公式中,y的值為2.1666666666667。然後,我們將y的值賦給x,即x =y,代入到公式中,y的值變為2.00641025641。 經過多次這樣的重複運算之後,我們就可以發現y的值趨近於2.0,我們就獲得了正確答案。請新建乙個名為c7_ex2.py的檔案,輸入以下**,完成上例:1 2

3 45 6

7 8 9

epsilon=0.0000001

x=3

a=4

whiletrue:

print(x)

y=(x+a/x)/2

ifabs(y-x)<epsilon:

break

x=y

遞迴演算法中最經典的例子是斐波那契數列的求解。在數學定義上,斐波那契數列的公式如下:

f1=1

f2=1

fn=f

n-1+f

n-2(n>3, n∈n*)

請新建乙個名為c7_ex3.py的檔案,並輸入以下**:1 2

3 45 6

7 89 10

11 #求解函式

deffac(n):

ifn==1:

return1

ifn==2:

return1

else:

returnfac(n-1)+fac(n-2)

#主程式

x=int(input("

請輸入要求解斐波那契的第幾項:

"))

print(fac(x))

3.1 基於課本p161頁偽**,分別使用迭代和遞迴兩種方法,編寫**,求解n的階乘。

3.2本次實驗將實現氣泡排序演算法。要求輸入一組數字,編寫函式將這組數字進行氣泡排序。氣泡排序演算法偽**如下:

開始將上述數字輸入陣列a(共有n個數)

將i從2到n列舉

將j從n到i列舉a

比較a[j]和a[j-1]的大小,若a[j]小於a[j-1]則交換a[j-1]和a[j]

輸出排序結果a

結束3.3 將3.2中的結果作為輸入,基於以下偽**,編寫函式完成折半查詢。

開始1. 輸入陣列a,和待查詢數字key

2. 將陣列a的元素進行排序

3. 設定初始查詢區間:low=1; high=n;                  /*n為陣列長度*/

4. 測試查詢區間[low, high]是否存在,若不存在,則查詢失敗;否則

5. 取中間點mid=(low+high)/2,比較key與a[mid],有三種情況:

5.1若key5.2 若key>a[mid],low=mid+1,查詢在右半區間進行,轉向4;

5.3 若key=a[mid],查詢成功,返回記錄在陣列中的位置mid;

結束3.4 (思考題)不使用迴圈和內建函式,使用遞迴的方式,實現列表求和。

演算法實驗7 動態規劃投資問題

設m元錢,n項投資,函式f x 表示將x元投入第i項專案所產生的效益,i 1,2,n.問 如何分配這m元錢,使得投資的總效益最高?例項 問題轉換 假設分配給第 i 個專案的錢數是 xi,問題描述為 目標函式max 約束條件x1 x2 xn m,xi n 遞推公式 設f x 表示x萬元投給前k個專案的...

實驗7 按鍵單模組實驗

用esp32和按鍵模組,通過矩陣法來實現對矩陣鍵盤的按鍵讀取 1.連線esp32和按鍵模組的引腳 2.觸控按鍵,esp32獲取到所觸控的按鍵數字,並列印到串列埠監視器中 1.esp32 wroom 32d 開發板 2.3 4按鍵模組 3.杜邦線 1 連線引腳 3 4矩陣鍵盤 引腳依次為 7 6 5 ...

作業系統實驗7 記憶體置換頁演算法

實現時鐘演算法 增加引用位,如果訪問過則置為 1,每次置換時,尋找引用位為 0 的頁幀進 行置換。再把該位置為 1。增強時鐘演算法 增加修改位,先尋找引用位和修改位都為 0 的頁幀,如果沒有就找引用位為 0,修改位為 1 的頁幀,如果還不存在就返回指標開始的地方,將引用位和修改位都置為 1。lfu ...