Pythoon3 21 進入演算法的世界

2021-09-25 06:33:10 字數 1623 閱讀 3715

知識點:演算法是指為了解決某項工作或某個問題,所需要有限數量的機械性或重複性指令與計算步驟。12

3:以下python程式片段是否相當嚴謹地表達出演算法的定義?

count = 0

while count != 3:

print(count)

:不夠嚴謹,因為會造成無限迴圈,與演算法有限性的特性相牴觸。12

3知識點: 1

23:執行時間t(n) = 3nnn + 2nn + 5n,時間複雜度是多少?

:首先得找出常數c與n0,c=10時,若n0=0,c=10時,若n>=n0,則3nnn + 2nn + 5n<=10nnn,因此得知時間複雜度為o(nnn)。12

3:以下程式片段的big-o是多少?

total = 0

for i in range(1, n+1):

total = total + i*i

:迴圈執行n次,所以是o(n)。12

3知識點

輸入(input):0個或多個輸入資料,這些輸入必須有清楚的描述或定義。

輸出(output):至少會有乙個輸出結果,不可以沒有輸出結果。

明確性(definiteness):每個指令或步驟必須是簡潔明確的。

有限性(finiteness):在有限步驟後一定會結束,不會產生無限迴圈。

步驟清楚且可行,能讓使用者用紙筆計算而求出答案。

分治法的核心思想

分治法的核心思想在於將乙個難以直接解決的大問題按照不同的分類分割成兩個或者更多的子問題,以便各個擊破,分而治之。

遞迴至少要定義的兩個條件

可以反覆執行的遞迴過程,跳出遞迴執行過程的出口。

貪心法的核心概念

貪心法又稱貪婪演算法,方法時從某一起點開始,在每乙個解決問題步驟中使用貪心原則,即採取在當前狀態下最有利或最優化的選擇,不斷的改進該解答,持續在每一步驟中選擇最佳的方法,並且逐步逼近給定的目標,當達到某一步驟不能再繼續前進時。演算法就停止,就是盡可能快地求得更好的解。

動態規劃法與分治法的差異

動態規劃法主要的做法是:如果乙個問題答案與子問題相關的話,就能將大問題拆解成各個小問題,其中與分治法最大不同的地方是可以讓每乙個子問題的答案被儲存起來,以供下次求解時直接取用,這樣的做法不但能減少再次計算的時間,並將這些解組合成大問題的解答,故而使用動態規劃可以解決重複計算的問題。

迭代法迭代法是指無法使用公式一次求解,而需要使用迭代,例如用迴圈去重複執行程式**的某些部分來得到答案。

列舉法列舉法的核心思想是:列舉所有的可能。根據問題要求,逐一列舉問題的解答,或者為了便於解決問題,把問題分為不重複、不遺漏的有限種情況,逐一列舉各種情況,並加以解決,最終達到解決整個問題的目的。

回溯法回溯法也算是列舉法中的一種,對於某些問題而言,回溯法是一種可以找出所有(或一部分)解的一般性演算法,同時避免列舉不正確的數值。一旦發現不正確的數值,就不再遞迴到下一層,而是回溯到上一層,以節省時間,是一種走不通就退回再走的方式。

20世紀最好的10個演算法

人類在20世紀產生了10個著名的演算法,是什麼演算法?這裡是一篇文章,介紹了美國科學家評出的10個演算法,感興趣可以看一看。20世紀最好的10個演算法 三鏡先生 一 演算法一詞的 algos是希臘字,意思是 疼 a1gor是拉丁字,意思是 冷卻 這兩個字都不是algorithm 演算法 一詞的詞根,...

20世紀10個最偉大的演算法

由computer in science enigeering和ieee computer society聯合評選出來的20世紀10個最偉大的演算法 1 蒙特卡羅演算法。1946 john von neumann,stan ulam,and nick metropolis 2 單純形方法。1947 ...

20世紀10個最偉大的演算法

高等數值分析課上,讀到由computer in science enigeering和ieee computer society聯合評選出來的20世紀10個最偉大的演算法,特錄於此 1 蒙特卡羅演算法。1946 john von neumann,stan ulam,and nick metropol...