md5与des算法有何不同_Python算法详解:为什么说算法是程序的灵魂?
算法是程序的靈魂,只有掌握了算法,才能輕松地駕馭程序開發(fā)。軟件開發(fā)工作不是按部就班,而是選擇一種最合理的算法去實現(xiàn)項目功能。算法能夠引導(dǎo)開發(fā)者在面對一個項目功能時用什么思路去實現(xiàn),有了這個思路后,編程工作只需要遭循這個思路去實現(xiàn)即可。本章將詳細(xì)講解計算機算法的基礎(chǔ)知識,為讀者步入后面的學(xué)習(xí)打下基礎(chǔ)。
1.1 算法的基礎(chǔ)
自然界中的很多事物并不是獨立存在的,而是和許多其他事物有著千絲萬縷的聯(lián)系。就拿算法和編程來說,兩者之間就有著必然的聯(lián)系。在編程界有一個不成文的原則,要想學(xué)好編程,就必須學(xué)好算法。要想獲悉這一說法的原因,先看下面對兩者的定義。
算法是一系列解決問題的清晰指令,算法代表著用系統(tǒng)的方法描述解決問題的策略機制。也就是說,能夠?qū)Ψ弦欢ㄒ?guī)范的輸入,在有限時間內(nèi)獲得所要求的輸出。如果一個算法有缺陷,或不適合于某個問題,執(zhí)行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務(wù)。
編程是讓計算機為解決某個問題而使用某種程序設(shè)計語言編寫程序代碼,并最終得到結(jié)果的過程。為了使計算機能夠理解人的意圖,人類就必須將需要解決的問題的思路、方法和手段通過計算機能夠理解的形式"告訴"計算機,使計算機能夠根據(jù)人的指令一步一步去工作,完成某種特定的任務(wù)。編程的目的是實現(xiàn)人和計算機之間的交流,整個交流過程就是編程。
在上述對編程的定義中,核心內(nèi)容是思路、方法和手段等,這都需要用算法來實現(xiàn)。由此可見,編程的核心是算法,只要算法確定了,后面的編程工作只是實現(xiàn)算法的一個形式而已。
1.1.1算法的特征
在1950年,算法(Algorithm )一詞經(jīng)常同歐幾里得算法聯(lián)系在一起。這個算法就是在歐幾里得的《幾何原本》中所闡述的求兩個數(shù)的最大公約數(shù)的過程,即輾轉(zhuǎn)相除法。從此以后,算法這一叫法一直沿用至今。
隨著時間的推移,算法這門學(xué)科得到了長足的發(fā)展,算法應(yīng)該具有如下5個重要的特征。
有窮性:保證執(zhí)行有限步驟之后結(jié)束。
確切性:每一步驟都有確切的定義。
輸入:每個算法有零個或多個輸入,以刻畫運算對象的初始情況。所謂零個輸入,是指算法本身舍棄了初始條件。
輸出:每個算法有一個或多個輸出,顯示對輸入數(shù)據(jù)加工后的結(jié)果,沒有輸出的算法是室無意義的。
可行性:原則上算法能夠精確地運行,進(jìn)行有限次運算后即可完成一種運算。
1.1.2 何為算法
為了理解什么是算法,先看一道有趣的智力題。"燒水泡茶"有如下5道工序: 1、燒開水, 2、洗茶壺, 3、洗茶杯, 4、拿茶葉,5、泡茶。燒開水、洗茶壺、洗茶杯、拿茶葉是泡茶的前提。其中,燒開水需要15min ,洗茶壺需要2min ,洗茶杯需要1min ,拿茶葉需要1min ,泡茶需要1min.下面是"燒水泡茶"的兩種方法。
方法1的步驟如下。
第1步:燒水。
第2步:水燒開后,洗刷茶具,拿茶葉。
第3步:沏茶。
方法2的步驟如下。
第1步:燒水。
第2步:燒水過程中,洗刷茶具,拿茶葉。
第3步:水燒開后沏茶。
習(xí)題:比較這兩種方法有何不同,并分析哪種方法更優(yōu)。
上述兩種方法都能最終實現(xiàn)“燒水泡茶的功能,每種方法的3個步驟就是一種算法。算法是指在有限步驟內(nèi)求解某一問題所使用的一組定義明確的規(guī)則。通俗點說,就是計算機解題的過程。在這個過程中,無論是形成解題思路還是編寫程序,都是在實施某種算法。前者是推理實現(xiàn)的算法,后者是操作實現(xiàn)的算法。
1.2計算機中的算法
眾所周知,做任何事情都需要一定的步驟。計算機雖然功能強大,能夠幫助人們解決很多問題,但是計算機在解決問題時,也需要遵循一定的步驟。在編寫程序?qū)崿F(xiàn)某個項目功能時,也需要遭循一定的算法。在本節(jié)的內(nèi)容中,將一起探尋算法在計算機中的地位,探索算法在計算機中的基本應(yīng)用知識。
1.2.1認(rèn)識計算機中的算法
計算機中的算法可分為如下兩大類。
數(shù)值運算算法:求解數(shù)值。
非數(shù)值運算算法:事務(wù)管理領(lǐng)域。
假設(shè)存在如下運算: 1x2x3x4x5,為了計算上述運算結(jié)果,最普通的做法是按照如下步驟進(jìn)行計算。
第1步:先計算1乘以2,得到結(jié)果2。
第2步:將步驟1得到的乘積2乘以3,計算得到結(jié)果6。
第3步:將6再乘以4,計算得24。
第4步:將24再乘以5,計算得120。
最終計算結(jié)果是120,上述第1步到第4步的計算過程就是一個算法。如果想用編程的方式來解決上述運算,通常會使用如下算法來實現(xiàn)。
第1步:假設(shè)定義t=1。
第2步:令i=2。
第3步:把x的乘積仍然放在變量中,可表示為txi——t。
第4步:把的值加1,即i+1——i。
第5步:如果i≤5,返回重新執(zhí)行步驟3以及其后的步驟4和步驟5 ;否則,算法結(jié)束。
由此可見,上述算法方式就是數(shù)學(xué)中的"n,公式。既然有了公式,在具體編程的時候,只需要使用這個公式就可以解決上述運算問題。
再看下面的一個數(shù)學(xué)應(yīng)用問題。
假設(shè)有80個學(xué)生,要求打印輸出成績在60分以上的學(xué)生。
在此用n表示學(xué)生學(xué)號,用n表示第個學(xué)生的學(xué)號;用cheng表示學(xué)生成績,用chengi表示第i個學(xué)生的成績。根據(jù)題目要求,可以寫出如下算法。
第1步: 1——i。
第2步:如果chengi≥60,則輸出ni和chengi,否則不輸出。
第3步: i+1——i。
第4步:如果i≤80,返回步驟2 ;否則,結(jié)束。
由此可見,算法在計算機中的地位十分重要。所以在面對一個項目應(yīng)用時,一定不要立即編寫程序,而是要仔細(xì)思考解決這個問題的算法是什么。想出算法之后,以這個算法為指導(dǎo)思想來編程。
1.2.2為什么說算法是程序的靈魂
算法是計算機處理信息的基礎(chǔ),因為計算機程序本質(zhì)上就是算法,告訴計算機確切的步驟來執(zhí)行一個指定的任務(wù),如計算職工的薪水或打印學(xué)生的成績單。通常,當(dāng)算法在處理信息時,數(shù)據(jù)會從輸入設(shè)備讀取,寫入輸出設(shè)備,也可能保存起來供以后使用。
著名計算機科學(xué)家沃思提出了下面的公式。
數(shù)據(jù)結(jié)構(gòu)+算法=程序
實際上,一個程序應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計方法進(jìn)行程序設(shè)計,并且用某種計算機語言來表示。因此,可以用下面的公式表示。
程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計方法+語言和環(huán)境
上述公式中的4個方面是一種程序設(shè)計語言所應(yīng)具備的知識。在這4個方面中,算法是靈魂,數(shù)據(jù)結(jié)構(gòu)是加工對象,語言是工具,編程需要采用合適的方法。其中,算法是用來解決“做什么"和怎么做"的問題。實際上程序中的操作語句就是算法的體現(xiàn),所以說,不了解算法就談不上程序設(shè)計。數(shù)據(jù)是操作對象,對操作的描述便是操作步驟,操作的目的是對數(shù)據(jù)進(jìn)行加工處理以得到期望的結(jié)果。舉個通俗點的例子,廚師做菜肴,需要有菜譜。菜譜上一般應(yīng)包括: 1、配料(數(shù)據(jù)) , 2、操作步驟(算法)。這樣,面對同一原料可以加工出不同風(fēng)味的菜肴。
本文節(jié)選自《Python算法詳解》
全書共13章,基于Python分別講解了算法是程序的靈魂,數(shù)據(jù)結(jié)構(gòu),常用的算法思想,線性表、隊列和棧,樹,圖,查找算法,內(nèi)部排序算法,經(jīng)典的數(shù)據(jù)結(jié)構(gòu)問題,解決數(shù)學(xué)問題,經(jīng)典算法問題,解決圖像問題,游戲和算法等內(nèi)容。全書內(nèi)容以“技術(shù)解惑”貫穿全書,引領(lǐng)讀者全面掌握算法的核心技術(shù)。
總結(jié)
以上是生活随笔為你收集整理的md5与des算法有何不同_Python算法详解:为什么说算法是程序的灵魂?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Airpods Pro空间音频功能有什么
- 下一篇: python运维脚本部署jdk_基于Ja