日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解Java Fibonacci Search斐波那契搜索算法代碼實現

瀏覽:15日期:2022-08-22 17:32:03

一, 斐波那契搜索算法簡述

斐波那契搜索(Fibonacci search) ,又稱斐波那契查找,是區間中單峰函數的搜索技術。

斐波那契搜索采用分而治之的方法,其中我們按照斐波那契數列對元素進行不均等分割。此搜索需要對數組進行排序。

與二進制搜索不同,在二進制搜索中,我們將元素分成相等的兩半以減小數組范圍-在斐波那契搜索中,我們嘗試使用加法或減法來獲得較小的范圍。

斐波那契數列的公式是:

Fibo(N)=Fibo(N-1)+Fibo(N-2)

此系列的前兩個數字是Fibo(0) = 0和Fibo(1) = 1。因此,根據此公式,該級數看起來像是0、1、1、2、3、5、8、13、21。。。這里要注意的有趣觀察是:

Fibo(N-2) 大約是1/3的 Fibo(N) Fibo(N-1) 大約是2/3的 Fibo(N)

因此,當我們使用斐波那契數列來劃分范圍時,它會以與上述相同的比率進行分割。

二,斐波那契搜索算法代碼實現

/** * * @param integers * @param elementToSearch * @return */ public static int fibonacciSearch(int[] integers, int elementToSearch) { int fibonacciMinus2 = 0; int fibonacciMinus1 = 1; int fibonacciNumber = fibonacciMinus2 + fibonacciMinus1; int arrayLength = integers.length; while (fibonacciNumber < arrayLength) { fibonacciMinus2 = fibonacciMinus1; fibonacciMinus1 = fibonacciNumber; fibonacciNumber = fibonacciMinus2 + fibonacciMinus1; } int offset = -1; while (fibonacciNumber > 1) { int i = Math.min(offset+fibonacciMinus2, arrayLength-1); if (integers[i] < elementToSearch) { fibonacciNumber = fibonacciMinus1; fibonacciMinus1 = fibonacciMinus2; fibonacciMinus2 = fibonacciNumber - fibonacciMinus1; offset = i; } else if (integers[i] > elementToSearch) { fibonacciNumber = fibonacciMinus2; fibonacciMinus1 = fibonacciMinus1 - fibonacciMinus2; fibonacciMinus2 = fibonacciNumber - fibonacciMinus1; } else return i; } if (fibonacciMinus1 == 1 && integers[offset+1] == elementToSearch) return offset+1; return -1; }

三,斐波那契搜索算法總結

首先從找到斐波那契數列中最接近但大于數組長度的數字開始。這fibonacciNumber是在13剛好大于數組長度10時發生的。

接下來,我們比較數組的元素,并根據該比較,執行以下操作之一:

將要搜索的元素與處的元素進行比較fibonacciMinus2,如果值匹配,則返回索引。 如果elementToSearch比當前元素時,我們移動在斐波納契數列上一步,而改變的值fibonacciNumber,fibonacciMinus1與fibonacciMinus2相應。偏移量將重置為當前索引。 如果elementToSearch比當前元素小,我們繼續前進后退兩步在斐波納契數列和改變的值fibonacciNumber,fibonacciMinus1與fibonacciMinus2相應。

輸出結果:

詳解Java Fibonacci Search斐波那契搜索算法代碼實現

時間復雜度

此搜索的最壞情況時間復雜度為O(log(N))。

空間復雜度

雖然我們需要將三個數字保存在斐波那契數列中并要搜索的元素,但我們需要四個額外的空間單位。

對空間的要求不會隨著輸入數組的大小而增加。因此,可以說斐波那契搜索的空間復雜度為O(1)。

當除法運算是CPU要執行操作時,將使用此搜索。二進制搜索之類的算法由于使用除法對數組進行劃分,因此效果較差。

這種搜索的另一個好處是當輸入數組的元素無法放入RAM中時。在這種情況下,此算法執行的局部操作范圍可幫助其更快地運行。

四,跳轉搜索算法完整代碼

If you are interested, try it.

public class SearchAlgorithms { /** * * @param integers * @param elementToSearch * @return */ public static int fibonacciSearch(int[] integers, int elementToSearch) { int fibonacciMinus2 = 0; int fibonacciMinus1 = 1; int fibonacciNumber = fibonacciMinus2 + fibonacciMinus1; int arrayLength = integers.length; while (fibonacciNumber < arrayLength) { fibonacciMinus2 = fibonacciMinus1; fibonacciMinus1 = fibonacciNumber; fibonacciNumber = fibonacciMinus2 + fibonacciMinus1; } int offset = -1; while (fibonacciNumber > 1) { int i = Math.min(offset+fibonacciMinus2, arrayLength-1); if (integers[i] < elementToSearch) { fibonacciNumber = fibonacciMinus1; fibonacciMinus1 = fibonacciMinus2; fibonacciMinus2 = fibonacciNumber - fibonacciMinus1; offset = i; } else if (integers[i] > elementToSearch) { fibonacciNumber = fibonacciMinus2; fibonacciMinus1 = fibonacciMinus1 - fibonacciMinus2; fibonacciMinus2 = fibonacciNumber - fibonacciMinus1; } else return i; } if (fibonacciMinus1 == 1 && integers[offset+1] == elementToSearch) return offset+1; return -1; } /** * 打印方法 * @param elementToSearch * @param index */ public static void print(int elementToSearch, int index) { if (index == -1){ System.out.println(elementToSearch + ' 未找到'); } else { System.out.println(elementToSearch + ' 在索引處找到: ' + index); } } //測試一下 public static void main(String[] args) { int index = fibonacciSearch(new int[]{3, 22, 27, 47, 57, 67, 89, 91, 95, 99}, 67); print(67, index); }}

到此這篇關于詳解Java Fibonacci Search斐波那契搜索算法代碼實現的文章就介紹到這了,更多相關Java Fibonacci Search 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
四虎8848精品成人免费网站| 美女高潮久久久| 1024精品一区二区三区| 亚洲精品91| 奇米色欧美一区二区三区| 免费在线亚洲欧美| 亚洲人成在线网站| 在线观看一区| 亚洲免费资源| 麻豆精品久久久| 欧美成人精品三级网站| 99国产精品私拍| 国产精品夜夜夜| 99久久精品网站| 香蕉久久一区| 偷拍精品精品一区二区三区| 中文一区一区三区免费在线观 | 自拍日韩欧美| 亚洲2区在线| 精品入口麻豆88视频| 亚洲精品国产偷自在线观看| 欧美日韩a区| 日韩欧美看国产| 亚洲一区二区三区四区电影| 国产精品一国产精品k频道56| 久久国产日韩| 日韩精品第一| 精品成人免费一区二区在线播放| 亚洲影院天堂中文av色| 久久91视频| 爽爽淫人综合网网站| 欧美国产日韩电影| 尤物网精品视频| 精品香蕉视频| 午夜电影一区| 欧美日韩亚洲在线观看| 欧美久久久网站| 一区二区小说| 国产精品高清一区二区| 欧美~级网站不卡| 麻豆久久一区二区| 欧美专区18| 91看片一区| 国产精品久久久久久久免费软件 | 国产欧美三级| 老司机久久99久久精品播放免费| 福利精品一区| 国产日韩欧美一区二区三区 | 日韩av一区二区在线影视| 美女久久久久| 日韩1区在线| 国产精品亲子伦av一区二区三区| 性欧美精品高清| 欧美成人基地 | 国产精品高清一区二区| 午夜在线精品偷拍| 日韩精品欧美激情一区二区| 麻豆精品99| 日韩精品中文字幕吗一区二区| 午夜免费一区| 亚洲不卡系列| 日本久久黄色| 久久久国产精品网站| 日韩免费精品| 视频一区二区三区入口| 999久久久精品国产| 国产成人精品一区二区三区免费 | 激情国产在线| 久久中文字幕导航| 国产一区 二区| 偷拍亚洲精品| 伊人国产精品| 美女久久网站| 国产精品普通话对白| 精品中文字幕一区二区三区av| 波多视频一区| 97精品中文字幕| 欧美国产亚洲精品| 日本成人中文字幕在线视频| 伊人久久一区| 夜夜精品视频| 红桃视频国产精品| 蜜臀91精品国产高清在线观看| 日韩久久视频| 日韩中文字幕高清在线观看| 一区二区精品伦理...| 国产一区精品福利| 国际精品欧美精品| 国产精品sm| 国产精品久久久亚洲一区| 国产欧美日韩在线一区二区| 欧美日韩xxxx| 国产精品99久久免费观看| 国产精品成人国产| 国产九一精品| 国产麻豆精品| 久久免费福利| 国产成人1区| 香蕉视频亚洲一级| 欧美日韩中文字幕一区二区三区| 欧美日韩色图| 午夜在线精品偷拍| 亚洲免费观看高清完整版在线观| 涩涩涩久久久成人精品| 欧美日韩18| 麻豆一区二区99久久久久| 精品精品久久| 日韩欧美精品综合| 欧美日韩国产在线观看网站| 99视频+国产日韩欧美| 免费看欧美美女黄的网站| 免费成人在线观看| 日韩激情精品| 久久香蕉精品香蕉| 少妇久久久久| 在线综合欧美| 日本成人中文字幕| 国产福利一区二区三区在线播放| 丁香婷婷久久| 不卡中文字幕| 亚洲精品黄色| 国产精品一区二区三区美女 | 美女av一区| 中文一区一区三区高中清不卡免费| 久久精品影视| 一区二区三区网站| 欧美日韩一区二区三区在线电影| 欧美国产另类| 久久狠狠婷婷| 亚洲一级淫片| 欧美激情视频一区二区三区免费| 岛国av免费在线观看| 欧美日一区二区| 日韩欧美三区| 97精品97| 日韩午夜一区| 国产亚洲字幕| 亚洲精品在线影院| 免费黄网站欧美| 久久av资源| 欧美日韩在线二区| 亚洲精品系列| 国产精品15p| 不卡在线一区| 国产精品宾馆| 亚洲天堂久久| 久久精品999| 欧美日韩在线二区| 青青草视频一区| 国产99精品一区| 日韩高清在线不卡| 色婷婷久久久| 日韩欧美中文字幕一区二区三区| 国产精品久久久久久久免费观看| 久久亚洲国产精品一区二区| 欧美aⅴ一区二区三区视频| 欧美福利在线| 久久xxx视频| 亚洲精品一区二区在线看| 欧美日韩伊人| 九色精品91| 久久免费福利| 在线观看亚洲精品福利片| 97精品视频在线看| 日本免费一区二区视频| 天堂av在线| 日本少妇精品亚洲第一区| 国产99亚洲| 国产伊人久久| 日韩一区免费| 自拍日韩欧美| 精品国产欧美日韩一区二区三区| 欧美综合二区| 日韩在线观看| 国产精品亚洲欧美日韩一区在线| 欧美精选一区二区三区| 国产精品久久久久久久久久齐齐| 欧美特黄一区| 成人三级高清视频在线看| 日韩精品中文字幕吗一区二区| 三上悠亚国产精品一区二区三区| 国产欧美激情| 亚洲精品黄色| 国产精品日本| 久久久精品久久久久久96 | 日韩av专区| 久久精品99国产精品日本| 久久亚洲国产精品一区二区| 午夜久久中文| 麻豆精品视频在线观看| 偷拍亚洲精品| 欧美日韩免费观看一区=区三区| 国产一区精品福利| 国产日产精品_国产精品毛片| 午夜精品免费| 色天使综合视频| 美女av在线免费看| 国产精品大片免费观看| 亚洲影院天堂中文av色| 欧美日韩日本国产亚洲在线|