算法與程序的區別與聯繫:程序算法有哪些特徵

編程,顧名思義就是編寫程序。學習之前,要先弄明白什麼是程序?解決問題的步驟就是程序嗎?算法和程序的關係是什麼?本課將一一給出答案。通過本課的學習,你將了解到程序及算法的概念及其關係。

什麼是計算機程序?

程序是指完成某些事物的一種既定方式和過程,可以將程序看成是一系列動作的執行過程的描述。在百度百科中,計算機程序被定義為“一組指示計算機執行動作或做出判斷的指令,通常用某種程序設計語言編寫,運行於某種目標體系結構上。

在生活中,可以見到許多計算機程序實例。下面,我們看一個生活片段:

清晨六點十分,伴隨着準時而優美的起床鈴聲,我邁出宿舍,走進了第一餐廳。餐廳里人很多,沒有辦法,我只買了兩個包子做為我的早餐罷了。隨着我的餐卡在打卡機上輕輕掠過,六毛錢便不翼而飛了。當我走到超市的時候,突然感覺只吃包子是不是太單調了,於是在超市裡拿了一包早餐奶,但付錢的時候卻發現超市的收銀機壞掉了,沒奈何,我只得忍痛把剛拿到手的早餐奶又放了回去,真鬱悶!

在上面的生活片段中,我們能找出幾處計算機程序為我們生活服務的痕迹來呢?

● 餐廳打卡機

● 超市收銀機

前面關於計算機程序的定義提到了“計算機程序是一組執行動作或做出判斷的指令並且運行於某種目標體系結構上”。定義有點晦澀難懂,但是只要我們結合實際運行的程序並稍微略加分析,就能夠做到瞭然於心。

首先考察(餐廳打卡機)

餐廳打卡機一般採用了射頻識別技術,“射頻識別(RFID)是一種無線通信技術,可以通過無線電訊號識別特定目標並讀寫相關數據,而無需識別系統與特定目標之間建立機械或者光學接觸。”②

打卡機利用射頻識別技術將餐卡信息讀取到打卡機,由打卡機的處理程序對讀取的信息做進一步處理。打卡機中的處理程序就是計算機程序,它需要執行下述動作和指令完成一次打卡操作:

1) 接受輸入的餐費金額

2) 讀取卡內金額

3) 判斷卡內金額是否大於餐費金額

4) 如果卡內金額小於餐費金額,給出餘額不足提示

5) 如果卡內金額大於餐費金額,將卡內金額減去餐費金額後,回寫到卡內

文字描述其動作或流程不夠清晰或理解的話,我們可以用流程圖來描述打卡機程序的執行動作或流程:

Python入門到精通(1):程序與算法

圖 1 餐廳打卡機程序流程圖

採用流程圖描述打卡機程序的執行動作,是不是更直觀和清晰一些。

再來考察(超市收銀機)

超市收銀機的工作原理類似餐廳打卡機,也是採用射頻識別技術讀取商品條碼,獲取商品價格、名稱等信息,並由收銀機內置的計算機程序對商品價格等信息進行匯總處理,給出所購商品金額等信息。其處理流程要比餐廳打卡機複雜一些,它需要執行下述動作和指令完成一次收費操作:

1) 讀取商品條碼

2) 獲取商品價格、名稱等信息並顯示到收銀機屏幕上

3) 計算商品總金額

4) 等待操作員按鍵

5) 操作員按下“商品”按鍵,繼續讀取商品條碼

6) 操作員按下“等金額”或“找零”按鍵,錢櫃自動開啟

其流程圖描述如下:

Python入門到精通(1):程序與算法

圖 2 超市收銀機程序流程圖

從餐廳打卡機和超市收銀機的內置的程序可以看出,人們使用計算機,就是要利用計算機程序處理各種不同的問題,為了讓計算機能夠按照我們的意願去工作,人們在設計計算機時,為計算機提供了一套指令,其中的每一種指令對應着計算機能執行的一個基本動作,為讓計算機完成某項任務而編寫的指令序列就稱為計算機程序。

2、什麼是程序算法?

我們知道,程序是用來解決問題的,是由多個步驟或過程組成的,這些步驟和過程就是解決問題的算法。

同學們都下過象棋吧,圖3給出的是《江湖迷局》一書的一個殘局棋譜,棋譜給出了每一步棋的走法,按照棋譜規定的步驟行棋,就能破解這個殘局,棋譜給出的行棋規則就是算法。

Python入門到精通(1):程序與算法

圖3 棋譜殘局

去超市購物時,人們經常會對需要購買的同類商品做價格的比較,例如商品A、商品B、商品C在同樣質量的情況下,人們會傾向於比較價格,優先購買價格便宜的商品,這個比較過程是在大腦進行的,比較的過程就是排序算法,從三個數中找出最小的數。

Python入門到精通(1):程序與算法

圖4 超市購買貨物時進行價格比較

圖3的棋譜殘局需要走11手,就能破解殘局,圖4的價格排序也僅需要對3個數進行排序,在大腦比對一下數的大小就完成了。它們都是算法,算法有沒有明確的概念和特徵呢?

要想弄清楚算法的概念和特徵。先看看算法能給人們的生活帶來哪些幫助?前面的棋譜殘局和價格比對是生活中的算法,可以幫助人們解決生活中的一些問題,讓我們變成象棋高手,或者買到最實惠的商品。

如果讓計算機執行算法,會給人們帶來什麼幫助呢?在學習方面,把解方程的步驟輸入到計算機,可以幫助人們解方程;在工作方面,把英漢詞庫及檢索算法輸入到計算機,可以幫助人們自動進行英漢詞語翻譯;在生活方面,把遊戲規則和算法輸入到計算機,可以讓人們娛樂等等。計算機有了算法,才有了大腦和靈魂,沒有算法的計算機,只能是一台機器。

為了讓計算機能夠完成前面所說的任務,就需要事先對各類問題進行分析,確定解決問題的具體方法和步驟。再編製好一組讓計算機執行的指令,交給計算機,讓計算機按人們指定的步驟有效地工作。這些具體的方法和步驟,其實就是一個問題的算法。例如,讓計算機幫助我們解方程,就需要把解方程的步驟和方程參數輸入到計算機,計算機根據輸入的步驟和參數完成方程的求解。

嚴格來說,計算機程序是為讓計算機完成某項任務而編寫的指令序列,指令序列就是解決問題的算法。

Python入門到精通(1):程序與算法

圖5 算法的概念

前面理解了算法的概念,再來看看算法有哪些特徵。

算法是由有限多個步驟組成的,它有下述兩個基本特徵:第一個特徵是每個步驟都明確地規定要執行何種操作;第二個特徵是每個步驟都可以被人或機器在有限的時間內完成。算法除了上述兩個基本特徵外,還要具有第三個基本特徵:雖然有些步驟可能被反覆執行多次,但是在執行有限多次之後,就一定能夠得到問題的解答。

Python入門到精通(1):程序與算法

圖6 算法的特徵

算法比較抽象,下面講解一個實際的算法案例,讓同學們對算法有個感性認識。對一組無序的數字進行排序,比較經典的排序算法就是冒泡排序。

3、冒泡排序算法

冒泡排序是將一組數字多趟順序比較,一次比較兩個數字,如果他們的順序錯誤就把他們交換過來,小數或(大數)逐漸往上冒,當再沒有需要交換的數字時,說明該組數已經排序完成。

對下面的一組數用冒泡排序算法,並按照從小到大的順序排序。

Python入門到精通(1):程序與算法

排序前的一組數,我們稱為原始數列,每兩個數進行一次比較,稱為一輪比較。

Python入門到精通(1):程序與算法

第一輪比較:23與34比較,23小於34,兩個數不用交換位置。

Python入門到精通(1):程序與算法

第二輪比較:34與5比較,因為34大於5,因此34和5交換位置。

Python入門到精通(1):程序與算法
Python入門到精通(1):程序與算法

第三輪比較:34與7比較,因為34大於7,因此34與7交換位置。

Python入門到精通(1):程序與算法
Python入門到精通(1):程序與算法

第四輪比較:比較34和56,因為34小於56,兩個數不用交換位置。

Python入門到精通(1):程序與算法

在前面的四輪比較中,從數列左側的第一個數開始,順序兩兩比較兩個數的大小,如果前面一個數比後面一個數大,就交換兩數的位置,直到數列的最後一個數比較完畢。

這四輪比較下來,稱為一趟比較。如果在該趟比較中,存在兩個數交換位置的情況,就需要進行下一趟比較,直到再沒有數字進行交換,算法結束。

因為在第一趟比較中,存在兩數的位置交換,因此還需要進行第二趟的比較。

第二趟比較

第二趟比較也是從數列左側的第一個數開始,順序兩兩比較兩個數的大小。不過第二趟比較就不需要再比較數列右側的最後一個數了,因為在第一趟比較的過程中,該數列最大的數已經被交換到數列右側最後的一個位置了。

Python入門到精通(1):程序與算法

第一輪比較:比較23和5,因為23大於5,因此23和5交換位置。

Python入門到精通(1):程序與算法
Python入門到精通(1):程序與算法

第二輪比較:比較23和7,因為23大於7,因此23和7交換位置。

Python入門到精通(1):程序與算法
Python入門到精通(1):程序與算法

第三輪比較:比較23和24,因為23小於24,兩個數不用交換位置。

Python入門到精通(1):程序與算法

至此,第二趟比較完成。最後的一個數56就不用比較了,因為56在第一趟比較中就已經為自己找到了正確的位置。

從第三輪的比較結果來看,排序已經完成,每個數都自己找到了正確的位置。已經不需要再進行第三趟比較了。

4、 算法和程序的關係

算法是解決問題的步驟,在前面也談到了程序是執行過程的描述,那麼,算法和程序是什麼關係呢?

先請同學們思考一個計算長方形面積的問題,並給出算法。

第一步,設置num1和num2兩個變量,接收用戶輸入的長度和寬度,並存儲到num1和num2兩個變量;

第二步,判斷num1和num2是否大於0,如果大於0,繼續下一個步驟,否則提示用戶長度和寬度輸入錯誤,算法結束;

第三步,計算num1和num2的乘積,並將乘積結果存儲到result變量;

第四步,顯示result變量的值到屏幕。

算法非常簡單,四個步驟,如何讓計算機執行這個算法呢?

實現算法的偽代碼:

Begin(算法開始)
     聲明  num1、num2;
     輸入  num1、num2;
     IF num1 <=0 || num2 <=0
     {
        Print(“輸入的長度和寬度不能小於0”);
       退出程序
     }
     result = num1 * num2;
     Print  result;
End (算法結束)

要讓計算機執行算法,就必須要把算法用編程語言編寫出來,如Java語言,如實現計算長方形面積算法的偽代碼,偽代碼是一種算法描述語言,可以很容易地轉換為編程語言,如Java、C語言等。可見,程序是算法的實現,算法通過某一種編程語言實現後,就是程序。

5、練習題

1、請列舉一些你在生活中經常使用的計算機程序。

2、計算機程序和算法有什麼區別?

3、對下面的一組數字用冒泡排序算法進行排序,請用文字詳細描述排序過程。

36,29,101,12,33

4、現實問題模擬:《停車場的看門人》

某大型停車場對於進入該場地的車輛有如下的規定:

(1)進入該停車場的車輛必須為客運車輛,貨運車輛謝絕入內。

(2)如果該車的乘員數量小於等於4人,則收費五元。

(3)如果該車的乘員數量大於4人,則收費八元。

作業要求:請根據該停車場的規定,用文字給出判斷進入該場的車輛是否符合規定,應該收費多少的算法。

5、請用文字給出一個計算長方形面積問題的算法。

要求:接受用戶輸入的長度和寬度,輸入的長度和寬度不能為零,如果為零,提示用戶重新輸入,最後將計算結果顯示到顯示器上。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/222972.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 14:13
下一篇 2024-12-09 14:13

相關推薦

發表回復

登錄後才能評論