大話資料結構與演算法 演算法初步1

2021-07-12 02:45:56 字數 1724 閱讀 1059

什麼是演算法呢?演算法是描述解決問題的方法。如今普遍認可的對演算法的定義是:演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。

對於乙個特定的問題,是可以有多個演算法來解決的。那麼我們就會想,有沒有通用的演算法呀?其實這個問題很弱智,就像問與沒有包治百病的藥啊!!!

演算法具有5個基本特性:輸入、輸出、有窮性、確定性和可行性。

輸入和輸出特性比較容易理解,演算法具有零個或多個輸入。儘管對於絕大多數演算法來說,輸入引數都是必要的,但對於個別情況,如列印「hello world」這樣的**,不需要任何輸入引數,因此演算法的輸入可以是零個。演算法至少有乙個或多個輸出,演算法是一定需要輸出的。不需要輸出,我們用這個演算法幹嘛?輸出的形式可以使列印輸出,也可以是返回乙個或多個值等。

有窮性指演算法在執行有限步驟之後,自動結束而不會出現無限迴圈,並且每乙個步驟在可接受的時間內完成。

確定性是指演算法的每一步驟都具有明確的含義,不會出現二義性。演算法在一定條件下,只有一條執行路徑,相同的輸入只能有唯一的輸出結果。

乙個好的演算法應該具備正確性、可讀性、健壯性、高效性和低儲存量的特性。

剛才我們提到設計演算法要提高效率。這裡效率大都指演算法的執行時間。那麼我們如何度量乙個演算法的執行時間呢?

這種方法主要是通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率的高低。

但是,這種方法是具有很大的缺陷的。(1)必須依賴演算法實現編制好的程式,這通常需要花費大量的時間和精力。如果編制出來發現它根本是很糟糕的演算法,豈不是竹籃打水一場空?(2)時間的比較依賴計算機硬體和軟體等環境因素,有時會掩蓋演算法本身的優劣。要知道,現在的一台四核處理器的計算機,跟當年286/386/486等老爺爺輩的機器相比,在處理演算法的執行速度上,是不能相提並論的;而所用的作業系統、編譯器、執行框架等軟體的不同,也可以影響他們的結果;就算是同一臺機器,cpu使用率和記憶體占有情況不一樣,也會造成細微的差異。

演算法的測試資料設計困難,並且程式的執行時間往往還與測試資料的規模有很大關係,效率高的演算法在校的測試資料面前往往得不到體現。比如10個數的排序,不管用什麼演算法,差異幾乎是零。而如果有100萬個隨機數字排序,那不同演算法的差異就非常大。那麼我們為了比較演算法,到底用多少資料來測試,這是很難判斷的問題。

因為基於事後統計方法有這樣那樣的缺陷,我們考慮後不予接納。

在計算機程式編制前,依據統計方法對演算法進行估算。

經過分析,我們可以發現,乙個用高階程式語言編寫的程式在計算機上執行時所消耗的時間取決於下列因素:(1)演算法採用的策略,方法;(2)編譯後產生的**質量;(3)問題的輸入規模;(4)機器執行指令的速度;第一條當然是演算法好換的根本,第二條往往要有軟體來做支撐,第四條要看計算機硬體的效能。也就是說,拋開與計算機軟體、硬體相關的因素,乙個程式的執行時間,依賴於演算法設計的好壞和問題的輸入規模。通俗的講,問題輸入規模是指輸入量的多少。

相面我們可以比較兩種求和的演算法:

迴圈迭代求和:

int i, sum=0,n=100;    //執行1次

for(i=1;i<=n;i++) //執行n+1次

printf(「%d」,sum); //執行1次

高斯求和:

int i,sum = 0, n = 100;  //執行1次

sum = (1+n)*n/2; //執行1次

printf("%d",sum); //執行1次

孰優孰劣,一覽無餘!!!

大話資料結構與演算法 三

大話資料結構與演算法 程杰 第三章 線性表 線性表的定義 零個或多個資料元素的有限序列。這裡需要強調幾個關鍵的地方 首先該線性表一定是有序的,若元素有多個,則第乙個元素無前驅,最後乙個元素無後繼,其他元素都有且只有乙個前驅和後繼 線性表的順序儲存結構 順序儲存結構的定義 線性表的順序儲存結構,指的是...

資料結構與演算法 樹初步

線性結構體 其直接前驅與直接後繼只有乙個 非線性結構 樹是乙個資料的集合 非空樹 集合中存在大於等於1的元素,且有且只有乙個根節點 空樹 集合中沒有元素 除了根節點之外,在邏輯上可以認為其它的節點是m棵相互不相交的子樹構成,每一棵子樹又由若干子樹來組成 遞迴性 度 節點的度,乙個節點所擁有的子節點個...

大話資料結構(二) 演算法

什麼是演算法呢?演算法是描述解決問題的方法。演算法 algorithm 這個單詞最早出現在波斯數學家阿勒 花刺子密在公元 825年 相當於我們中國的唐朝時期 所寫的 印度數字算術 中。如今普遍認可的對演算法的定義是 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示...