程式=资料结构DataStructure+演算法课件.ppt
《程式=资料结构DataStructure+演算法课件.ppt》由会员分享,可在线阅读,更多相关《程式=资料结构DataStructure+演算法课件.ppt(103页珍藏版)》请在三一办公上搜索。
1、2023/3/19,1,第 一 章資料結構導論,課程名稱:資料結構授課老師:陳明瑤,2023/3/19,2,本章學習目標,讓讀者了解資料結構、演算法及程式之間的關係,以及如何評估演算法的執行效率。2.讓讀者了解結構化程式設計與物件導向程式設計的差異。,2023/3/19,3,本章內容,1-1 認識資料與資訊的關係1-2 何謂資料結構?1-3 何謂演算法?1-4 程式設計概念1-5 結構化程式設計1-6 物件導向程式設計1-7 演算法的效率評估,2023/3/19,4,1-1 認識資料與資訊的關係,1.資料(Data):是指未經過處理的原始記錄,例如學生考試的原始成績。2.資訊(Informat
2、ion):就是有經過處理的結果,例如全班同學成績之排名 及分佈圖。,*資料處理(DP):是將資料轉換成資訊的一連串的處理過程。,2023/3/19,5,1.資料(Data),(1)是客觀存在的、具體的、事實的記錄。(2)簡單來說,日常生活中所記錄的事實資料(姓名、生日、電話及地址)或學生在期中考的各科原始成績,這些都是未經過資料處理的資料。如表1-1所示。,2023/3/19,6,2.資訊(Information),(1)經過資料處理之後的結果即為資訊。其資料與資訊的特性比較。如表1-2所示。,2023/3/19,7,(2)處理程序(例如:成績處理系統)會將原始資料以加整理、計算及分析 之後,
3、變成有用的資訊(含總成績、平均及排名次)。如表1-3 所示。,2023/3/19,8,(3)是決策者在思考某一個問題時所需用到的資料,它是主觀認定的。例 如:班導師(決策者)在學生考完期中考之後,想依學生考試成績來獎 勵,因此,班導師必須要有一份全班排名的成績單(資訊),以做為獎 勵的依據。,2023/3/19,9,1-2 何謂資料結構?,資料結構(Data Structures)主要是探討如何將資料更有組織地存放到電腦記憶體中,以提昇程式之執行效率的一門學問。因此,有良好的資料結構(Data structure)及有效率的演算法(Algorithm)將可以大大的提昇程式的執行效率。,2023
4、/3/19,10,在電腦科學(Computer Science)的領域中,我們如何透過電腦來取得即時的、有用的資訊,那就必須先要撰寫有效率及正確的程式去運作,而程式就是由資料結構和演算法所構成的。其公式如下:程式=資料結構(Data Structure)+演算法(Algorithms)其中:資料結構:是指資料在記憶體中的儲存方式,演算法:則是如何將資料作有效率的處理過程。因此,當我們在撰寫程式時,只有選擇適當的【資料結構】,才能夠設計出最有效率的【演算法】,進而轉換成為有效率的【程式】。,2023/3/19,11,基本上,資料結構包含有遞迴(Recursive)、陣列(Array)、堆疊(St
5、ack)、佇列(Queue)、串列(List)、樹狀(Tree)、圖形(Graph)、排序(Sort)及搜尋(Search)等單元,雖然這幾種資料結構單元乍看之下,好像非常理論與抽象,但是在我們日常生活中,卻經常可以看到。,2023/3/19,12,【舉例】遞迴(Recursive):老鼠走迷宮的問題就是屬於遞迴結構。陣列(Array):教室座位排列方式就是屬於陣列結構。堆疊(Stack):碗盤的疊法、小朋友排積木、書本裝箱或座電梯等都 具有後進先出的特性就是屬於堆疊結構。佇列(Queue):排隊買票看球賽,先到先買的方式就是所謂的 佇列結構,2023/3/19,13,【舉例】串列(List)
6、:高鐵火車的車箱串接方式就是屬於串列結構。樹狀(Tree):如果球賽的賽程方式是採用淘汰制,就是一種樹狀結構。圖形(Graph):當看完球賽要回家的行駛路線圖,則可視為所謂的圖形 結構。排序(Sort):球賽成績的結果之排名方式就是屬於排序結構。搜尋(Search):球賽比賽之前找尋某一隊的賽程就是屬於搜尋結構。,2023/3/19,14,【老師上課動態展示】,檔案在附書光碟中。,2023/3/19,15,【實例】,撰寫一個程式來計算5位同學的資料結構平均成績,並且比較沒有使用資料結構與演算法的差異。,2023/3/19,16,第一種方法沒有使用資料結構與演算法,而是使用一般變數的宣告方式來個
7、別存放成績資料。雖然也可以順利的計算出所需要的結果,但是,比較缺乏彈性,因為,當我們要計算的學生人數異動時,程式將會比較難以維護。例如:全班學生人數為50人時,則行號04的程式碼就會變數非常的長,容易產生錯誤。,2023/3/19,17,第二種方法是使用陣列資料結構來存放5位同學的成績資料,然後再使用for迴圈的演算法來計算5位同學的成績,最後再列印出結果。,比較分析:第二種方法的程式比較有彈性,也就是說,當我們要計算的學生人數異動時,只要設定行號01的學生人數及行號05的陣列內容即可。,2023/3/19,18,1-3 何謂演算法?,演算法在韋氏辭典中定義為:在有限步驟內解決數學問題的程 序
8、。我們可以把演算法(Algorithm)定義成:解決問題的方法。它可以是利用文字敘述、或流程圖或虛擬碼的方式,來表示解決問題的 步驟。,2023/3/19,19,一、撰寫演算法應遵守五點原則:,1.輸入(Input):不一定要有輸入。可能沒有,也可能是多個資料輸入。例如(1):取得系統目前的時間,不須要輸入,只要寫一行now()函數,就可以輸出系統時間。例如(2):求某數為奇偶數時,則必須先要有一個整數輸入,才能進行 判斷。,2023/3/19,20,一、撰寫演算法應遵守五點原則:(續),2.輸出(Output):至少一個輸出。例如:在電腦中,處理資料的基本過程有三個步驟:輸入 處理 輸出(原
9、始資料)(程式)(有用的資訊)所以,使用電腦來為我們處理資料時,有可能是系統自動接收到一個訊號,來當作輸入資料,但是系統至少會輸出一項讓使用者參考的有用資訊。,2023/3/19,21,一、撰寫演算法應遵守五點原則:(續),3.明確性(Definiteness):每一行指令都必須明確,不可模稜兩可。例如:判斷某一數值是否為偶數。首先我們試著用下列文字來加以描述:(1)輸入一個正整數。(2)作餘除運算是否為0。(3)為0即為偶數。以上描述看來似乎正確,但是從演算法觀點來看,其中的第(2)點並不符合明確性,因它並未說明餘除運算是如何運算,容易造成混淆與不解。我們應該改寫為:(1)輸入一個正整數N。
10、(2)如果N 除以2,其餘數為0。(3)則其N為偶數。,不具明確性,具明確性,2023/3/19,22,一、撰寫演算法應遵守五點原則:(續),例如:用功的學生才能領獎學金就不具有明確性,因為每一個人對用功的定義可能不盡相同,而如果改為成績90以上的學生才能領獎學金就是具有明確性,因為90分是一個比較客觀的定義。,2023/3/19,23,一、撰寫演算法應遵守五點原則:(續),4.有限性(Finiteness):演算法不能有無窮迴路,必須能終止執行。由於演算法並非是真正可以執行的程式,而是設計者所推演出解決問題的步驟,因此,必須在有限的步驟內要完成解決問題的程序。但是,真正的程式是可以有無窮迴路
11、的動作。例如:Windows 作業系統除非系統關機或當機,否則它會永遠執行一個等待迴圈,來等待使用者從鍵盤輸入或其他的輸入設備。,2023/3/19,24,一、撰寫演算法應遵守五點原則:(續),5.正確性(Correctness):既然演算法是解決問題的方法,因此,正確性是最基本的要求。例如:以下判斷某數為奇偶數的演算法,雖然符合明確性,但是 不正確,因為N 除以2,其餘數為0,則N應該為偶數,而非奇數。,輸入一個正整數N。如果N 除以2,其餘數為0。則其N為奇數。應該改為偶數,2023/3/19,25,【日常生活中的例子】,一組可用來解決特定問題的有限指令或步驟,依循這些指令或步驟,可以進行
12、解題。食譜-做蛋糕,圖片來源:163.23.171.96/cornliu/cornppt/第六章.ppt,2023/3/19,26,好吃的蛋糕怎麼來?,輸入,輸出,明確性,正確性,有限性,圖片來源:163.23.171.96/cornliu/cornppt/第六章.ppt,2023/3/19,27,二、描述演算法有三種方法:,(一)文字敘述演算法可用文字加以描述,但是採用口語化的文字敘述來加以描述,其缺點在於冗長且較不精確,在撰寫、閱讀、會意時可能會有誤差,因此一般較不常用。例如:請利用文字敘述使用者登入帳號與密碼時,系統檢查的過程。步驟一:輸入使用者帳號與密碼步驟二:判斷帳號與密碼是否正確步
13、驟三:如果正確時,則可以登入系統 否則,就無法登入!,2023/3/19,28,(二)流程圖(Flowchart)流程圖是指利用圖形方式來表達欲解決問題的步驟。當我們想利用電腦程式語言來處理問題時,先要了解問題並想出許多方案來解決問題,並且分析那些資料是要輸入,經過處理之後,要輸出那些結果。,2023/3/19,29,2023/3/19,30,2023/3/19,31,【舉例】,請繪出使用者登入帳號與密碼時,系統檢查的流程圖。,2023/3/19,32,(三)虛擬碼(Pseudo Code)虛擬碼兼具文字描述及流程圖的優點,其方式是用文字摻雜程式語言,來描述解題步驟與方法。例如1:請利用虛擬碼
14、(Pseudo Code)敘述使用者登入帳號與密碼時,系統檢查的過程。(1)Input:UserName,Password(2)IF(UserName And Password)ALL True Output:You Can Pass!else Output:You Can not Pass!,2023/3/19,33,例如:1+2+3+10虛擬碼可以描述如下:(1)設Count=1,Total=0;(2)Total=Total+Count;(3)Count=Count+1;(4)若Count 10 則至步驟(5),否則回步驟(2)(5)印出Total,2023/3/19,34,1-4 程式設
15、計概念,我們要開始程式設計時,一定要進行下面五個步驟:,2023/3/19,35,2023/3/19,36,2023/3/19,37,實例,計算國文與英文的平均成績,並依照平均成績來求顯示及格與不及格。1.分析及定義問題。兩個等級分別如下:(1)及格:60(含)以上。(2)不及格:60以下。2.畫出整合問題的流程圖或撰寫問題的演算法。,2023/3/19,38,3.撰寫及建立程式模組。,2023/3/19,39,4.對每一個程式模組進行測試及除錯,直到沒有錯誤為止。當使用者輸入國文為60分,英文為61分時,是否可以計算出平均成績為60.5,如果沒有則必須要進行除錯,亦即要將Average的資料
16、型態改為Single(單精準度),2023/3/19,40,【重要觀念】,系統發展的生命週期與程式設計之步驟比較,2023/3/19,41,1-4.1 演算法與程式的差異?,1.演算法是以人為主,亦即任何人都可以閱讀的程式碼,因此,必須特別強調可讀性。2.程式則是以電腦為主,它強調程式的執行結果正確性、可維護 性及執行效率。,2023/3/19,42,1-4.2為什麼要撰寫程式?,我們為什麼要花那麼多時間來撰寫程式呢?其主要的目的:它可以快速解決複雜的問題。,甲同學說:請電腦幫我計算1加到10的總合。或許你會認為這簡單的問題,你我都會算,何必寫程式呢?但是,如果甲同學又說:請電腦幫我計算1加到
17、50000時,我想我們就無法馬上計算出結果。由上面的例子,我們可以非常清楚的知道,程式語言幫忙人類解決複雜的問題。,2023/3/19,43,1-5 結構化程式設計,何謂結構化程式設計呢?它是利用由上而下的技巧,將程式分解成多個具有獨立功能的模組。如圖1-5所示。,圖1-5 結構化程式設計的示意圖,2023/3/19,44,結構化程式設計由Dijkstra(1969)提出:1.消除程式因goto而造成如麵條式的混亂狀態。2.強調任何程式邏輯均可由三種結構組成。如圖1-6所示。(1)循序(Sequence):簡單命令式的指令如 COMPUTE,READ,WRITE 與代數指令如X=Y+Z。(2)
18、選擇(Condition):需做決策時,用 IF-THEN-ELSE 指令與 CASE 指令。(3)重複(Repetition):當需反覆時,用 DO-WHILE 與 DO-UNTIL 指令。,2023/3/19,45,2023/3/19,46,1-5.1 循序結構,所謂循序結構,是指程式由上而下,依序逐一執行。亦即程式碼被執行的順序為由上而下,一個敘述接著一個敘述依序執行。此種結構是最基本的結構。如圖1-7所示:,2023/3/19,47,1-5.2 選擇結構,如果只希望在某種條件成立時才執行某些敘述,而某種條件不成立才執行另一種敘述,來過濾一些條件。那我們就必須使用選擇結構的方式了。如圖1
19、-8所示。,2023/3/19,48,此種結構是最常被使用的方式,因為大部份的選擇結構的情況可能是兩種。例如:判斷及格與不及格、判斷奇數與偶數、判斷男生與女生 等情況,都可以利用此種結構來完成。,2023/3/19,49,1.語法:其中(條件式)是一關係運算式 或 邏輯運算式2.說明:如果條件式成立(真),就執行 Then後面的敘述區塊1,否則就執行敘述區塊2。3.使用時機:當條件只有二種情況時最佳方法。,2023/3/19,50,5.流程圖:如圖1-9所示:,2023/3/19,51,1-5.3 重複結構,在處理一再重複的相同動作,這對電腦而言,是一件非常Easy的事,但對我們人類而言卻是一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程式 资料 结构 DataStructure 演算法 课件
链接地址:https://www.31ppt.com/p-3755244.html