1 2 作為一種技術的演算法

2021-06-28 22:44:12 字數 1175 閱讀 2316

要研究演算法,哪些指標可以用來衡量演算法的好壞呢?

1. 這個演算法要能正確解決問題。這個是前提,研究演算法的最終目的也是為了解決問題。如果乙個演算法,不能解決問題,那要它何用。

2. 這個演算法占用的資源應該盡可能小。計算機可以做得很快,但不能無限快。儲存器很便宜,但不會免費。計算時間是一種有限的資源,儲存空間也是一種有限的資源。這些資源必須被有效地使用,那些時間和空間上有效的演算法就有助於做到這一點。

效率指解決問題的有效比率。比如,完成一件事,a只用了10分鐘,而b用了15分鐘,那麼在時間這個角度來說,a的效率比b的效率高。

解決同一問題,各種演算法的效率通常相差很大。這種效率上的差距的影響往往比硬體和軟體方面的差距還要大得多。

書中舉出了乙個具體的例子。用來比較插入排序演算法和合併排序演算法的效率。這兩個排序演算法,都要對乙個大小為一百萬個數的陣列進行排序。

插入排序演算法,執行在一台執行較快的電腦a上,每秒執行10億條指令。

合併排序演算法,執行在一台執行較慢的電腦b上,每秒執行一千萬條指令。

在計算能力方面,計算機a比計算機b快100倍。

為了排序一百萬個數,計算機a花的時間為:

2 * (10^6)^2 條指令 / (10^9條指令/秒) = 2000秒

為了排序一百萬個數,計算機b花的時間為:

50*10^6 lg10^6 條指令 / (10^7條指令/秒)  = 100秒

計算機a原來比計算機b快100倍,但是由於執行的演算法不同,最終對一百萬個數進行排序,計算機a反倒比b慢了20倍。 這就是計算機演算法的效率問題。

總體的系統效能不僅依賴於選擇快速的硬體,還依賴於選擇有效的演算法。

那現在計算機硬體已經很快了,是否意味著研究演算法已經沒有必要了呢?肯定不是。研究演算法有必要,主要體下面幾個方面。

1. 在一些資料量很大的領域。比如尋找路由。

2. 硬體的設計領域也需要演算法。

3. 任何一種計算機語言,它都需要編譯器、直譯器或彙編器中的一種,來讓計算機理解這種語言。這些軟體中,都包含了大量的演算法。

演算法很重要,是否擁有紮實的演算法知識和技術基礎,是區分真正熟練的程式設計師與新手的一項重要特徵,利用當代的計算技術,無需了解很多演算法方面的東西,也可以完成一些任務。但是,有了良好的演算法基礎的話,可以做的是就要多得多了。

而且,最重要的一點是,找工作的筆試面試題中,經常會出一些演算法題。要是演算法題,答得不好,就會找不到工作。或者只能找到工資低的工作。

python作為一種膠水和c c

如果需要用 python 呼叫 c c 編寫的第三方庫,只需要乙個指令碼語言來粘合它們。這個時候,用 python ctypes 可以很方便地實現呼叫。stackoverflow 上的 calling c c from python 這個主題介紹了 ctypes 最簡單的入門方法,概括如下 如果是 ...

一種濾波演算法

剛看到要寫濾波演算法的時候懵了,想著是不是要去掉最大值 最小值什麼的,感覺很高大上 於是開始查資料了解,發現濾波演算法其實有很多種方法,如下列舉了一些,當然能起到的濾波作用也是不同的 於是我看了下,選擇了一種最簡單實用的濾波演算法學習了一下,即下面的中位值濾波演算法 簡單來說就是多次取樣,排序,取中...

一種蜜網技術的介紹

一種蜜網技術的介紹 蜜罐是一種安全資源,其價值在於被掃瞄 和攻陷,它以犧牲真實的沒有打補丁的作業系統 一般以 linux 為平台 為代價欺騙 者以達到採集 方法和保護真實主機目標。傳統蜜罐有著不少的優點,比如收集資料的保真度,蜜罐不依賴於任何複雜的檢測技術等,因此減少了漏報率和誤報率。使用蜜罐技術能...