1樓:匿名使用者
演算法的本質是解決問題的方法,是思想
在早期的時候,人們遇到新問題,必須要去解決它,經過「冥思苦想」,「反覆探索嘗試」, 最後總結歸納。這才形成了今天我們學習的各種演算法。如果無法領會到解決問題的思想,無法總結歸納,就會有:
「學演算法有什麼用?」。不知道為什麼學,自然會認為學了沒意義,沒有用處。
2.一個演算法應該具有以下五個重要的特徵:
①有窮性: 演算法的有窮性是指演算法必須能在執行有限個步驟之後終止,換句話說就是一個演算法必須總是在執行有窮步之後結束,且每一步都可在有窮時間內完成。
②確定性:演算法中的每條指令必須有確切的定義,不會產生二義性,並且對於相同的輸入只能得出相同的輸出。
③可行性:演算法中執行的任何計算步驟都是可以被分解為基本的可執行的操作步,即每個計算步都可以在有限時間內完成(也稱之為有效性)。
④輸入: 一個演算法有0個或多個輸入,以刻畫運算物件的初始情況,所謂0個輸入是指演算法本身定出了初始條件,這些輸入取自於某個特定的物件集合。
⑤輸出:一個演算法有一個或多個的輸出,這些輸出是同輸入有著特定關係的量,沒有輸出的演算法是毫無意義的。
演算法總是要解決特定的問題,問題**就是演算法的輸入,期望的結果就是演算法的輸出,沒有輸入輸出的演算法是無意義的。
3.演算法設計的5個要求:
①正確性:最基本要求,演算法必須能解決某個問題的需求。
②可讀性:演算法的可讀性有助於人的閱讀與交流,容易除錯和修改。
③健壯性:當輸入的資料非法時,演算法能適當做出反應或進行處理,而不會產生莫名其妙的輸出結果。
④效率性:演算法是為了解決大規模問題,因此需要執行效率足夠快。
⑤儲存性:演算法在執行過程中,所需要的最大儲存空間,應該儘可能的佔用小。
效率性與儲存性都與問題規模有關,求100人的平均分與求1000人的平均分,同一個演算法的所花費的執行時間與儲存空間顯然是不一樣的。
正確性,可讀性,健壯性不僅僅是演算法設計的要求,而是貫穿整個軟體設計層次。單對於演算法本身來說,我們最關注的層面是效率性。千萬不能死板的認為,演算法就是計算機程式。
演算法是一切解決問題的思想,語言描述,偽**,流程圖,各種符號或者控制**同樣是演算法。
2樓:吊絲小弟弟
計算機的演算法具有可行性,有窮性、輸入\輸出、確定性。
計算機演算法特點
1.有窮性。一個演算法應包含有限的操作步驟,而不能是無限的。
事實上「有窮性」往往指「在合理的範圍之內」。如果讓計算機執行一個歷時2023年才結束的演算法,這雖然是有窮的,但超過了合理的限度,人們不把他視為有效演算法。
2. 確定性。演算法中的每一個步驟都應當是確定的,而不應當是含糊的、模稜兩可的。
演算法中的每一個步驟應當不致被解釋成不同的含義,而應是十分明確的。也就是說,演算法的含義應當是唯一的,而不應當產生「歧義性」。
3. 有零個或多個輸入、所謂輸入是指在執行演算法是需要從外界取得必要的資訊。
4. 有一個或多個輸出。演算法的目的是為了求解,沒有輸出的演算法是沒有意義的。
5.有效性。 演算法中的每一個 步驟都應當能有效的執行。並得到確定的結果。
重要演算法
a*搜尋演算法
俗稱a星演算法。這是一種在圖形平面上,有多個節點的路徑,求出最低通過成本的演算法。常用於遊戲中的npc的移動計算,或線上遊戲的bot的移動計算上。
該演算法像dijkstra演算法一樣,可以找到一條最短路徑;也像bfs一樣,進行啟發式的搜尋。
beam search
二分取中查詢演算法
一種在有序陣列中查詢某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。這種搜尋演算法每一次比較都使搜尋範圍縮小一半。
branch and bound
分支定界(branch and bound)演算法是一種在問題的解空間樹上搜尋問題的解的方法。但與回溯演算法不同,分支定界演算法採用廣度優先或最小耗費優先的方法搜尋解空間樹,並且,在分支定界演算法中,每一個活結點只有一次機會成為擴充套件結點。
資料壓縮
資料壓縮是通過減少計算機中所儲存資料或者通訊傳播中資料的冗餘度,達到增大資料密度,最終使資料的儲存空間減少的技術。資料壓縮在檔案儲存和分散式系統領域有著十分廣泛的應用。資料壓縮也代表著尺寸媒介容量的增大和網路頻寬的擴充套件。
diffie–hellman金鑰協商
diffie–hellman key exchange,簡稱「d–h」,是一種安全協議。它可以讓雙方在完全沒有對方任何預先資訊的條件下通過不安全通道建立起一個金鑰。這個金鑰可以在後續的通訊中作為對稱金鑰來加密通訊內容。
dijkstra』s 演算法
迪科斯徹演算法(dijkstra)是由荷蘭電腦科學家艾茲格·迪科斯徹(edsger wybe dijkstra)發明的。演算法解決的是有向圖中單個源點到其他頂點的最短路徑問題。舉例來說,如果圖中的頂點表示城市,而邊上的權重表示著城市間開車行經的距離,迪科斯徹演算法可以用來找到兩個城市之間的最短路徑。
動態規劃
動態規劃是一種在數學和電腦科學中使用的,用於求解包含重疊子問題的最優化問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。動態規劃的思想是多種演算法的基礎,被廣泛應用於電腦科學和工程領域。
比較著名的應用例項有:求解最短路徑問題,揹包問題,專案管理,網路流優化等。這裡也有一篇文章說得比較詳細。
歐幾里得演算法
在數學中,輾轉相除法,又稱歐幾里得演算法,是求最大公約數的演算法。輾轉相除法首次出現於歐幾里得的《幾何原本》(第vii卷,命題i和ii)中,而在中國則可以追溯至東漢出現的《九章算術》。
最大期望(em)演算法
在統計計算中,最大期望(em)演算法是在概率(probabilistic)模型中尋找引數最大似然估計的演算法,其中概率模型依賴於無法觀測的隱藏變數(latent variable)。最大期望經常用在機器學習和計算機視覺的資料聚類(data clustering)領域。最大期望演算法經過兩個步驟交替進行計算,第一步是計算期望(e),利用對隱藏變數的現有估計值,計算其最大似然估計值;第二步是最大化(m),最大化在 e 步上求得的最大似然值來計算引數的值。
m 步上找到的引數估計值被用於下一個 e 步計算中,這個過程不斷交替進行。
快速傅立葉變換(fft)
快速傅立葉變換(fast fourier transform,fft),是離散傅立葉變換的快速演算法,也可用於計算離散傅立葉變換的逆變換。快速傅立葉變換有廣泛的應用,如數字訊號處理、計算大整數乘法、求解偏微分方程等等。
雜湊函式
hashfunction是一種從任何一種資料中建立小的數字「指紋」的方法。該函式將資料打亂混合,重新建立一個叫做雜湊值的指紋。雜湊值通常用來代表一個短的隨機字母和數字組成的字串。
好的雜湊函式在輸入域中很少出現雜湊衝突。在雜湊表和資料處理中,不抑制衝突來區別資料,會使得資料庫記錄更難找到。
堆排序heapsort是指利用堆積樹(堆)這種資料結構所設計的一種排序演算法。堆積樹是一個近似完全二叉樹的結構,並同時滿足堆積屬性:即子結點的鍵值或索引總是小於(或者大於)它的父結點。
歸併排序
merge sort是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的一個非常典型的應用。
ransac 演算法
ransac 是」random sampleconsensus」的縮寫。該演算法是用於從一組觀測資料中估計數學模型引數的迭代方法,由fischler and bolles在1981提出,它是一種非確定性演算法,因為它只能以一定的概率得到合理的結果,隨著迭代次數的增加,這種概率是增加的。該演算法的基本假設是觀測資料集中存在」inliers」(那些對模型引數估計起到支援作用的點)和」outliers」(不符合模型的點),並且這組觀測資料受到噪聲影響。
ransac 假設給定一組」inliers」資料就能夠得到最優的符合這組點的模型。
rsa加密演演算法
這是一個公鑰加密演算法,也是世界上第一個適合用來做簽名的演算法。今天的rsa已經專利失效,其被廣泛地用於電子商務加密,大家都相信,只要金鑰足夠長,這個演算法就會是安全的。
並查集union-find
並查集是一種樹型的資料結構,用於處理一些不相交集合(disjoint sets)的合併及查詢問題。常常在使用中以森林來表示。
viterbi algorithm
尋找最可能的隱藏狀態序列(finding most probable sequence of hidden states)。
3樓:科學普及交流
1.有窮性。一個演算法應包含有限的操作步驟,而不能是無限的。
事實上"有窮性"往往指"在合理的範圍之內"。如果讓計算機執行一個歷時2023年才結束的演算法,這雖然是有窮的,但超過了合理的限度,人們不把他視為有效演算法。
2. 確定性。演算法中的每一個步驟都應當是確定的,而不應當是含糊的、模稜兩可的。
演算法中的每一個步驟應當不致被解釋成不同的含義,而應是十分明確的。也就是說,演算法的含義應當是唯一的,而不應當產生"歧義性"。
3. 有零個或多個輸入、所謂輸入是指在執行演算法是需要從外界取得必要的資訊。
4. 有一個或多個輸出。演算法的目的是為了求解,沒有輸出的演算法是沒有意義的。
5.有效性。 演算法中的每一個 步驟都應當能有效的執行。並得到確定的結果。
計算機演算法簡介:
演算法必須具備以下性質:
(1)演算法首先必須是正確的,即對於任意的一組輸入,包括合理的輸入與不合理的輸入,總能得到預期的輸出。如果一個演算法只是對合理的輸入才能得到預期的輸出,而在異常情況下卻無法預料輸出的結果,那麼它就不是正確的。
(2)演算法必須是由一系列具體步驟組成的,並且每一步都能夠被計算機所理解和執行,而不是抽象和模糊的概念。
(3)每個步驟都有確定的執行順序,即上一步在**;下一步是什麼,都必須明確,無二義性。
(4)無論演算法有多麼複雜,都必須在有限步之後結束並終止執行;即演算法的步驟必須是有限的。在任何情況下,演算法都不能陷入無限迴圈中。
一個問題的解決方案可以有多種表達方式;但只有滿足以上4個條件的解才能稱之為演算法。
計算機簿的特性,計算機病毒的特性
1,繁殖性 計算機病毒可以像生物病毒一樣進行繁殖,當正常程式執行時,它也進行執行自身複製,是否具有繁殖 感染的特徵是判斷某段程式為計算機病毒的首要條件。2,破壞性 計算機中毒後,可能會導致正常的程式無法執行,把計算機內的檔案刪除或受到不同程度的損壞。破壞引導扇區及bios,硬體環境破壞。3,傳染性 ...
計算機演算法必須具備輸入 輸出和等特性。A 可執行性B 可移植性C 確定性D 有窮
選acd 希望可以幫助你哈 解釋 1.有窮性 一個演算法必總是在執行有窮步驟之後結束,並且每一步都可以在有窮時間內完成 2.確定性 演算法的每一條指令必須有確切的含義 讀者理解時不會產生二義性,並且在任何條件下,演算法只有唯一的一條執行路徑,對於相同的輸入只能達到相同的輸出 3.可行性 一個演算法是...
計算機為什麼具有邏輯判斷能力,計算機具有邏輯判斷能力,主要取決於什麼
通過編譯的軟體才賦予計算機具有邏輯判斷能力。一是取決於硬體抉擇,而是取決是程式設計師設定的軟體程式 主要是計算機裡的電晶體來實現 人為什麼有明辨是非的能力?計算機具有邏輯判斷能力,主要取決於什麼 取決於編制的軟體.通過編譯的軟體才賦予計算機具有邏輯判斷能力。寫程式設計師的邏輯能力和駕馭 的能力 取決...