1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
频率计数

遞迴函式 1-7-1 Big Oh函數的基礎-O(n) O(n):線性迴圈 a = 0; for ( i = 0; i n; i++ ) a=a+1; 上述程式碼執行n次的a = a + 1,其頻率計數是n+1,包含最後1次的比較,不計常數所以是O(n)。 Ch01.資料結構導論 2008/2/26 * 1-7-1 Big Oh函數的基礎-O(Log n) O(Log n):非線性迴圈 a = 0; for ( i = n; i 0; i = i / 2 ) a=a+1; 或 a = 0; for ( i = 1; i n; i = i * 2 ) a=a+1; 上述兩個迴圈的增量是除以2或乘以2,以除法來說,如果n = 16,迴圈依序為8、4、2、1,其執行次數是對數Log n,其頻率計數是Log n+1,包含最後1次的比較,不計常數所以是O(Log n)。 Ch01.資料結構導論 2008/2/26 * 1-7-1 Big Oh函數的基礎-O(nLog n) O(n Log n):巢狀迴圈擁有內層非線性迴圈 a = 0; for ( i = 0; i n; i++ ) for ( j = n; j 0; j = j / 2 ) a=a+1; 上述巢狀迴圈的外層是線性迴圈的O(n),內層是非線性迴圈的O(Log n),所以是: O(n) * O(Log n) = O(n Log n) Ch01.資料結構導論 2008/2/26 * 1-7-1 Big Oh函數的基礎-O(n2) O(n2):巢狀迴圈 a = 0; for ( i = 0; i n; i++ ) for ( j = 0; j n; j++ ) a=a+1; 上述巢狀迴圈的外層是線性迴圈的O(n),內層線性迴圈的O(n),所以是: O(n) * O(n) = O(n2) Ch01.資料結構導論 2008/2/26 * 1-7-2 Big Oh函數的等級-說明 程式執行效率的時間複雜度可以使用O(1)、O(Log n)、O(n)、O(n Log n)、O(n2)、O(n3)和O(2n)的Big Oh函數來表示,如下表所示: Ch01.資料結構導論 2008/2/26 * 1-7-2 Big Oh函數的等級-成長曲線圖 Ch01.資料結構導論 2008/2/26 * 1-7-2 Big Oh函數的等級-比較 換句話說,如果一個問題有兩種不同演算法,第一種方法的頻率計數是5n,第二種方法的頻率計數是n2/2,我們可以計算頻率計數與n值的關係,如下表所示: Ch01.資料結構導論 2008/2/26 * 1-7-2 Big Oh函數的等級-比較說明 當n 10時,第二種方法比第一種有效率,如果n 10時,第一種方法反而比較有效率,函數O()分別為O(n)和O(n2)。 所以,當n足夠大時,頻率計數的常數就可忽略不計,只需比較其級數,所以O(n)執行效率比O(n2)好。如果n很小時,常數才需要加以考量,如此才能真正比較程式執行效率的優劣。 Ch01.資料結構導論 2008/2/26 * * 1-4 C語言的模組化程式設計-說明 「模組」(Modules)是特定功能的相關資料和函數集合, 程式設計者只需知道模組對外的使用介面(即各模組函數的呼叫方式),就可以使用模組提供的功能, 而不用實際了解模組內部程式碼的實作和內部資料儲存使用的資料結構。 Ch01.資料結構導論 2008/2/26 * 1-4 C語言的模組化程式設計-種類 模組化程式設計(Modular Programming)就是建立相關資料和函數集合的模組,模組主要可以分成兩個部分:介面與實作,如下所示: 模組介面(Module Interface):模組介面是定義模組函數和使用的資料,即定義讓使用此模組的程式可以呼叫的函數和存取的變數資料,在C語言是使用標頭檔.h定義模組介面。 模組實作(Module Implementations):模組的實作部分是模組函數和資料的實際程式碼,程式設計者需要定義哪些函數屬於公開介面,哪些只能在模組程式檔使用,C語言的程式檔案.c可以實作模組的程式碼。 Ch01.資料結構導論 2008/2/26 * 1-4 C語言的模組化程式設計-公開與私用關鍵字 extern和static關鍵字來區分公開或內部使用的函數與變數,如下所示: 在標頭檔(header file)宣告成extern的變數和函數:這是可供其它程式使用的外部函數和變數。 在模組程式檔宣告成static的變數和函數:只能在模組程式檔中使用。 Ch01.資料結構導論 2008/2/26 * 1-5 遞迴函數 1-5-1 遞迴的基礎 1-5

文档评论(0)

2105194781 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档