歷史程序中,我們都是在不斷的去分析問題,解決問題。演算法是一系列解決問題步驟、方案。
演算法的特徵:
有窮性(finiteness)
演算法的有窮性是指演算法必須能在執行有限個步驟之後終止。理解:演算法執行之後都是有結束點的,不存在死迴圈和永遠執行下去的演算法,是可以求到結果的。演算法必須在有限時間內完成。一是演算法中的操作步驟為有限個,二是每個步驟都能在有限時間內完成。
確定性(definiteness)
演算法的每一步,都要有確定的含義。理解:每一條指令的含義明確,無二義性。並且在任何條件下,演算法只有唯一的一條執行路徑,即相同的輸入只能得出相同的輸出。
輸入項(input)
乙個演算法有0個或多個輸入,以刻畫運算物件的初始情況,所謂0個輸入是指演算法本身定出了初始條件。
輸出項(output)
乙個演算法有乙個或多個輸出,以反映對輸入資料加工後的結果。沒有輸出的演算法是毫無意義的。
可行性(effectiveness)
演算法中執行的任何計算步驟都是可以被分解為基本的可執行的操作步,即每個計算步都可以在有限時間內完成(也稱之為有效性)。
演算法的評定
同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。乙個適合的好的演算法是通過時間複雜度和空間複雜度來評定的。
演算法的時間複雜度是指執行演算法所需要的計算工作量。一般來說,計算機演算法是問題規模n 的函式f(n),演算法的時間複雜度也因此記做。t(n)=ο(f(n))因此,問題的規模n 越大,演算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間複雜度(asymptotic time complexity)。
演算法的空間複雜度是指演算法需要消耗的記憶體空間。其計算和表示方法與時間複雜度類似,一般都用複雜度的漸近性來表示。同時間複雜度相比,空間複雜度的分析要簡單得多。
正確性演算法的正確性是評價乙個演算法優劣的最重要的標準。
可讀性演算法的可讀性是指乙個演算法可供人們閱讀的容易程度。
健壯性健壯性是指乙個演算法對不合理資料輸入的反應能力和處理能力,也稱容錯性。
演算法學習之插入演算法
插入演算法其實很簡單,其原理就像我們玩的撲克一樣 在桌子上放著一疊雜亂無序的撲克牌 相當於需要我們排序的初始化陣列 然後拿起第一張,放到左手上 只有一張,不需要排序的說 然後拿起第二張,從右往左進行比較大小,如果小,就放到第一張牌的左邊,如果大,就放到第一張牌的右邊 然後拿起第三張,同上,從右往左進...
演算法學習之演算法思想
演算法的英文名稱是algorithm,這個詞在1957年之前在webster s new world dictionary 韋氏新世界詞典 中還未出現,只能找到帶有它的古代涵義的較老形式的 algorism 算術 是指用阿拉伯數字進行算術運算的過程。在中世紀時,珠算家用算盤進行計算,而算術家用算術進...
演算法學習 遞迴演算法的理解與舉例
原文 遞迴 你開啟面前這扇門,看到屋裡面還有一扇門。你走過去,發現手中的鑰匙還可以開啟它,你推開門,發現裡面還有一扇門,你繼續開啟它。若干次之後,你開啟面前的門後,發現只有一間屋子,沒有門了。然後,你開始原路返回,每走回一間屋子,你數一次,走到入口的時候,你可以回答出你到底用這你把鑰匙開啟了幾扇門 ...