二分搜索算法是运用分治策略的典型例子。
给定已排好序的n个元素a[0:n-1],现在在这个n个元素中找出一个特定元素x。
首先较易想到的是用顺序搜索方法,逐个比较a[0:n-1]中元素,直至找出元素x或搜索遍整个数组后确定x不在其中。这个方法没有很好地利用n个元素已排好序这个条件,因此在最坏情况下,顺序搜索方法需要O(n)次比较。
二分搜索方法充分利用了元素间的次序关系,采用分治策略,可在最坏情况下用O(logn)时间完成搜索任务.
二分搜索算法的基本思想是将n个元素分成个数大致相同的两半,取a[n/2]与x进行比较。如果x=a[n/2],则找到x,算法终止。如果x<a[n/2],则只要在数组a的左半部继续搜索x。如果x>a[n/2],则只要在数组a的右半部继续搜索x
具体算法demo如下:
package Recursive;
/**
* 递归与分治策略-二分搜索
*/
public class er_fen_Search
{
public static int binarySearch(int []a,int x)
{
//在a[0]<=a[1]<=...<=a[n-1]中搜索x
//找到x时返回其在数组中的位置,否则返回-1
int left=0;int right=a.length-1;
while(left<=right)
{
int middle=(left+right)/2;
if(x==a[middle]) return middle;
if(x>a[middle]) left=middle+1;
else right=middle-1;
}
return -1;//为找到
}
public static void main(String[] args)
{
int a[] ={1,2,3,4,5,6,7,8,9,10};
int find = er_fen_Search.binarySearch(a, 2);
System.out.println(find >= 0 ? "找到数值索引" + find : "找不到数值" );
}
}
查找2在数组的位置
运行结果为:
找到数值索引1
容易看出,每执行一次算法的while循环,待搜索数组的大小减小一半,因此在最坏情况下,while循环被执行了O(logn)次,循环体内运算需要O(1)时间,因此整个算法在最坏情况下的计算时间复杂性为O(logn)。
分享到:
相关推荐
合并排序算法和二分搜索技术算法的实现实验报告.doc
实验1二分搜索技术-v2.pdf
推荐多个详细教程讲解二分搜索技术以及实现方法
数据结构中简单的二分查找(折半查找)流程图实例
介绍二分查找的基本概念以及二分查找的思路与过程
一种双线性分段二分网格搜索SVM最优参数方法.pdf
• (1)二分搜索技术; • (2)大整数乘法; • (3)Strassen矩阵乘法; • (4)棋盘覆盖; • (5)合并排序和快速排序; • (6)线性时间选择; • (7)最接近点对问题; • (8)循环赛日程表。
搜索技术概论 搜索引擎介绍 搜索引擎技术简述 搜索引擎相关技术介绍 搜索引擎系统介绍 系统架构及组成 数据流和更新流,查询流 索引文件分类及组成 配置文件和查询语法, 系统维护与监控 性能优化和代码优化技术 Linux...
2.3 二分搜索技术 2.4 大整数的乘法 2.5 Strassen矩阵乘法 2.6 棋盘覆盖 2.7 合并排序 2.8 快速排序 2.9 线性时间选择 2.10 最接近点对问题 2.11 循环赛日程表 习题2 第3章 动态规划 3.1 矩阵连乘问题 3.2 动态规划...
二分搜索和压缩感知在激光超声内部缺陷快速检测技术的应用.docx
2.3 二分搜索技术 2.4 大整数的乘法 2.5 Strassen矩阵乘法 2.6 棋盘覆盖 2.7 合并排序 2.8 快速排序 2.9 线性时间选择 2.10 最接近点对问题 2.11 循环赛日程表 小结 习题 第3章 动态规划 3.1 矩阵连乘问题 3.2 动态...
数值算法与实现 教学手册 计算机科学与技术学院 曹奇英 2006年2月
理解递归的概念 掌握设计有效算法的分治策略:分治法的基本思想 通过范例学习分治策略的算法分析及设计技巧 二分搜索技术、大整数的乘法、Strassen矩阵乘法 合并排序和快速排序
针对随机森林(RF)在高维空间特征选择过程中计算繁琐和内存开销大、分类准确率低等问题, 提出了基于二分搜索(BS)结合修剪随机森林(RFP)的特征选择算法(BSRFP); 该算法首先根据纯度基尼指数获取特征重要性评分, 删除...
非线性优化A2 此仓库包含用于线优化技术(例如二分搜索,斐波那契搜索,二分搜索)和多元技术(例如循环,胡克,吉夫和罗森布鲁克)的代码。 将文件初始化为Mokhtar Bazaraa问题8.1和8.22的解决方案
里面有很多的算法演示,包括递归分治策略(汉诺塔问题、二分搜索技术、合并排序、快速排序)、动态规划(矩阵连乘问题、凸多边形最优三角剖分、0-1背包问题)、贪心算法、回溯法、分支限界法等
上篇 WEB搜索引擎基本原理和技术....................................................................16 第二章 WEB搜索引擎工作原理和体系结构..........................................................17 第...
全书分三篇共13章内容,从基本工作原理概述,到一个小型简单搜索引擎具体细节的实现,进而详细讨论了大规模分布式搜索引擎系统的设计要点及其关键技术;最后介绍了面向主题和个性化的Web信息服务,阐述了中文网页...
计算机算法设计与分析2 ...(1)二分搜索技术; (2)大整数乘法; (3)Strassen矩阵乘法; (4)棋盘覆盖; (5)合并排序和快速排序; (6)线性时间选择; (7)最接近点对问题; (8)循环赛日程表。