完成教材「演算法」章節內容知識驗證。驗證理論演算法部分迭代、遞迴等**。從而體會演算法的實現過程,學會將簡單問題轉換成用電腦程式求解。
相比於人腦,計算機更加擅長自動處理重複性的任務。這電腦程式中,這種重複被稱為迭代。下面,我們將展示乙個迭代演算法的經典例子:判斷素數。素數的定義是只有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 ...