Return to Data Structures--二分查找(折半查找)

一、              顺序表特点:查找要从第一个元素开始,逐个访问元素。表中第一个元素起始位置确定后,则顺序表中的任一数据元素都可随机存取。

二、              折半查找(二分查找):要求所查找顺序表中的元素按值或关键字前后有序描述,方法是先确定待查元素所在范围(区间),然后逐步缩小范围直到找到或没有找到该元数为止。

三、    实际应用举例:

①、二分查找在图像处理中的应用

在图像处理中,常常将图像数据分块存放。而为了使邻近图像块的数据集中存放,我们常使用一种树状的分块方案:即将整个图像平面作为树的根结点,四块四块分下去。分块后图像及其编号方式。

分块直方图

0

1

4

5

2

3

6

7

8

9

12

13

10

11

14

15

由分块直方图知:图形是以“4”为单位逐步细分的,因此,每次分块中,图形的中心坐标总是第(N * 3/4)块的左上顶点坐标(N为总块数)。所以,我们以该顶点为中心将欲分块区划分为四个区,如下图:

 

0

 

1

2

x0,y0      3

结论:

if(x < x0 && y < y0)  x,y1区;

else if ( x > = x0 && y < y0 ) x,y0区;

else if (x < x0 && y > = y0) x,y 2区;

else x,y 3区;

根据分块方式及存储顺序可得,0区的所有块编号在全部编号中的位置为0~N * 1/41区在N * 1/4 ~ N * 2/42区所有编号块的位置为N * 2/4 ~ N * 3/43区所有块N * 3/4 ~ N。判断出目标点所在区后,以该区为范围,迭代查找。这样经过几次后,就可得出目标点的块编号。

算法执行中,若对平面分块数为N,则只须判断log4N次即可得出目标点的块号。

 

参考文献:信息工程学院基础部 奚玲 《二分查找法在图像处理中的运用》

 

基于位的二分查找:

数据在内存中是以二进制形式存放的。对有符号数而言,最高位为0表示正数,最高位为了表示负数。由于二分查找的基础是在有序的数据中查找,所以不妨设数据是从小到大排列的。具体算法如下:

(1)       判断符号位,统计负数个数n1

(2)       初始化p(用来指定被比较的二进制位的位置,初始值为L-2)。判断待查找数Z3符号位,若为1,则设i  = 0, j = n1 – 1;否则,设 i=n1,j = N – 1.转(3)。

(3)       i < =j,k = (i + j)/2,转(4);否则转(6)。

(4)       比较za[k]的第p位。若相同,p = p- 1,直到p -1,找到,查找结结束,否则转到(5)。

(5)       z的符号位为1且第p位为1,则i =k +1,p =L-2;

否则若z的符号位为1且第p位为0,则j = k – 1,p = L -2;

否则若z的符号位为0且第p位为1,则i =k+1,p=L-2;

否则j =k-1,p=L-2.  转(3)。

6)没有找到,查找结束。

结论:基于位的二分查找算法适用于大规模整数构成的集合,是直接利用数据的二进制位信息进行比较,无需对数据进行二进制与十进制转换。

 

参考文献:南京信息工程大学 成亚平

 

四、二分查找步骤:(查找元素30)

 

3

5

7

8

12`

20

24

27

38

50

78

low                                                      mid                                                 high

Mid = (1 + 11)/2=6;

3

5

7

8

12`

20

24

27

38

50

78

                                            low         mid         high

3

5

7

8

12`

20

24

27

38

50

78

                                           low/mid high

3

5

7

8

12`

20

24

27

38

50

78

                                                    low/mid/high

3

5

7

8

12`

20

24

27

38

50

78

                                                  high/mid low 

总结:二分查找的算法时间复杂度为Olog2n.二分查找的优点是比较的次数少,查找速度快。但二分查找只适用于顺序存储结构有序表,这种速度是以预先对记录按关键字大小排序为代价的。另外由于存结构为数组或向量,所以对经常要插入和删除操作的表,不宜采用此法。因此二分查找比较适用于那种一经建立就很少改动,而又经常查找的线性表。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值