第1章结构导论(Introduction)课件.ppt
《第1章结构导论(Introduction)课件.ppt》由会员分享,可在线阅读,更多相关《第1章结构导论(Introduction)课件.ppt(74页珍藏版)》请在三一办公上搜索。
1、第1章 資料結構導論(Introduction),1-1 資料結構的基礎1-2 程式設計與演算法1-3 抽象資料型態ADT1-4 C語言的模組化程式設計1-5 遞迴函數1-6 程式的分析方法1-7 Big Oh函數,第1章 資料結構導論(Introduction)1-1 資料,1-1 資料結構的基礎-說明,資料結構(Data Structures)是一門計算機科學的基礎學科,其目的是研究程式使用的資料在電腦記憶體的儲存方式,以便撰寫程式處理問題時,能夠使用最佳的資料結構,並且提供一種策略或方法來有效率的善用這些資料,以便達到下列目的,如下所示:程式執行速度快。資料佔用最少的記憶空間。更快速的存
2、取這些資料。,1-1 資料結構的基礎-說明資料結構(Data Stru,1-1 資料結構的基礎-圖例,策略或方法是指如何選擇最恰當的資料結構,並且將這些資料轉換成有用的資訊,轉換資料的方法就是演算法(Algorithms),如下圖所示:演算法和資料結構的關係非常的密切,因為程式使用的演算法和資料結構都會影響程式的執行效率,換句話說,演算法加上資料結構就等於程式,如下所示:演算法+資料結構=程式,1-1 資料結構的基礎-圖例策略或方法是指如何選擇最恰當的資,main()int largest=0;if(25 largest)largest=25;if(30 largest)largest=30;
3、if(18 largest)largest=18;if(7 largest)largest=7;if(10 largest)largest=10;printf(最大數為%d,largest);,範例 1:找出最大數,main()範例 1:找出最大數,01:main()02:03:int i;04:int list5=25,30,18,7,10;05:int largest=0;06:for(i=0;i largest)largest=listi;08:printf(最大數為%d,largest);09:,範例 2:找出最大數,01:main()範例 2:找出最大數,Difference bet
4、ween the above two?,How data structure affects your program?Which one is better?Why?Which one would be potentially faster?Why?Lets review some basics before answering the above questions,Difference between the above t,The Von Neumann Model&Memory Access,Q1:How fast is your CPU?Q2:How is your DIMMs a
5、ccess latency?Q3:What conclusion can be drawn from them?Q4:Where does your program stored?,The Von Neumann Model&Memory,CPU vs Memory Speed,Clock cycle of a 2GHz CPU1/(2*109)=0.5 nsIn case 4 clocks per instruction 2 nsHow about int sum=i+j;DDR2-8001/(400*106)=2.5 nsIn case CL=6 6*2.5 ns=15 nsFor a W
6、ORD accessCache,CPU vs Memory SpeedClock cycle,1-2 程式設計與演算法,1-2-1 程式設計的過程1-2-2 演算法1-2-3 模組化1-2-4 由上而下的設計方法,1-2 程式設計與演算法1-2-1 程式設計的過程,1-2-1 程式設計的過程-階段,程式設計是將需要解決的問題轉換成程式碼,程式碼不只能夠在電腦上正確的執行,而且可以驗證程式執行的正確性,程式設計的過程可以分成5個階段,如下所示:需求(Requirements)設計(Design)分析(Analysis)撰寫程式碼(Coding)驗證(Verification),1-2-1 程式設
7、計的過程-階段程式設計是將需要解決的問題轉,1-2-1 程式設計的過程-需求,需求(Requirements):程式設計的需求是在了解問題本身,以便確切獲得程式需要輸入的資料和其產生的結果,如下圖所示:,1-2-1 程式設計的過程-需求需求(Requirement,1-2-1 程式設計的過程-設計,設計(Design):在了解程式設計的需求後,我們就可以開始找尋解決問題的方法和策略,簡單的說,設計階段就是找出解決問題的步驟,如下圖所示:,1-2-1 程式設計的過程-設計設計(Design):在了解,1-2-1 程式設計的過程-分析,分析(Analysis):在解決需求時,只有一種解決方法嗎?例
8、如:如果有100個變數,我們可以宣告100個變數來儲存資料,或是使用陣列來儲存,在分析階段是將所有可能解決問題的演算法都寫下來,然後分析比較那一種方法比較好,選擇最好的演算法來撰寫程式。,1-2-1 程式設計的過程-分析分析(Analysis):在,1-2-1 程式設計的過程-撰寫,撰寫程式碼(Coding):現在就可以開始使用指定的程式語言來撰寫程式碼,以本書為例是使用C程式語言,在實際撰寫程式時,可能發現另一種方法比較好,因為設計歸設計,在實際撰寫程式時才能真正發現其優劣,如果這是一個良好的設計方法,就算改為其它方法也不會太困難。,1-2-1 程式設計的過程-撰寫撰寫程式碼(Coding)
9、:,1-2-1 程式設計的過程-驗證,驗證(Verification):驗證是證明程式執行的結果符合需求的輸出資料,在這個階段可以再細分成三個部分:證明:執行程式時需要證明它的執行結果是正確的,程式符合所有輸入資料的組合,程式規格也都符合演算法的需求。測試:程式需要測試各種可能情況、條件和輸入資料,以測試程式執行無誤,如果有錯誤產生,就需要除錯來解決程式問題。除錯:如果程式無法輸出正確的結果,除錯是在找出錯誤的地方,我們不但需要找出錯誤,還需要決定如何更正它。,1-2-1 程式設計的過程-驗證驗證(Verificatio,1-2-2 演算法-定義,演算法是完成目標工作的一組指令,這組指令的步驟
10、是有限的。除此之外,演算法還必須滿足一些條件,如下所示:輸入(Input):沒有或數個外界的輸入資料。輸出(Output):至少有一個輸出結果。明確性(Definiteness):每一個指令步驟都十分明確,沒有模稜兩可。有限性(Finiteness):這組指令一定結束。有效性(Effectiveness):每一個步驟都可行,可以追蹤其結果。,1-2-2 演算法-定義演算法是完成目標工作的一組指令,這組,1-2-2 演算法-方法,演算法只是將解決問題步驟詳細的寫出來,所以並沒有固定的方式,基本上只要能夠描述這組指令的執行過程即可,常用的方式如下所示:一般語言文字:直接使用文字描述來說明執行的步驟
11、虛擬碼(Pseudo Code):趨近程式語言的描述方法,其每一列約可轉換成一列程式碼。流程圖(Flow Chart):使用結構化的圖表描述執行過程,以各種不同形狀的圖形表示不同的操作。,1-2-2 演算法-方法演算法只是將解決問題步驟詳細的寫出來,1-2-2 演算法-虛擬碼範例,從1加到10演算法的虛擬碼,如下所示:/*計算1加到10*/Let counter=1Let total=0while counter=10 total=total+counter Add 1 to counterOutput the total/*顯示結果*/,1-2-2 演算法-虛擬碼範例從1加到10演算法的虛擬
12、碼,如,1-2-2 演算法-流程圖範例,從1加到10演算法的流程圖,如右圖所示:,1-2-2 演算法-流程圖範例從1加到10演算法的流程圖,如,1-2-3 模組化-說明,模組化主要是針對解決問題的方法,把一件大型的工作切割成多個小工作,切割的工作屬於一種結構化分析的範疇,最常使用的是由上而下的設計方法,其主要是使用程序為單位來切割工作,也就是所謂的程序式程式設計(Procedural Design)。,1-2-3 模組化-說明模組化主要是針對解決問題的方法,把一,1-2-3 模組化-意義1,筆者使用一個簡單的數學不等式來說明模組化的意義,如下所示:C(x):函數表示問題的複雜度。E(x):函數
13、代表需要花費多少工時來解決這個問題。上述數學函數分別表示問題的複雜度和花費時間,現在有兩個問題P1和P2等待解決,問題P1的複雜度比問題P2高,可以得到不等式,如下所示:C(P1)C(P2)E(P1)E(P2)(1)上述不等式表示問題P1的工作量比解決問題P2來的費時,因為問題P1比較複雜。,1-2-3 模組化-意義1筆者使用一個簡單的數學不等式來說明,1-2-3 模組化-意義2,接下來,將問題P1和P2合併解決,但是必須考慮兩個問題間的關連性,如此會延伸出更多的問題。所以,可以得到不等式,如下所示:C(P1+P2)C(P1)+C(P2)接著從不等式(1)開始推導,可以得到不等式,如下所示:C
14、(P1+P2)C(P1)+C(P2)E(P1+P2)E(P1)+E(P2)上述不等式的意義是將一個問題劃分成數個小問題,然後分別解決這些問題的工作量比直接解決一個大問題所需的工作量來的少,這就是模組化的目的。,1-2-3 模組化-意義2接下來,將問題P1和P2合併解決,,1-2-4 由上而下的設計方法-說明,由上而下的設計方法(Top-down Design)是在面對問題時,先考慮將整個解決問題的方法分解成數個大模組(Modules),然後針對每一個大模組,一一分割成數個小模組,如此一直細分,最後等這些細分小問題的小模組完成後,再將它們組合起來,如此一層層的向上爬,完成整個軟體系統或應用程式的
15、設計。例如:玩拼圖遊戲一定會先將整個拼圖粗分為數個區域,等每一個區域都拼好後,整張拼圖也就完成,1-2-4 由上而下的設計方法-說明由上而下的設計方法(To,1-2-4 由上而下的設計方法-注意事項,獨立性:每一個分割模組間的關聯性愈少,處理起來就會愈快。所謂獨立性,是指當處理某一個子問題時,無需考慮到其它子問題。換一句話說,獨立性是要將每一個問題都定義成一件簡單且明確的問題。結合問題:小心控制子問題間的結合方法,而且要注意結合這些子問題的邏輯順序,避免語焉不詳的結果。子問題間的溝通:雖然獨立性可以減少各問題間的關聯性,但是並無法避免掉全部的溝通。因此各問題間如何溝通的問題(即函數的參數傳遞)
16、也是十分重要的考量。,1-2-4 由上而下的設計方法-注意事項獨立性:每一個分割模,1-3 抽象資料型態ADT,1-3-1 抽象化 塑模1-3-2 程序或函數抽象化1-3-3 抽象資料型態(ADT),1-3 抽象資料型態ADT1-3-1 抽象化 塑模,1-3-1 抽象化 塑模(說明),程式設計的目的是解決問題,也就是將現實生活中的真實問題轉換成電腦程式,讓電腦執行程式幫助我們解決問題,這個過程是找出問題的模型,稱為塑模(Modeling),使用抽象觀點來檢視問題,以便建立問題的模型,將問題轉換成模型的方式稱為抽象化(Abstraction),如下圖所示:,1-3-1 抽象化 塑模(說明)程式設
17、計的目的是解決問題,1-3-1 抽象化 塑模(定義屬性),塑模(Modeling)的主要的目的是定義問題的二個屬性,如下所示:資料(Data):問題影響的資料。操作(Operators):問題產生的操作。例如:學生基本資料的問題,可以抽象化成Students模型,資料部分是:學號、姓名、地址和電話號碼,操作部分有:指定和取得學生的姓名、地址和電話號碼。,1-3-1 抽象化 塑模(定義屬性)塑模(Model,1-3-2 程序或函數抽象化-說明,程序或函數抽象化(Procedure Abstraction or Function Abstraction)的針對傳統由上而下的程式設計方法,將問題分割
18、成一個個子工作,分割的程序或函數並不用考量實作的程式碼,只需定義好程序或函數使用介面的參數和傳回值,將它視為一個黑盒子,換句話說,程式可以使用任何符合介面的程序或函數來取代,稱為程序或函數抽象化。,1-3-2 程序或函數抽象化-說明程序或函數抽象化(Proc,1-3-2 程序或函數抽象化-範例,當定義繪出門框程序的使用介面後,如果開發出更佳的演算法,只需將程序取代成實作的新程式碼,並不用更改使用介面,就可以增加程式執行效率,如果程序擁有此特性,稱為程序抽象化。,1-3-2 程序或函數抽象化-範例當定義繪出門框程序的使用介,1-3-3 抽象資料型態(ADT)-說明,抽象資料型態(Abstract
19、 Data Type)是一種自訂資料型態,包含資料和相關操作,將資料和處理資料的操作一起思考,結合在一起,操作是對外的使用介面,如下圖所示:,1-3-3 抽象資料型態(ADT)-說明抽象資料型態(A,1-3-3 抽象資料型態(ADT)-範例,例如:將學生基本資料抽象化成Students抽象資料型態,內含學號id、姓名name、地址address和電話號碼phone等資料,和setStudent()指定學生資料,getName()、getAddress()和getPhone()取出學生資料等操作,如下圖所示:,1-3-3 抽象資料型態(ADT)-範例例如:將學生基本資料,1-3-3 抽象資料型態
20、(ADT)-實作,以物件導向程式語言:C+或Java語言來說,Students資料型態就是Students類別,程式可以使用Students類別建立多個Students副本(Instances,副本是物件導向名詞,它就是一個物件),用來模擬真實世界的學生,例如:同班同學、高中同學和同修一門課的同學等。雖然C語言不是物件導向程式語言,不過仍然可以使用C語言的模組化程式設計來實作抽象資料型態,其主要的問題是只能建立一個副本,並不能像物件導向程式語言的類別能夠建立多個副本。,1-3-3 抽象資料型態(ADT)-實作以物件導向程式語言:,1-4 C語言的模組化程式設計-說明,模組(Modules)是特
21、定功能的相關資料和函數集合,程式設計者只需知道模組對外的使用介面(即各模組函數的呼叫方式),就可以使用模組提供的功能,而不用實際了解模組內部程式碼的實作和內部資料儲存使用的資料結構。,1-4 C語言的模組化程式設計-說明模組(Modules,1-4 C語言的模組化程式設計-種類,模組化程式設計(Modular Programming)就是建立相關資料和函數集合的模組,模組主要可以分成兩個部分:介面與實作,如下所示:模組介面(Module Interface):模組介面是定義模組函數和使用的資料,即定義讓使用此模組的程式可以呼叫的函數和存取的變數資料,在C語言是使用標頭檔.h定義模組介面。模組實
22、作(Module Implementations):模組的實作部分是模組函數和資料的實際程式碼,程式設計者需要定義哪些函數屬於公開介面,哪些只能在模組程式檔使用,C語言的程式檔案.c可以實作模組的程式碼。,1-4 C語言的模組化程式設計-種類模組化程式設計(Modu,1-4 C語言的模組化程式設計-公開與私用關鍵字,extern和static關鍵字來區分公開或內部使用的函數與變數,如下所示:在標頭檔宣告成extern的變數和函數:這是可供其它程式使用的外部函數和變數。在模組程式檔宣告成static的變數和函數:只能在模組程式檔中使用。,1-4 C語言的模組化程式設計-公開與私用關鍵字exter
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 导论 Introduction 课件
链接地址:https://www.31ppt.com/p-2108642.html