二分查找
1、例如:抱着一堆书走出图书馆的时候,检测器突然响了(其中一本书没有消磁),现在要检查哪一本书没有消磁。
(1)比较耗时的方式就是,一本一本书用检测器都检查下。
(2)比较快的方式是:分成相等的2份,分别给检测器检测。引起报警的那一份,再分成2份,分别给检测器检测,重复这个过程,直到找到引起报警那本书。
第二种方式就体现了二分查找思想。
2、二分查找依赖的是顺序表结构,简单的说就是数组。(二分查找需要按照下标随机访问元素,用其他数据结构,例如链表的话,时间复杂度会变高)
3、二分查找针对的是有序数据。
4、数据量太小不适合二分查找(因为此时遍历、二分查找花的时间差不多)
5、数据量太大也不适合二分查找。(二分查找底层依赖数组这种数据结构,而数组需要连续的内存空间,如果数据量太大,太耗内存。)
6、二分查找的时间复杂度为O(logn)
一工人要维修一条10km长的电话线,如何迅速查出故障所在。如果沿着线路一小段一小段查找,困难很多.每查一个点要爬一次电线杆子,10km长,大约有200多根电线杆子。因此就可使用二分法:设电线两端分别为A、B,他首先从中点C查,用随身带的话机向两端测试时,发现AC段正常,断定故障在BC段,再到BC中点D,发现BD正常,可见故障在CD段,再到CD中点E来看,这样每查一次,就可以把待查线路长度缩减为一半,故经过7次查找,就可以将故障发生的范围缩小到50—100m左右,即在一两根电线杆附近。这样就省了很多精力了。
例 2现有 12 个小球,从外观上看完全相同,除了一个小球重量不合标准
外其余的小球重量均相同,用一架天平限称三次把这个 ;坏球 ;找出来
并说明此球是偏轻还是偏重,如何称?
第一次:6 6
第二次:3 3
第三次:1 1