前言 今天要來介紹 費式搜尋法 ,老實說我完全沒印象以前老師有教過這個,自己看了兩天才終於看懂,看起來很複雜,事實上真的很複雜XD 生活常識 你有欣賞過花朵嗎?有沒有注意到,有些花的花瓣大多是 3 瓣或 5 瓣,也有 8 瓣或 13 瓣,為什麼會這些數字這麼常出現呢?似乎是大自然的一種法則 圖片來源: https://www.pexels.com/zh-tw/photo/4621593/ 或是某些建築例會呈現 黃金比例 ,其實都是 費氏級數 的呈現 圖片來源: https://unsplash.com/photos/zHDiLstmQwo 專業知識 - 費氏級數 在介紹費式搜尋法之前,先來了解一下 費氏級數 或稱 斐波那契數列 公式 根據公式只會用到加減運算,不需要進行乘法與除法,所以效率會比較好 數列 數列有 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,...,除了最前面的兩個數值 0 與 1 之外,其他數值皆為前兩個的相加,例如 8 = 5 + 3 專業知識 - 費式搜尋法 Fibonacci Search 費式搜尋法 又稱 費伯那搜尋法 ,跟內插搜尋法一樣會透過 某個公式 來限縮搜尋範圍,內插搜尋法是透過斜率公式,而費式搜尋法是使用 費式級數 來分割,可參考 維基百科 的說明 費式樹 特性 費氏樹的左右子樹皆為費氏樹 父節點與子節點的 相差值 會等於某一個費氏數值 左節點 的數值會 小於 父節點 右節點 的數值會 大於等於 父節點 二元樹轉費氏樹 先將費氏級數畫成二元樹 會發現左圖的二元樹節點到F(1)就會停止,因為沒有符合 1 小於 2 了,就沒有符合 n 大於等於 2 的公式了,再將數列中的數值逐一帶入二元樹中,觀察右圖即可發現 樹根的數值 = 左右節點相加的數值 資料置放的順序 存入資料數據之前,要先取得資料置放的順序,使用 中序 走訪費氏樹,可觀察到 父節點 與 左右節點 之間有一個固定的 相差值 相差值 公式如下,其相差值為某一個費氏級數 例子 將要搜尋的資料 由小至大 放到 費式樹 中,例如,有一由小到大排列好的數列:2, 5, 17, 26, 38, 42, 59, 60, 65 ,72 ,87, 93,共 12 筆資料 節點數量 我們要如何知道這些數值要 使用多少節點 來儲存呢?可透過以下公式求得...