1.软文推荐

2.软文推荐

3.软文推荐

Jump Search 跳跃搜索算法跟二分查找算法类似,它也是针对有序序列的查找,只是它是通过查找比较少的元素找到目标。当然它需要通过固定的跳跃间隔,这样它相比二分查找效率提高了很多。

例如,假设我们有一个大小为n的数组arr []和块(要跳转)的大小m。然后我们搜索索引arr [0],arr [m],arr [2m] … ..arr [km]等等。一旦我们找到间隔(arr [km]

我们考虑以下数组:(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 
using namespace std;

int jumpSearch(int arr[], int x, int n)
{
// Finding block size to be jumped
int step = sqrt(n);

// Finding the block where element is
// present (if it is present)
int prev = 0;
while (arr[min(step, n)-1] if (prev >= n)
return -1;
}

// Doing a linear search for x in block
// beginning with prev.
while (arr[prev] if (prev == min(step, n))
return -1;
}
// If element is found
if (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 Search
int index = jumpSearch(arr, x, n);

// Print the index where 'x' is located
cout "
Number " " is at 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。

本文来源:www.lxlinux.net/7240.html,若引用不当,请联系修改。

相关文章 8

1

详解vue-router使用实例 2分钟前

vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。vue的单页面应用是基于路由和组件的,路由用于设定访...

2

宿迁高防服务器(宿迁人防设备有限公司) 5分钟前

目录:1、服务器如何防御ddos攻击?2、什么是高防BGP3、高防服务器的作用是什么?4、什么是高防?服务器5、国内哪家高防服务器好用?服...

3

Linux系统下使用GDB调试程序 8分钟前

gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具,GDB主要来调试C/C++语言写的程序,当然也就可以调试其他语言程序,下面良许教程...

4

deepvm(Deepvm测评) 9分钟前

目录:1、vm虚拟机安装GHOST XP后重启没发现系统是怎么回事?2、effort是什么意思?3、如何安装深度deepin 国产Linux教程 主要操作如下4、怎样...

5

详解Android root 原理 11分钟前

0x00 关于root linux和类Unix系统的最初设计都是针对多用户的操作系统,对于用户权限的管理很非常严格的,而root用户(超级用户)就是整个系...

6

Linux创建目录命令 12分钟前

Linux下如何创建目录?在Linux中创建目录非常简单,只需要使用使用 mkdir 命令即可,下面一起来看一下Linux创建目录命令具体使用方法。 使用...

7

Linux下配置Caddy具体方法 13分钟前

Caddy是一款快速,易用的生产型开源Web服务器,使您的工作效率更高。适用于Windows,Mac,Linux,BSD,Solaris和Android,本篇文章重点为大家讲解...

8

韩国vps泵(韩国vps真空泵) 16分钟前

目录:1、韩国VPS租用优势与缺陷是啥?2、韩国vps多少钱一年3、干式螺杆真空泵国内哪家销量高、质量好?4、韩国VPS价格 大概多少?韩国V...