2 回答

TA貢獻(xiàn)1836條經(jīng)驗 獲得超5個贊
算法是在有限步驟內(nèi)求解某一問題所使用的一組定義明確的規(guī)則。通俗點說,就是計算機(jī)解題的過程。在這個過程中,無論是形成解題思路還是編寫程序,都是在實施某種算法。前者是推理實現(xiàn)的算法,后者是操作實現(xiàn)的算法。
一個算法應(yīng)該具有以下五個重要的特征:
1、有窮性: 一個算法必須保證執(zhí)行有限步之后結(jié)束;
2、確切性: 算法的每一步驟必須有確切的定義;
3、輸入:一個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身定除了初始條件;
4、輸出:一個算法有一個或多個輸出,以反映對輸入數(shù)據(jù)加工后的結(jié)果。沒有輸出的算法是毫無意義的;
5、可行性: 算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算后即可完成。

TA貢獻(xiàn)1785條經(jīng)驗 獲得超4個贊
一、什么是算法
算法是一系列解決問題的清晰指令,也就是說,能夠?qū)σ欢ㄒ?guī)范的輸入,在有限時間內(nèi)獲得所要求的輸出。算法常常含有重復(fù)的步驟和一些比較或邏輯判斷。如果一個算法有缺陷,或不適合于某個問題,執(zhí)行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務(wù)。一個算法的優(yōu)劣可以用空間復(fù)雜度與時間復(fù)雜度來衡量。
算法的時間復(fù)雜度是指算法需要消耗的時間資源。一般來說,計算機(jī)算法是問題規(guī)模n 的函數(shù)f(n),算法執(zhí)行的時間的增長率與f(n) 的增長率正相關(guān),稱作漸進(jìn)時間復(fù)雜度(Asymptotic Time Complexity)。時間復(fù)雜度用“O(數(shù)量級)”來表示,稱為“階”。常見的時間復(fù)雜度有: O(1)常數(shù)階;O(log2n)對數(shù)階;O(n)線性階;O(n2)平方階。
算法的空間復(fù)雜度是指算法需要消耗的空間資源。其計算和表示方法與時間復(fù)雜度類似,一般都用復(fù)雜度的漸近性來表示。同時間復(fù)雜度相比,空間復(fù)雜度的分析要簡單得多。
[font class="Apple-style-span" style="font-weight: bold;" id="bks_etfhxykd"]算法 Algorithm [/font]
算法是在有限步驟內(nèi)求解某一問題所使用的一組定義明確的規(guī)則。通俗點說,就是計算機(jī)解題的過程。在這個過程中,無論是形成解題思路還是編寫程序,都是在實施某種算法。前者是推理實現(xiàn)的算法,后者是操作實現(xiàn)的算法。
一個算法應(yīng)該具有以下五個重要的特征:
1、有窮性: 一個算法必須保證執(zhí)行有限步之后結(jié)束;
2、確切性: 算法的每一步驟必須有確切的定義;
3、輸入:一個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身定除了初始條件;
4、輸出:一個算法有一個或多個輸出,以反映對輸入數(shù)據(jù)加工后的結(jié)果。沒有輸出的算法是毫無意義的;
5、可行性: 算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算后即可完成。
算法的設(shè)計要求
1)正確性(Correctness)
有4個層次:
A.程序不含語法錯誤;
B.程序?qū)捉M輸入數(shù)據(jù)能夠得出滿足規(guī)格要求的結(jié)果;
C.程序?qū)倪x擇的、典型的、苛刻的、帶有刁難性的幾組輸入數(shù)據(jù)能夠得出滿足規(guī)格要求的結(jié)果;
D.程序?qū)σ磺泻戏ǖ妮斎霐?shù)據(jù)都能產(chǎn)生滿足規(guī)格要求的結(jié)果。
2)可讀性(Readability)
算法的第一目的是為了閱讀和交流;
可讀性有助于對算法的理解;
可讀性有助于對算法的調(diào)試和修改。
3)高效率與低存儲量
處理速度快;存儲容量小
時間和空間是矛盾的、實際問題的求解往往是求得時間和空間的統(tǒng)一、折中。
算法的描述 算法的描述方式(常用的)
算法描述 自然語言
流程圖 特定的表示算法的圖形符號
偽語言 包括程序設(shè)計語言的三大基本結(jié)構(gòu)及自然語言的一種語言
類語言 類似高級語言的語言,例如,類PASCAL、類C語言。
算法的評價 算法評價的標(biāo)準(zhǔn):時間復(fù)雜度和空間復(fù)雜度。
1)時間復(fù)雜度 指在計算機(jī)上運行該算法所花費的時間。用“O(數(shù)量級)”來表示,稱為“階”。
常見的時間復(fù)雜度有: O(1)常數(shù)階;O(logn)對數(shù)階;O(n)線性階;O(n^2)平方階
2)空間復(fù)雜度 指算法在計算機(jī)上運行所占用的存儲空間。度量同時間復(fù)雜度。
時間復(fù)雜度舉例
(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世紀(jì) 波斯數(shù)學(xué)家比阿勒·霍瓦里松的一本影響深遠(yuǎn)的著作《代數(shù)對話錄》。20世紀(jì)的 英國 數(shù)學(xué)家 圖靈 提出了著名的圖靈論點,并抽象出了一臺機(jī)器,這臺機(jī)器被我們稱之為 圖靈機(jī) 。圖靈的思想對算法的發(fā)展起到了重要的作用。
算法是 計算機(jī) 處理信息的本質(zhì),因為 計算機(jī)程序 本質(zhì)上是一個算法,告訴計算機(jī)確切的步驟來執(zhí)行一個指定的任務(wù),如計算職工的薪水或打印學(xué)生的成績單。 一般地,當(dāng)算法在處理信息時,數(shù)據(jù)會從輸入設(shè)備讀取,寫入輸出設(shè)備,可能保存起來以供以后使用。
這是算法的一個簡單的例子。
我們有一串隨機(jī)數(shù)列。我們的目的是找到這個數(shù)列中最大的數(shù)。如果將數(shù)列中的每一個數(shù)字看成是一顆豆子的大小 可以將下面的算法形象地稱為“撿豆子”:
首先將第一顆豆子(數(shù)列中的第一個數(shù)字)放入口袋中。
從第二顆豆子開始檢查,直到最后一顆豆子。如果正在檢查的豆子比口袋中的還大,則將它撿起放入口袋中,同時丟掉原先的豆子。 最后口袋中的豆子就是所有的豆子中最大的一顆。
下面是一個形式算法,用近似于 編程語言 的 偽代碼 表示
給定:一個數(shù)列“l(fā)ist",以及數(shù)列的長度"length(list)" largest = list[1] for counter = 2 to length(list): if list[counter] > largest: largest = list[counter] print largest
符號說明:
= 用于表示賦值。即:右邊的值被賦予給左邊的變量。
List[counter] 用于表示數(shù)列中的第 counter 項。例如:如果 counter 的值是5,那么 List[counter] 表示數(shù)列中的第5項。
<= 用于表示“小于或等于”。
添加回答
舉報