最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 跳轉(zhuǎn)搜索的實現(xiàn)示例

 更新時間:2024年04月01日 11:14:12   作者:csdn_aspnet  
與二分搜索一樣,跳轉(zhuǎn)搜索是一種針對排序數(shù)組的搜索算法,本文主要介紹了java 跳轉(zhuǎn)搜索的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧

與二分搜索一樣,跳轉(zhuǎn)搜索是一種針對排序數(shù)組的搜索算法?;舅枷胧峭ㄟ^按固定步驟向前跳躍或跳過某些元素來代替搜索所有元素來檢查更少的元素(比線性搜索)。例如,假設我們有一個大小為 n 的數(shù)組 arr[] 和一個大小為 m 的塊(要跳轉(zhuǎn))。然后我們在索引 arr[0]、arr[m]、arr[2m]…..arr[km] 等中搜索。一旦找到區(qū)間 (arr[km] < x < arr[(k+1)m]),我們就從索引 km 執(zhí)行線性搜索操作來查找元素 x。讓我們考慮以下數(shù)組:(0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610)。數(shù)組長度為 16。

假設要跳轉(zhuǎn)的塊大小為 4,跳轉(zhuǎn)搜索將找到值 55,步驟如下:

步驟 1:從索引 0 跳轉(zhuǎn)到索引 4;

步驟2:從索引4跳轉(zhuǎn)到索引8;

步驟3:從索引8跳轉(zhuǎn)到索引12;

步驟 4:由于索引 12 處的元素大于 55,因此我們將跳回到索引 8。

步驟 5:從索引 8 執(zhí)行線性搜索以獲取元素 55。

與線性搜索和二分搜索相比的性能:如果我們將它與線性搜索和二分搜索進行比較,那么它比線性搜索更好,但不比二分搜索更好。

性能遞增順序為:線性搜索 < 跳轉(zhuǎn)搜索 < 二分搜索

要跳過的最佳塊大小是多少?在最壞的情況下,我們必須進行 n/m 次跳轉(zhuǎn),如果最后檢查的值大于要搜索的元素,我們會為線性搜索多執(zhí)行 m-1 次比較。因此,最壞情況下的總比較次數(shù)將為((n/m) + m-1)。當 m = ?n 時,函數(shù) ((n/m) + m-1) 的值最小。因此,最佳步長為 m = ?n。 

算法步驟

1、跳轉(zhuǎn)搜索是一種通過跳過數(shù)組中的某些步驟來查找已排序數(shù)組中的特定值的算法。
2、步驟由數(shù)組長度的 sqrt 確定。 

以下是跳躍搜索的分步算法:

1、通過取數(shù)組 n 長度的 sqrt 來確定步長 m。
2、從數(shù)組的第一個元素開始,跳 m 步,直到該位置的值大于目標值。

  • 一旦找到大于目標的值,就從上一步開始進行線性搜索,直到找到目標或者明確目標不在數(shù)組中。
  • 如果找到目標,則返回其索引。如果沒有,則返回 -1 表示在數(shù)組中未找到目標。 

示例:

// Java program to implement Jump Search.
public class JumpSearch
{
    public static int jumpSearch(int[] arr, int x)
    {
        int n = arr.length;
 
        // Finding block size to be jumped
        int step = (int)Math.floor(Math.sqrt(n));
 
        // Finding the block where element is
        // present (if it is present)
        int prev = 0;
        for (int minStep = Math.min(step, n)-1; arr[minStep] < x; minStep = Math.min(step, n)-1)
        {
            prev = step;
            step += (int)Math.floor(Math.sqrt(n));
            if (prev >= n)
                return -1;
        }
 
        // Doing a linear search for x in block
        // beginning with prev.
        while (arr[prev] < x)
        {
            prev++;
 
            // If we reached next block or end of
            // array, element is not present.
            if (prev == Math.min(step, n))
                return -1;
        }
 
        // If element is found
        if (arr[prev] == x)
            return prev;
 
        return -1;
    }
 
    // Driver program to test function
    public static void main(String [ ] args)
    {
        int arr[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21,
                    34, 55, 89, 144, 233, 377, 610};
        int x = 55;
 
        // Find the index of 'x' using Jump Search
        int index = jumpSearch(arr, x);
 
        // Print the index where 'x' is located
        System.out.println("\nNumber " + x +
                            " is at index " + index);
    }
} 

輸出:

數(shù)字 55 位于索引 10
時間復雜度:O(?n) 
輔助空間:O(1)

跳轉(zhuǎn)搜索的優(yōu)點:

1、比元素均勻分布的數(shù)組的線性搜索更好。
2、與大型數(shù)組的線性搜索相比,跳躍搜索的時間復雜度較低。
3、跳躍搜索的步數(shù)與數(shù)組大小的平方根成正比,對于大型數(shù)組來說效率更高。
4、與二分搜索或三元搜索等其他搜索算法相比,它更容易實現(xiàn)。
5、跳轉(zhuǎn)搜索適用于元素有序且均勻分布的數(shù)組,因為它可以在每次迭代時跳轉(zhuǎn)到數(shù)組中更接近的位置。

要點:

1、僅適用于排序數(shù)組。
2、所要跳轉(zhuǎn)的塊的最佳大小是(?n)。這使得跳轉(zhuǎn)搜索的時間復雜度為O(?n)。
3、跳轉(zhuǎn)搜索的時間復雜度介于線性搜索 ((O(n)) 和二分搜索 (O(Log n)) 之間。
4、二分查找比跳轉(zhuǎn)查找要好,但是跳轉(zhuǎn)查找的優(yōu)點是我們只需要回溯一次(二分查找可能需要最多 O(Log n) 次跳轉(zhuǎn),考慮要查找的元素是最小元素或者更大的元素的情況比最小的)。因此,在二分搜索成本高昂的系統(tǒng)中,我們使用跳轉(zhuǎn)搜索。 

到此這篇關(guān)于java 跳轉(zhuǎn)搜索的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)java 跳轉(zhuǎn)搜索內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java基本事件處理機制解析

    java基本事件處理機制解析

    這篇文章主要介紹了java基本事件處理機制解析,?Java事件處理機制是一種用于處理用戶交互和系統(tǒng)事件的編程模型,它基于事件驅(qū)動的思想,通過監(jiān)聽和響應事件來實現(xiàn)程序的交互性和動態(tài)性,需要的朋友可以參考下
    2023-10-10
  • java swing實現(xiàn)簡單的五子棋游戲

    java swing實現(xiàn)簡單的五子棋游戲

    這篇文章主要為大家詳細介紹了java swing實現(xiàn)簡單的五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 簡單講解在Java編程中實現(xiàn)設計模式中的單例模式結(jié)構(gòu)

    簡單講解在Java編程中實現(xiàn)設計模式中的單例模式結(jié)構(gòu)

    這篇文章主要介紹了簡單講解在Java編程中實現(xiàn)設計模式中的單例模式結(jié)構(gòu),設計模式是最基本直白簡單的一種設計模式,需要的朋友可以參考下
    2016-04-04
  • SpringMVC請求參數(shù)的使用總結(jié)

    SpringMVC請求參數(shù)的使用總結(jié)

    在日常使用SpringMVC進行開發(fā)的時候,有可能遇到前端各種類型的請求參數(shù),本文主要接介紹了SpringMVC請求參數(shù)的使用總結(jié),感興趣的可以了解一下
    2021-06-06
  • SpringBoot中服務消費的實現(xiàn)

    SpringBoot中服務消費的實現(xiàn)

    本文主要介紹了SpringBoot中服務消費的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Java設計模式之單例模式示例詳解

    Java設計模式之單例模式示例詳解

    單例模式是最簡單也是最基礎的設計模式之一,單例模式確保某個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。本文將通過一些示例代碼為大家詳細介紹一下單例模式,感興趣的可以了解一下
    2021-12-12
  • Java請求Http接口OkHttp超詳細講解(附帶工具類)

    Java請求Http接口OkHttp超詳細講解(附帶工具類)

    這篇文章主要給大家介紹了關(guān)于Java請求Http接口OkHttp超詳細講解的相關(guān)資料,OkHttp是一款優(yōu)秀的HTTP客戶端框架,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • Java中的雙重檢查(Double-Check)詳解

    Java中的雙重檢查(Double-Check)詳解

    這篇文章主要為大家詳細介紹了Java中的雙重檢查(Double-Check),感興趣的小伙伴們可以參考一下
    2016-02-02
  • 聊聊@value注解和@ConfigurationProperties注解的使用

    聊聊@value注解和@ConfigurationProperties注解的使用

    這篇文章主要介紹了@value注解和@ConfigurationProperties注解的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 使用JPA單項一對多外鍵關(guān)聯(lián)

    使用JPA單項一對多外鍵關(guān)聯(lián)

    這篇文章主要介紹了使用JPA單項一對多外鍵關(guān)聯(lián),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論

克拉玛依市| 临清市| 读书| 清镇市| 翁源县| 南通市| 老河口市| 上犹县| 沙雅县| 岑溪市| 孙吴县| 洛扎县| 井陉县| 峡江县| 侯马市| 阿瓦提县| 广州市| 淳化县| 河源市| 陇川县| 新平| 尚义县| 尼木县| 溧水县| 光泽县| 涡阳县| 锦州市| 东兰县| 察哈| 伊通| 霞浦县| 镇康县| 永修县| 教育| 太和县| 政和县| 慈利县| 呼玛县| 仙桃市| 武清区| 大洼县|