日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

跳跃搜索

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 跳跃搜索 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

像二進制搜索一樣,跳躍搜索是排序數組的搜索算法。基本思想是通過固定步驟跳過或跳過某些元素代替搜索所有元素來檢查較少的元素(而不是線性搜索)。

例如,假設我們有一個大小為n的數組arr []和塊(要跳轉)的大小m。然后我們搜索索引arr [0],arr [m],arr [2m] ... ..arr [km]等等。一旦我們找到間隔(arr [km] <x <arr [(k + 1)m]),我們從索引km執行線性搜索操作來找到元素x。

我們考慮以下數組:(0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610)。數組的長度為16.跳躍搜索將以下列步驟找到55,假設要跳過的塊大小為4.?

  • 步驟1:從索引0跳轉到索引4;?
  • 步驟2:從索引4跳轉到索引8;?
  • 步驟3:從索引8跳轉到索引16;?
  • 步驟4:由于索引16處的元素大于55,因此我們將返回一步到索引9.?
  • 步驟5:從索引9執行線性搜索以獲取元素55。

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

?

// C++ program to implement Jump Search #include <bits/stdc++.h> using namespace std;int jumpSearch(int arr[], int x, int n) {// Finding block size to be jumpedint step = sqrt(n);// Finding the block where element is// present (if it is present)int prev = 0;while (arr[min(step, n)-1] < x){prev = step;step += 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 == min(step, n))return -1;}// If element is foundif (arr[prev] == x)return prev;return -1; }// Driver program to test function int main() {int arr[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21,34, 55, 89, 144, 233, 377, 610 };int x = 55;int n = sizeof(arr) / sizeof(arr[0]);// Find the index of 'x' using Jump Searchint index = jumpSearch(arr, x, n);// Print the index where 'x' is locatedcout << "\nNumber " << x << " is at index " << index;return 0; }// Contributed by nuclode

輸出:

Number 55 is at index 10

時間復雜度:O(√n)
輔助空間:O(1)

注意:

  • 該查找只針對已經排序的數組。
  • 要跳過的塊的最佳大小是O(√n)。這使得跳躍搜索O(√n)的時間復雜度。
  • 跳躍搜索的時間復雜度在線性搜索((O(n))和二進制搜索(O(Log n))之間。
  • 二進制搜索比跳躍搜索更好,但跳轉搜索具有我們僅遍歷一次的優點(二進制搜索可能需要最多為0(Log n)跳轉),考慮要搜索的元素是最小元素或小于最小的)。因此,在跳回成本高昂的系統中,我們使用Jump Search。

轉載于:https://www.cnblogs.com/wongyi/p/7729755.html

總結

以上是生活随笔為你收集整理的跳跃搜索的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。