導航:首頁 > 源碼編譯 > 多個演算法解決同一個問題

多個演算法解決同一個問題

發布時間:2025-01-31 07:19:31

㈠ 什麼是演算法

一、什麼是演算法
演算法是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。演算法常常含有重復的步驟和一些比較或邏輯判斷。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
演算法的時間復雜度是指演算法需要消耗的時間資源。一般來說,計算機演算法是問題規模n 的函數f(n),演算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度(Asymptotic Time Complexity)。時間復雜度用「O(數量級)」來表示,稱為「階」。常見的時間復雜度有: O(1)常數階;O(log2n)對數階;O(n)線性階;O(n2)平方階。
演算法的空間復雜度是指演算法需要消耗的空間資源。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
[font class="Apple-style-span" style="font-weight: bold;" id="bks_etfhxykd"]演算法 Algorithm [/font]
演算法是在有限步驟內求解某一問題所使用的一組定義明確的規則。通俗點說,就是計算機解題的過程。在這個過程中,無論是形成解題思路還是編寫程序,都是在實施某種演算法。前者是推理實現的演算法,後者是操作實現的演算法。
一個演算法應該具有以下五個重要的特徵:
1、有窮性: 一個演算法必須保證執行有限步之後結束;
2、確切性: 演算法的每一步驟必須有確切的定義;
3、輸入:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定除了初始條件;
4、輸出:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
5、可行性: 演算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。
演算法的設計要求
1)正確性(Correctness)
有4個層次:
A.程序不含語法錯誤;
B.程序對幾組輸入數據能夠得出滿足規格要求的結果;
C.程序對精心選擇的、典型的、苛刻的、帶有刁難性的幾組輸入數據能夠得出滿足規格要求的結果;
D.程序對一切合法的輸入數據都能產生滿足規格要求的結果。
2)可讀性(Readability)
演算法的第一目的是為了閱讀和交流;
可讀性有助於對演算法的理解;
可讀性有助於對演算法的調試和修改。
3)高效率與低存儲量
處理速度快;存儲容量小
時間和空間是矛盾的、實際問題的求解往往是求得時間和空間的統一、折中。
演算法的描述 演算法的描述方式(常用的)
演算法描述 自然語言
流程圖 特定的表示演算法的圖形符號
偽語言 包括程序設計語言的三大基本結構及自然語言的一種語言
類語言 類似高級語言的語言,例如,類PASCAL、類C語言。
演算法的評價 演算法評價的標准:時間復雜度和空間復雜度。
1)時間復雜度 指在計算機上運行該演算法所花費的時間。用「O(數量級)」來表示,稱為「階」。
常見的時間復雜度有: O(1)常數階;O(logn)對數階;O(n)線性階;O(n^2)平方階
2)空間復雜度 指演算法在計算機上運行所佔用的存儲空間。度量同時間復雜度。
時間復雜度舉例
(a) X:=X+1 ; O(1)
(b) FOR I:=1 TO n DO
X:= X+1; O(n)
(c) FOR I:= 1 TO n DO
FOR J:= 1 TO n DO
X:= X+1; O(n^2)
「演算法」一詞最早來自公元 9世紀 波斯數學家比阿勒·霍瓦里松的一本影響深遠的著作《代數對話錄》。20世紀的 英國 數學家 圖靈 提出了著名的圖靈論點,並抽象出了一台機器,這台機器被我們稱之為 圖靈機 。圖靈的思想對演算法的發展起到了重要的作用。
演算法是 計算機 處理信息的本質,因為 計算機程序 本質上是一個演算法,告訴計算機確切的步驟來執行一個指定的任務,如計算職工的薪水或列印學生的成績單。 一般地,當演算法在處理信息時,數據會從輸入設備讀取,寫入輸出設備,可能保存起來以供以後使用。
這是演算法的一個簡單的例子。
我們有一串隨機數列。我們的目的是找到這個數列中最大的數。如果將數列中的每一個數字看成是一顆豆子的大小 可以將下面的演算法形象地稱為「撿豆子」:
首先將第一顆豆子(數列中的第一個數字)放入口袋中。
從第二顆豆子開始檢查,直到最後一顆豆子。如果正在檢查的豆子比口袋中的還大,則將它撿起放入口袋中,同時丟掉原先的豆子。 最後口袋中的豆子就是所有的豆子中最大的一顆。
下面是一個形式演算法,用近似於 編程語言 的 偽代碼 表示
給定:一個數列「list",以及數列的長度"length(list)" largest = list[1] for counter = 2 to length(list): if list[counter] > largest: largest = list[counter] print largest
符號說明:
= 用於表示賦值。即:右邊的值被賦予給左邊的變數。
List[counter] 用於表示數列中的第 counter 項。例如:如果 counter 的值是5,那麼 List[counter] 表示數列中的第5項。
<= 用於表示「小於或等於」。

㈡ 解決某問題有三種演算法,復雜性分別為……問在同樣時間內可處理問題的大小,結果怎麼來的求步驟。如圖

S1速度和規模成正比例線性關系,很好理解
S2換個說法:當計算規模增大到多少時計算時間變為原來的10倍,那麼對於時間復雜度是N²的演算法來說,時間的增長幅度是計算規模增長幅度的平方,假設規模到K的時候,時間增長10倍,那麼就有(K平方/S2平方)=10 得 k/s2=√10 的k=3.16*S2
S3: 對於₂ⁿ的時間復雜度來說,同樣假設規模到K的時候,時間增長10倍,那麼就有(2的K次方/2的S3次方)=10 得k=s3+log₂10=S3+3.32

㈢ 對於同一個問題可採用不同的演算法去解決,但不同的演算法通常具有相同的效率這句話錯在哪 急!

不同的演算法不會有相同的效率。
就比如11x12=132
第一種演算法,兩邊一拉中間相加。像左1 右2 中間1+2=3
再舉個例子11x55 605
第二種演算法,歸整零相加。像10x12+12

㈣ 快速排序方法的時間復雜度為O(n^2)=n(n-1)/2.

1)對於你的問題簡單解釋如下:
理論計算機研究中,衡量演算法一般從兩個方面分析:時間復雜度和空間復雜度。空間復雜度跟時間復雜度是類似的,下面簡單解釋一下時間復雜度:返蘆察對於一個數據規模為n的問題,解決該問題的演算法所用時間可以用含有n的函數T(n)來表示。對於絕大多數情況,我們只需要了解演算法的一般性能而不考慮細節,也就是說,我們只關心函數T(n)的表達式的形式,而不關心表達式的常數系數等與數據規模沒有關系的量值。對於函數T(n),我們又進一步將它簡化為O(n),即只考慮演算法平均運行時間的「瓶頸」,也就是T(n)表達式中,關於變數n增長最快的哪一項。比如下面的代碼:
for(int i=1; i<=n*2; i++)
for(int j=1; j<=n; j++)
// do something here
那麼這個演算法的時間復雜度就是O(n^2),因為它有兩層循環,每層循環的數據嘩消規模都是n。注意第一層循環(外循環)要迭代n*2次,則實際上T(n)=2*n*n,而對於O(n)來說,我們忽略了常數2,只保留了n^2。這就是大O記法的一個概括,並不精確。
對於時間復雜度的更精確、深入的解釋,可以自己查閱《演算法導論》第一章。

2)更正你的問題:快速排序演算法的時間復雜度應該為O(n lg n)。注意三種時間復雜度符號表示的不同意義!英文字母O代表的是平均運行時間,因此對於快速排序來說應該是O(n lg n)。而使用下界函數Omega或者上界函數Theta則分別表示演算法運行的最快和最慢漏茄時間。對於未使用隨機化的快速排序,理論上可以證明,存在某一方法構造出一組數據使快速排序「退化」成平方復雜度演算法即Theta(n^2)。但是對於其O(n)表示法應該為O(n^2)。

㈤ n個不同的物品,分成M堆,每堆至少一個。問有多少種分法,求高效率的演算法。

在n個物體中,先選出m個物體,每一堆放一個,這樣有A(m)(n)=n*(n-1)*....*(n-m+1)種情況,然後其餘的物品隨便放,有m^(n-m)種情況,兩者相乘就是答案

㈥ 計算機同一個問題只能用一個演算法對嗎

不是。
每個問題都有多個演算法。只是演算法是泛意的,並不是一定是計算機上可以運行的。如果可以在計算機上運行的,都是可以用數學建模的,那麼數學模型出來了,演算法也就有了。演算法有了,具體用什麼語言就看樓主自己了,可以寫成標准C,也可以用C++實現,也可以用JAVA實現,比如說排序,任何一種計算機語言都能實現。

閱讀全文

與多個演算法解決同一個問題相關的資料

熱點內容
明日之後安卓太卡怎麼辦 瀏覽:502
如何使用命令方塊找到村莊 瀏覽:766
泛函壓縮映像原理 瀏覽:521
win10清除文件夾瀏覽記錄 瀏覽:964
如何查看伺服器域中所有服務 瀏覽:384
學mastercam91編程要多久 瀏覽:999
如何查伺服器地址和埠 瀏覽:911
教學雲平台app怎麼下載 瀏覽:389
單片機510教學視頻 瀏覽:624
陝西信合app怎麼查看自己的存款 瀏覽:663
風冷冰箱有壓縮機 瀏覽:274
android實現wifi連接wifi 瀏覽:669
飛豬app怎麼幫別人值機 瀏覽:924
筆記本開我的世界伺服器地址 瀏覽:546
怎樣隱藏bat命令 瀏覽:127
android開發創意 瀏覽:138
京劇貓為什麼進不去伺服器 瀏覽:784
怎麼自己免費製作一個手機app 瀏覽:582
python同時迭代兩個變數 瀏覽:740
好分數app家長版怎麼刪除孩子 瀏覽:426