《2022年高中信息技術 全國青少年奧林匹克聯(lián)賽教案 算法基礎》由會員分享,可在線閱讀,更多相關《2022年高中信息技術 全國青少年奧林匹克聯(lián)賽教案 算法基礎(3頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、2022年高中信息技術 全國青少年奧林匹克聯(lián)賽教案 算法基礎
學習過程序設計的人對算法這個詞并不陌生,從廣義上講,算法是指為解決一個問題而采用的方法和步驟;從程序計設的角度上講,算法是指利用程序設計語言的各種語句,為解決特定的問題而構成的各種邏輯組合。我們在編寫程序的過程就是在實施某種算法,因此程序設計的實質就是用計算機語言構造解決問題的算法。算法是程序設計的靈魂,一個好的程序必須有一個好的算法,一個沒有有效算法的程序就像一個沒有靈魂的軀體。
算法具有五個特征:
1、有窮性: 一個算法應包括有限的運算步驟,執(zhí)行了有窮的操作后將終止運算,不能是個死循環(huán);
2、確切性: 算法的每一步驟必
2、須有確切的定義,讀者理解時不會產(chǎn)生二義性。并且,在任何條件下,算法只有唯一的一條執(zhí)行路徑,對于相同的輸入只能得出相同的輸出。如在算法中不允許有“計算8/0”或“將7或8與x相加”之類的運算,因為前者的計算結果是什么不清楚,而后者對于兩種可能的運算應做哪一種也不知道。
3、輸入:一個算法有0個或多個輸入,以描述運算對象的初始情況,所謂0個輸入是指算法本身定義了初始條件。如在5個數(shù)中找出最小的數(shù),則有5個輸入。
4、輸出:一個算法有一個或多個輸出,以反映對輸入數(shù)據(jù)加工后的結果,這是算法設計的目的。它們是同輸入有著某種特定關系的量。如上述在5個數(shù)中找出最小的數(shù),它的出輸出為最小的數(shù)。如果一個程
3、序沒有輸出,這個程序就毫無意義了;
5、可行性: 算法中每一步運算應該是可行的。算法原則上能夠精確地運行,而且人能用筆和紙做有限次運算后即可完成。
如何來評價一個算法的好壞呢?主要是從兩個方面:
一是看算法運行所占用的時間;我們用時間復雜度來衡量,例如:在以下3個程序中,
(1)x:=x+1
(2)for i:=1 to n do
x:=x+1
(3)for i:=1 to n do
for j:=1 to n do
x:=x+1
含基本操作“x增1”的語句x:=x+1的出現(xiàn)的次數(shù)分別為1,n和n2則這三個程序段的時間復雜度分別為
4、O(1),O(n),O(n2),分別稱為常量階、線性階和平方階。在算法時間復雜度的表示中,還有可能出現(xiàn)的有:對數(shù)階O(log n),指數(shù)階O(2n)等。在n很大時,不同數(shù)量級的時間復雜度有:O(1)< O(log n)
5、相互轉化的。在中學生信息學奧賽中,對程序的運行時間作出了嚴格的限制,如果運行時間超出了限定就會判錯,因此在設計算法時首先要考慮的是時間因素,必要時可以以犧牲空間來換取時間,動態(tài)規(guī)劃法就是一種以犧牲空間換取時間的有效算法。對于空間因素,視題目的要求而定,一般可以不作太多的考慮。
我們通過一個簡單的數(shù)值計算問題,來比較兩個不同算法的效率(在這里只比較時間復雜度)。
例:求N!所產(chǎn)生的數(shù)后面有多少個0(中間的0不計)。
算法一:從1乘到n,每乘一個數(shù)判斷一次,若后面有0則去掉后面的0,并記下0的個數(shù)。為了不超出數(shù)的表示范圍,去掉與生成0無關的數(shù),只保留有效位數(shù),當乘完n次后就得到0的個數(shù)。(p
6、ascal程序如下)
var i,t,n,sum:longint;
begin
t:=0; sum:=1;
readln(n);
for i:=1 to n do
begin
sum:=sum*i;
while sum mod 10=0 do
begin
sum:=sum div 10;
inc(t);{計數(shù)器增加1}
end;
sum:=sum mod 1000;{舍去與生成0無關的數(shù)}
end;
writeln(t:6);
end.
算法二:此題中生成O的個數(shù)只與含5的個數(shù)有關,n!的分解數(shù)中含
7、5的個數(shù)就等于末尾O的個數(shù),因此問題轉化為直接求n!的分解數(shù)中含5的個數(shù)。
var t,n:integer;
begin
readln(n);
t:=0;
repeat
n:=n div 5 ;
inc(t,n); {計數(shù)器增加n}
until n<5;
writeln(t:6);
end.
分析對比兩種算法就不難看出,它們的時間復雜度分別為O(N)、O(logN),算法二的執(zhí)行時間遠遠小于算法一的執(zhí)行時間。
在信息學奧賽中,其主要任務就是設計一個有效的算法,去求解所給出的問題。如果僅僅學會一種程序設計語言,而沒學過算法的選手在比賽中是不會取得好的成績的,選手水平的高低在于能否設計出好的算法。