- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
淘汰与搜寻法
演算法 _ 第四章 演算法 _ 第四章 * 演算法 _ 第四章 * 淘汰與搜尋法 4 * 演算法 _ 第四章 4-* 什麼叫淘汰與搜尋法 每一回合的處理都把搜尋的範圍減少一個固定比例 分成三個主要步驟: 如果要處理的資料量已經夠少,那麼用直接的方式解決;否則,把輸入資料分解成至少兩個獨立的小集合 淘汰掉一定不存在我們要的解的集合 針對可能包含我們要的解的集合遞迴地做步驟(2)的處理直到可能包含我們要的解的集合已經小到可以用步驟(1)的直接處理 * 演算法 _ 第四章 4-* 哪些問題適用淘汰與搜尋法? 如果一個問題的輸入資料可以予以刪除一些而不會影響到我們最後要的解,那麼這個問題就有可能適合用淘汰與搜尋法 * 演算法 _ 第四章 4-* 找劣幣問題 給定一個裝有 32 個硬幣的袋子,硬幣當中可能有一個是劣幣 不僅如此,我們還知道劣幣的重量比真幣輕 我們的工作是判斷袋子裡是不是有劣幣。如果有的話,找出它 * 演算法 _ 第四章 4-* 找劣幣問題 比較簡單,我們已知劣幣是比較輕的 但是,可能都是真幣 * 演算法 _ 第四章 4-* 找劣幣問題 找劣幣問題 * 演算法 _ 第四章 4-* * 演算法 _ 第四章 4-* 找劣幣問題-更好的演算法 找劣幣問題-更好的演算法 * 演算法 _ 第四章 4-* * 演算法 _ 第四章 4-* 找劣幣問題 複雜度 T(n) = T(n/2) + a = (T(n/4) + a) + a = (T(n/8) + a) + a +a = ??? = T(1) + a?log2 n = b + a?log2 n = O(log n) T(n) = T(n/3) + a = (T(n/9) + a) + a = (T(n/27) + a) + a +a = ??? = T(1) + a?log3 n = b + a?log3 n = O(log n) * 演算法 _ 第四章 4-* 二元搜尋 middle := (left + right)/2 ? 如果越大的值被搜尋的機率越高 middle := 2?(left + right)/3 ? * 演算法 _ 第四章 4-* 選出第 k 小的元素 給定一個含有 n 個元素的陣列 a[n],這個問題要我們找出第 k 小的元素 例如,[12, 4, 5, 4, 5, 10, 2, 20] 如果 k = 1,我們得傳回2 如果k = 8,我們得傳回8 如果k = 6,我們得傳回10 如果k = 2,我們得傳回4 * 演算法 _ 第四章 4-* 選出第 k 小的元素 中位數:k = ?n/2? 我們可以先將 n 個元素排序過,然後再取出 a[k] 這麼做的話,我們至少需要 O(n log n) 的時間,因為排序問題的複雜度下限是 ?(n log n) 我們以下要介紹的淘汰與搜尋法卻可以在 O(n) 的時間內就把這個問題解決掉 * 演算法 _ 第四章 4-* 選出第 k 小的元素 假設我們隨意地從 S 中選出一個元素 v,利用 v 將集合 S 分割成三個子集合:小於 v 的元素、等於 v 的元素、以及大於 v 的元素 * 演算法 _ 第四章 4-* 選出第 k 小的元素 由於?SL?+?Sv?= 5,我們所要的第 8 小元素因此是在 SR 裡,而且是 SR 裡的第 3小元素 一般的情況 * 演算法 _ 第四章 4-* 選出第 k 小的元素 從 S 分割出 SL、Sv、SR 只需要 O(n) 的時間 但是,我們卻因此可以將搜尋範圍由原本的 S 縮小成 SL 或 SR 如何選擇 v? * 演算法 _ 第四章 4-* 最差情況下的最佳化演算法 n = 25且a = [2, 6, 8, 1, 4, 9, 20, 6, 22, 11, 9, 8, 4, 3, 7, 8, 16, 11, 10, 8, 2, 14, 15, 1, 12] 先將這 25 個元素分成 5 組:[2, 6, 8, 1, 4]、[9, 20, 6, 22, 11]、[9, 8, 4, 3, 7]、[8, 16, 11, 10, 8]、與[2, 14, 15, 1, 12] 這五組數字的中位數分別是:4, 11, 7, 10, 12 再取這五個中位數 [4, 11, 7, 10, 12] 的中位數是:10 這便是我們所選擇的 v 值 SL = {2, 6, 8, 1, 4, 9, 6, 9, 8, 4, 3, 7, 8, 8, 2, 1}、Sv = {10}、而SR = {20, 22, 11, 16, 11, 14, 15, 12} * 演算法 _ 第四章 4-* 最差情況下的最佳化演算法 * 演算法 _ 第四章 4-* 最差情況下的最佳
文档评论(0)