费伯那西搜寻法.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
費伯那西搜尋法 定義 費氏搜尋法和二元搜尋法十分類似 是將二元搜尋的中分方式,改變成費氏級數: 0,1,1,2,3,5,8,13,21,34,55,…。 其定義如下: F0 = 0; F1 = 1; Fi = Fi -1+Fi -2,i≧2。 它的好處是在搜尋過程中,只需用到加減法而不必用到除法,如此對於程式的效率有很大的幫助。 費氏搜尋樹 它是以費氏級數的特性建造的二元樹。 假設有F(n)-1筆由小至大排列的整數資料 若其排列的方式如下圖所示,則可它為n級完整費氏樹。 分成根節點、左子樹及右子樹三部分 左子樹的節點數為F(n-1)-1 右子樹的節點數為F(n-2)-1 各子樹仍為n-1級和n-2級的費氏樹 例:n=7,F(7)-1 =20 演算法 =>C語言程式碼 int fibsch(int a[ ], int n, int key) { int i, p, q, b ; b = chkfib( n+1 ) ; i = fib(b – 1) – 1 ; p = fib(b – 2) ; q = fib(b – 3) ; while (p = 0 q = 0) { if (key = = a[i ] { i - = q ; t = p ; p = q ; q = t – p ; } else { i + = q ; p - = q ; q - = p ; } } return(-1); } =>時間複雜度分析 【分析】 平均而言,費氏法的比較次數會少於二元搜尋法,但最壞的情況下則遜於二元法。其平均時間為O(log2N)。 程式實作 #include stdio.h void main ( ) { int data [10] = {75, 33, 98, 44, 56, 24, 65, 48, 83, 12} int i, input, p, q, b ; printf ( “\n Fibonacci search \n”) ; printf ( “\nData: “ ) ; for ( i= 0; i 10; i + +) { printf ( “%d “, data [i] ); puts(“ “); printf ( “\nPlease enter a number from data: “ ) ; scanf ( “%d”, input); printf ( “\nSearch…..\n” ) ; } 雜湊搜尋法 (Hashing) 定義 雜湊搜尋法是透過一個數學函數來計算或轉換一個鍵值所對應的位址,這種搜尋可以直接且快速的找到鍵值所放的地址,再者,任何透過雜湊搜尋的檔案皆不須經過事先的排序。也就是可以直接以下列方式搜尋資料: 鍵值 ---> 雜湊函數 ---> 位址 雜湊法又可稱為赫序法或散置法 雜湊法是將資料的鍵值或識別字經由一個已設計好的數學公式,將原來的鍵值轉換成對應的儲存位址。 是一種將鍵值轉換成位址的方法 一般而言,在有限的記憶體中,使用雜湊法能夠快速的建檔、插入、刪除、搜尋及更新。 雜湊法的優點 檔案不需事先排序過 在沒有碰撞及溢位的情形下,只需一次讀取即可,且其搜尋速度與資料量的多少無關; 保密性高,若不知散置函數,則無法擷取資料; 可做資料壓縮,利用適當的赫序函數,可將資料壓縮到一個較小的範圍內,節省空間。 雜湊函數 雜湊搜尋法是透過一個數學函數來計算或轉換一個鍵值所對應的位址 必須符合兩項特點 計算速度要快 碰撞頻率儘量小 雜湊函數的選取通常是考慮能否將關鍵值轉換索引地址時均勻地散開。 若關鍵值是字串,必須將字串根據ASCII碼轉換成數目。 雜湊(赫序)函數取得方式 除法(Division) 平方取中法(Mid-Square) 折疊法(Folding) 抽取法(Extraction) 乘法(Mutiplication) 基數法(Radix Method) 位數分析法(Digit Analysis) 雜湊表(hash table) 雜湊搜尋法是透過一個數學函數將關鍵值映射成表格之索引值,該關鍵值之記錄是依索引位置存放在表格內,此表格稱之為雜湊表 雜湊表格通常用來達成像字典般功能之資料結構。 例如拼字檢查,百科字典載入器之地址連結,編譯器裡的符號表,保留字表等查尋。例如學生檔案表格,以學號為關鍵值,姓名及平均成績為其欄位。 抽象資料型態(ADT) 一般表格的抽象資料型態(ADT)共有7個方法(子程序): Initialize() 事後狀態:表格是空的。 Isempty() 事後狀態:若表格是空的傳回True,反之傳回False。 size() 事後狀態:傳回表格的總資料量。 Search(target, Found) 事後狀態:若target的key在表格查

文档评论(0)

wumanduo11 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档