資料結構 第9章 搜尋.

Slides:



Advertisements
Similar presentations
简单迭代法的概念与结论 简单迭代法又称逐次迭代法,基本思想是构造不动点 方程,以求得近似根。即由方程 f(x)=0 变换为 x=  (x), 然后建立迭代格式, 返回下一页 则称迭代格式 收敛, 否则称为发散 上一页.
Advertisements

2.5 微分及其应用. 三、可微的条件 一、问题的提出 二、微分的定义 六、微分的形式不变性 四、微分的几何意义 五、微分的求法 八、小结 七、微分在近似计算中的应用.
夯实教师教育 办好非师范教育 ---- 以外语专业为例 河北师范大学 李正栓. 1. 坚定不移地实施教师教育 A. 关键词:师范院校 师范院校是以培育师资为目的的教育机构,多属于高等教育 层级。 含 “ 师范大学 ” 或 “ 师范学院 ” 。另外,由师专升为本科的院校 多数更名为 “XX 学院 ”
教育研究课题的实施 北京教育科学研究院 陶文中 第一节 如何制定课题研究计划 (开题论证报告) 一般结构(框架) 1 、课题名称 2 、研究目的和意义 3 、研究的基本内容 ( 1 )理论研究(细分为若干子项目) ( 2 )实践研究( 细分为若干子项目)
1 語音下單代表號 請輸入分公司代碼 2 位結束請按#字鍵 統一證券您好 ﹗ 請輸入分公司代碼結束請按#字鍵,如不知分公司代碼請按*號。 請輸入您的帳號後 7 位 結束請按#字鍵 請在聽到干擾音時輸入您的密碼結束請按#字鍵 主選單一覽表 委託下單請按 1 ; 取消下單請按 2 成交回報請按.
人權教育融入教學與 法治教育 彭巧綾 蔡永棠 閱讀理解 六頂思考帽 以概念圖整理閱讀理解 指導學生運用關鍵詞,繪製概 念圖,並分享修正。
义务教育课程标准实验教材 四年级下册 语文园地六 词语盘点 习作 口语交际 我的发现 日积月累 展示台.
被 江 泽 民 残 酷 迫 害 致 死 的 法 轮 功 学 员 李竟春,女,1954年3月16日出生,江西省九江市人。于2000年12月18日到北京证实大法,关押在北京市门头沟看守所遭受非人的迫害。在狱中李竟春绝食抗争被管教骗喝一瓶“可疑的豆浆”后一直咳嗽不断,发烧呕吐,吐出白色有强烈异味液体,于2000年1月4日死亡。
第八编 清代文学 清代文学绪论 第一章 清代诗词文 第二章 《长生殿》与《桃花扇》 第三章 《聊斋志异》 第四章 《儒林外史》
专利技术交底书的撰写方法 ——公司知识产权讲座
精神疾病与社区处理.
視力不良學(幼)童 篩檢與矯治常見問題 長庚醫院 兒童眼科 楊孟玲 醫師.
Chapter 10 搜尋(search).
描写家乡的一处景物.
问卷调查法.
我征服了黃山 林達的黃山之旅 2006春.
第三章 企业主要经济业务核算 学习目的和要求:通过对工业企业的主要经济业务的了解,要求学生掌握、巩固帐户与借贷记帐法的相关知识及其运用,并进一步了解和熟悉会计核算方法。 本章重点与难点问题是:企业在各阶段的业务核算 内容提要:本章首先介绍企业在各不同阶段(企业创立阶段、企业供应阶段、企业生产阶段、企业销售阶段等)的业务内容;然后介绍了各阶段业务核算所需设置的帐户及其帐户的功能与结构;最后举例说明各阶段业务的核算。
创新大赛经验浅谈 高二(18)班 黄佳淇.
校本培训 常州市新北区新桥实验小学 金文英 团体活动助人成长 校本培训 常州市新北区新桥实验小学 金文英
2014年造价员资格考试 建设工程造价管理基础知识 徐建元.
教師權益─ 退撫制度變革修法 吳忠泰 退撫制度變革修法電子檔可在全教總網站下載分享
【 准 备 上 课 啦 】 心 境 —— 快 乐 源 泉 学习 — 悦于心 聚于魂 化于行.
第七章 无形资产.
《幼儿园模拟教学》(第一章 第二章) 呼伦贝尔学院 教育科学学院 学前教育教研室.
广州事业单位面试专项练习 主讲:蔡厚佳 微博:腰果公考菜菜爱做梦 2016年04月29日-05月05日.
第 九 章 搜尋(Search) 課程名稱:資料結構 授課老師:_____________.
青岛市农村实用人才高等学历教育 2013年秋季入学测试考前练兵 语文----写作部分辅导
房地产开发项目经营情况 (X204-1表).
幼儿园现代管理的思考与实践.
童軍志工服務報告 陽光基金會 愛心捐活動 第2組 報告人:秦惠芬 製作人:江妮錡.
面试与面试技术.
函 文种常识 结构写法 注意事项 例文赏析与训练.
学习情境四 旅行社接待业务的管理 【学习目标】 了解旅行社接待业务的性质与特点; 熟悉旅行社门市接待业务与管理;
第一章信託法 第一節 信託契約 第二節 信託財產 第三節 受益人 第四節 受託人 第五節 信託關係之消滅.
邯郸摸底考试网阅分析25题(3) 河北广平县第一中学 于沙.
发生火灾怎么办 后窑镇中心小学 吴琼.
太阳能概述   太阳能是由太阳内部热核反应所释放出的光能、热能及辐射能量。它每年辐射到地球上的能量达1813亿吨标准煤,相当于全世界年需要能量总和的5000倍,是地球上最大的能源。 广东工业大学 材料能源学院.
强化。心系.
年金改革的是與非 吳忠泰.
勞保局人員.
走向对话的地理课堂教学 海盐高级中学 徐海群.
Performance Evaluation
仿写训练 华罗庚实验学校西宁分校 钟卫平.
第五课 小设计师.
三、进项转出.
求职信.
102年度「農業旅遊特色商品發展暨行銷活動計畫」研提原則說明
企业秘书写作 主讲教师:黄巨龙.
四种命题 班级:C274 指导教师:钟志勤 任课教师:颜小娟.
十二章 罪数形态.
任务驱动:请阅读下文思考及完成以下任务 环节一、导入新课,激发兴趣
项目四 出入境计调操作流程.
名师垂教 阳痿1年余.
(和上个月比较,上个月用电量是单位“1”)
第五章 定积分及其应用.
前不久看到了这样一则报道:某个大学校园里,一个大学生出寝室要给室友留一张字条,告诉他钥匙放在哪里。可是“钥匙”两个字他不会写,就问了其他寝室的同学,问了好几个,谁也不会写,没办法,只好用“KEY”来代替了。 请大家就此事发表一下自己看法。
長者日 每年 11月第三個星期日 表達對長者的敬意 宣傳關懷長者的訊息.
利用共同供應契約 辦理大量訂購流程說明.
Course 4 搜尋 Search.
第十章 排序與搜尋.
第 1 章 演算法分析.
数据结构 第八章 查找.
导数的应用 ——函数的单调性与极值.
107學年度國民中學 學障鑑定個測工作說明 Loading…… 臺東縣特教資源中心.
鄧姚文 資料結構 第一章:基本概念 鄧姚文
Hash(雜湊) 授課者:李驕芸.
資料結構與C++程式設計進階 排序與搜尋 講師:林業峻 CSIE, NTU 6/ 14, 2010.
Hashing Michael Tsai 2013/06/04.
兒童及少年保護、 家庭暴力及性侵害事件、 高風險家庭 宣導與通報
Hashing Michael Tsai 2017/4/25.
Presentation transcript:

資料結構 第9章 搜尋

9-1 循序搜尋 循序搜尋 (sequential search) 非循序搜尋 (nonsequential search)

範例9.1:寫出以 [循序搜尋] 在list[] = {54, 2, 40, 22, 17, 22, 60, 35} 中搜尋22的過程,並計算總共做過幾次比較?

範例9.2:撰寫一個函數實作 [循序搜尋] 並分析其時間複雜度。 int sequential_search(int list[], int n, int key) { int i; for (i = 0; i < n; i++) if (list[i] == key) return i; return -1; }

9-2 二元搜尋 範例9.3:寫出以 [二元搜尋] 在list[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19} 中搜尋15的過程,並計算總共做過幾次比較? 解答:

範例9.5:撰寫一個函數實作 [二元搜尋] 。 int binary_search(int list[], int left, int right, int key) { int middle; if (left <= right){ middle = (left + right) / 2; switch (COMPARE(list[middle], key)){ case -1: return binary_search(list, middle + 1, right, key); case 0: return middle; case 1: return binary_search(list, left, middle - 1, key); } return -1;

範例9.6:證明二元搜尋的時間複雜度為O(log2n)。

9-3 內插搜尋

範例9.8:寫出以 [內插搜尋] 在list[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19} 中搜尋15的過程,並計算總共做過幾次比較?若換成是使用二元搜尋在list[] 中搜尋15,則比較次數又為何? 解答: middle為 於是拿key (15) 和list[5] (15) 做比較,得到兩者相等,故傳回其索引5,比較次數為一次。若換成是使用二元搜尋在list[] 中搜尋15,則比較次數為三次 。

範例9.9:寫出以 [內插搜尋] 在list[] = {3, 4, 7, 24, 25, 30, 77, 88, 90} 中搜尋30的過程,並計算總共做過幾次比較?若換成是使用二元搜尋在list[] 中搜尋30,則比較次數又為何? 解答: middle分為 於是拿key (30) 和list[5] (30) 做比較,得到兩者相等,故傳回其索引5,比較次數為四次。若換成是使用二元搜尋在list[] 中搜尋30,則比較次數為三次。

9-4 雜湊法 相關名詞: 雜湊法的優點 雜湊函數 (hash function) 雜湊表 (hash table) 桶子 (bucket) 9-4 雜湊法 相關名詞: 雜湊函數 (hash function) 雜湊表 (hash table) 桶子 (bucket) 碰撞 (collision) 槽 (slot) 溢位 (overflow) 同義字 (synonym) 叢集 (cluster) 負載密度/負載因素 (loading density/loading factor) 識別字 (identifier) 識別字密度 (identifier density) 雜湊法的優點

範例9.11:假設雜湊表是由26個桶子所組成,每個桶子是由2個槽所組成,而鍵值則是包含1個大寫英文字母和1個數字的字串,試想出一個雜湊函數將 {A1, B1, C1, A2, D1, B2, C2, E1} 等8個鍵值存放到雜湊表。

9-4-1 雜湊函數 除法 f(x) = x % b 舉例來說,假設有15筆記錄,鍵值分別為0 ~ 14,桶子有5個,位址分別為0 ~ 4,則分配結果如下。

平方後取中間值法 舉例來說,假設鍵值為1234,雜湊表的大小為1000,而1234的平方為1522756,那麼可以從中選取千百十等三位數275,做為該鍵值存放在雜湊表內的位址。

折疊法 移動折疊法 (shift folding):假設鍵值x為12345678231430,我們將它分割為x1 = 123、x2 = 456、x3 = 782、x4 = 314、x5 = 30,然後計算x1 + x2 + x3 + x4 + x5 = 123 + 456 + 782 + 314 + 30 = 1705,得到鍵值x在雜湊表內的位址為1705。 邊界折疊法 (folding at the boundaries) :假設鍵值x為12345678231430,我們將它分割為x1 = 123、x2 = 456、x3 = 782、x4 = 314、x5 = 30,接著將偶數部分x2、x4、…的位數反轉過來成為x2’ = 654、x4’ = 413,、然後計算x1 + x2’ + x3 + x4’ + x5 = 123 + 654 + 782 + 413 + 30 = 2002,得到鍵值x在雜湊表內的位址為2002。

位數分析法 舉例來說,假設鍵值如下表所示,雜湊表的大小為100,那麼所需的位數為兩位,於是從中刪除分佈較不均勻的位數,包括第1、2、3、5位 (從左邊算起),只取第4位和第6位,得到結果如下。

9-4-2 處理碰撞 開放位址法 (open addressing) 鏈結法 (chaining) 9-4-2 處理碰撞 開放位址法 (open addressing) 線性探測法 (linear probing) 二次方程探測法 (quadratic probing) 重雜湊法 (rehashing) 鏈結法 (chaining)

範例9.13:假設雜湊表ht的大小為13,試使用 [線性探測法] 將13、14、26、39、45、32等鍵值放入雜湊表。

範例9.14:撰寫一個函數實作 [線性探測法]。 int linear_probe(int ht[], int key) { int address; address = key % b; while(ht[address] != EMPTY) address = (address + 1) % b; ht[address] = key; }

範例9.15:撰寫一個函數在使用線性探測法的雜湊表內搜尋鍵值。 int linear_search(int ht[], int key) { int address; address = key % b; while(ht[address] != key){ address = (address + 1) % b; if (ht[address] == EMPTY || address == key % b) return -1; } return address;

二次方程探測法 (f(x) ± i2) % b 舉例來說,假設雜湊表的內容如下,現在要放入鍵值19,而f(19) = 19 % 13 = 6,此時發生碰撞,於是往位址ht[7] ((6 + 12) % 13) 探測,仍發生碰撞,於是往位址ht[5] ((6 - 12) % 13) 探測,故將鍵值19放入ht[5],探測次數為兩次。

重雜湊法 範例9.16:假設雜湊表ht的大小為13,第一、二、三個雜湊函數f1(x)、f2(x)、f3(x)分別如下,試使用 [重雜湊法] 將13、14、26、39、40等鍵值放入雜湊表。 f1(x) = x % 13 f2(x) = (f1(x) * x + 7) % 13 f3(x) = (f2(x) * x + 3) % 13

鏈結法 範例9.17:假設雜湊表ht的大小為13,雜湊函數f(x) = x % 13,試使用 [鏈結法] 將13、14、26、60、39、40、86、15、25等鍵值放入雜湊表。