大话数据结构与算法:算法初步1
生活随笔
收集整理的這篇文章主要介紹了
大话数据结构与算法:算法初步1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.算法的定義:
什么是算法呢?算法是描述解決問題的方法。如今普遍認可的對算法的定義是:算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,并且每條指令表示一個或多個操作。
對于一個特定的問題,是可以有多個算法來解決的。那么我們就會想,有沒有通用的算法呀?其實這個問題很弱智,就像問與沒有包治百病的藥啊!!!
2.算法的特性:
? ? ?算法具有5個基本特性:輸入、輸出、有窮性、確定性和可行性。 輸入和輸出特性比較容易理解,算法具有零個或多個輸入。盡管對于絕大多數算法來說,輸入參數都是必要的,但對于個別情況,如打印“Hello World” 這樣的代碼,不需要任何輸入參數,因此算法的輸入可以是零個。算法至少有一個或多個輸出,算法是一定需要輸出的。不需要輸出,我們用這個算法干嘛?輸出的形式可以使打印輸出,也可以是返回一個或多個值等。 有窮性指算法在執行有限步驟之后,自動結束而不會出現無限循環,并且每一個步驟在可接受的時間內完成。 確定性是指算法的每一步驟都具有明確的含義,不會出現二義性。算法在一定條件下,只有一條執行路徑,相同的輸入只能有唯一的輸出結果。 一個好的算法應該具備正確性、可讀性、健壯性、高效性和低存儲量的特性。3.算法效率的度量方法
剛才我們提到設計算法要提高效率。這里效率大都指算法的執行時間。那么我們如何度量一個算法的執行時間呢?3.1事后統計方法
這種方法主要是通過設計好的測試程序和數據,利用計算機計時器對不同算法編制的程序的運行時間進行比較,從而確定算法效率的高低。 但是,這種方法是具有很大的缺陷的。(1)必須依賴算法實現編制好的程序,這通常需要花費大量的時間和精力。如果 編制出來發現它根本是很糟糕的算法,豈不是竹籃打水一場空?(2)時間的比較依賴計算機硬件和軟件等環境因素,有時會掩蓋算法本身的優劣。要知道,現在的一臺四核處理器的計算機,跟當年286/386/486等老爺爺輩的機器相比,在處理算法的運行速度上,是不能相提并論的;而所用的操作系統、編譯器、運行框架等軟件的不同,也可以影響他們的結果;就算是同一臺機器,CPU使用率和內存占有情況不一樣,也會造成細微的差異。 算法的測試數據設計困難,并且程序的運行時間往往還與測試數據的規模有很大關系,效率高的算法在校的測試數據面前往往得不到體現。比如10個數的排序,不管用什么算法,差異幾乎是零。而如果有100萬個隨機數字排序,那不同算法的差異就非常大。那么我們為了比較算法,到底用多少數據來測試,這是很難判斷的問題。 因為基于事后統計方法有這樣那樣的缺陷,我們考慮后不予接納。3.2 事前分析估算方法
在計算機程序編制前,依據統計方法對算法進行估算。 經過分析,我們可以發現,一個用高級程序語言編寫的程序在計算機上運行時所消耗的時間取決于下列因素:(1)算法采用的策略,方法;(2)編譯后產生的代碼質量;(3)問題的輸入規模;(4)機器執行指令的速度;第一條當然是算法好換的根本,第二條往往要有軟件來做支撐,第四條要看計算機硬件的性能。也就是說,拋開與計算機軟件、硬件相關的因素,一個程序的運行時間,依賴于算法設計的好壞和問題的輸入規模。通俗的講,問題輸入規模是指輸入量的多少。 相面我們可以比較兩種求和的算法: 循環迭代求和: int i, sum=0,n=100; //執行1次 for(i=1;i<=n;i++) //執行n+1次 {sum = sum + i; //執行n次 } printf(“%d”,sum); //執行1次高斯求和: int i,sum = 0, n = 100; //執行1次 sum = (1+n)*n/2; //執行1次 printf("%d",sum); //執行1次 孰優孰劣,一覽無余!!!總結
以上是生活随笔為你收集整理的大话数据结构与算法:算法初步1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Transact-SQL数据类型(文本/
- 下一篇: 新版飞鸽传书简述