网易首页 > 网易号 > 正文 申请入驻

开课吧JavaScript深入简出系列教程2022最新卷起千堆雪

0
分享至

发现了二分搜索法的秘密。
1.1.原理分析

开课吧JavaScript深入简出系列教程2022最新卷起千堆雪

download:https://www.51xuebc.com/thread-495-1-1.html

二分搜索法是一个非常简单易懂的快速搜索算法,其思想在生活中随处可见。例如,当朋友聚在一起时,他们喜欢玩猜谜游戏。我随机写一个0到100之间的数字,然后大家依次猜。在猜的过程中,我会告诉你你是猜大还是猜小,直到有人猜对,被猜的人会有一些惩罚措施。
这个过程实际上是二分搜索法思想的一种体现。
回到实际的开发场景,假设有10个订单,它们的金额分别是:6,12,15,19,24,26,29,35,46,67。请查找订单金额为15的订单。利用二分搜索法的思想,我们每次都将大小与区间中间的数据进行比较,以缩小搜索范围。
下图表示查找的过程,其中left,right表示要查找的区间的下标,mid表示要查找的区间的中间元素的下标(如果范围区间为偶数,则选择较小的一个)。

通过这个搜索过程,我们可以总结出二分搜索法的思路:二分搜索法针对的是一个有序的数据集,搜索思路有点类似于各个击破的思路。每次通过与区间的中间元素进行比较,将待搜索的区间缩小到前一个的一半,直到找到待搜索的元素或者区间缩小到0。
1.2、复杂性分析
理解了二分搜索法的思想之后,让我们来分析一下二分搜索法的时间复杂性。首先,我们要明确一点,二分搜索法是一种非常高效的搜索算法。通过分析它的时间复杂度可以发现,我们假设数据大小为N,每次搜索后,数据大小会减少到原来的一半,直到最后数据大小减少到1。如果我们用数据来描述它的变化规律,那就是:
n,n/2,n/4,n/8,n/16,n/32,.......................,1;
你可以看到,这是一个几何级数。当数据大小变为1:
k的值是总还原次数。但是,每个缩小操作只涉及两个数据的大小比较。因此,在K个区间缩小操作后,通过计算K的值,我们可以得到二分搜索法的时间复杂度为O(logn)
这是一个非常高效的时间复杂度,有时甚至比O(1)复杂度还要高效。为什么这么说?对于log n,即使n很大,log n对应的值也会很小。我们之前研究O(1)复杂度的时候说过,O(1)代表一个恒定的复杂度水平,并不是说代码只需要执行一次,有时候可能要执行100次,这个恒定水平的1000倍的复杂度可以用O(1)来表示。因此,恒定时间复杂度的算法有时可能不具有O(logn)。
1.3、代码实现
二分搜索法有两种实现方式,一种是基于循环的,另一种是基于递归的。现在,给出这两种方式编写的代码模板。
1.基于循环的二分搜索法码模板
//返回数组中元素的下标
public int binary search(int[]array,int target) {
int left = 0,right = array.length - 1,mid
同时(左
// mid =(左+右)> > 1
mid = left +((右-左)> > 1);
if (array[mid] == target) {
返回mid
} else if (array[mid] > target) {
右=中1;
}否则{
左=中+1;
}
}
return-1;
}
复制代码

使用mid不断接近我们的目标值。在比较好的情况下,我们直接在某个段落中间找到目标值。最坏的情况,我们不断逼近,最后left==right找到目标值。当然,如果真的找不到目标值,也就是左>右的时候。
2.基于递归的二分搜索法码模板
public int recurBinarySearch(int[]array,int target,int left,int right) {
//终端
如果(左>右){
return-1;
}
//处理当前计算中间元素的下标。
int mid = left +((右-左)> > 1);
if (array[mid] == target) {
返回mid
}else if (array[mid] > target) {
//深入查看
返回recurBinarySearch(array,target,left,mid-1);
}否则{
返回recurBinarySearch(数组,目标,mid+1,右);
}
}
复制代码
高级:二分搜索法的实现可以分为两类。
1、简单实现有序序列中没有重复元素;
2.有序序列中重复元素的变形实现,
对于第一个,上面已经给出了代码模板。对于第二种情况,在实际应用场景中可能会出现以下情况:
2.1.从数据序列中找出其值等于给定值的第一个元素,例如,在{6,12,15,19,24,26,29,29,67}中找出第一个等于29的元素。
2.2.从数据序列中找出最后一个值等于给定值的元素。或者只是元素序列,找到最后一个等于29的元素。
2.3.从数据序列中查找大于或等于给定值的第一个元素。
2.4.从数据序列中找出最后一个值小于或等于给定值的元素。
课后思考:针对这四种情况,代码应该如何实现?
1.4.应用场景描述
二分搜索法的时间复杂度为O(log n),效率非常高。这是否意味着二分搜索法可以在所有情况下使用?让我们讨论一下二分搜索法的应用前提。
1.要搜索的数据序列必须是有序的。
二分搜索法对这个要求很严格,要搜索的数据序列必须是有序的(单调递增或单调递减)。如果数据是无序的,那么我们就要先排序,然后二进制搜索。如果我们针对的是一组固定的静态数据,也就是说数据序列不会被插入或删除,那么我们可以先对其进行排序,然后进行二进制搜索,这样就可以一次排序,多次搜索。但是如果数据序列本身不是固定不变的静态的,可能会涉及到数据序列的插入和删除,那么我们每次搜索之前都需要排序,这样成本就很高。
2.数据存储依赖于阵列。
要搜索的数据序列需要数组存储,也就是说,它依赖于顺序存储结构。不能用其他结构来存储要搜索的数据序列吗?比如用链表存储,答案是不能接受的。根据我们之前实现的二分搜索法过程,二分搜索法算法需要按照下标、左、右、中、中来访问数据序列中的元素。数组根据下标访问元素的复杂度为O(1),而链表访问元素的时间复杂度为O(n)。因此,如果用链表来存储数据,二分搜索法的时间复杂度会变得很高。
3.数据序列有上限和下限。
数据有上下限,这样就可以找到中间点,这样就可以分成两部分。
4.数据太少或太多都不适合二分搜索法。
当数据量很小时,没有必要使用二分搜索法。使用循环遍历就足够了,因为二分搜索法只有在数据量大的时候才能显示出它的优势。但是,在某些情况下,即使数据量很小,也建议您使用二分搜索法。比如数据序列中的所有数据都是很长的字符串,比较起来会花费很多时间,所以要尽量减少比较的次数,这样有助于提高性能。
那么当数据量过大时,为什么不推荐二分搜索法呢?前面说过,二分搜索法的底层是依靠数组来存储要搜索的数据序列的,而数组的特点就是需要连续的内存空间。比如现在有1G的订单数据,如果存储在数组中就需要1G的连续内存。即使有2G的剩余内存空间,如果这个2G的内存空间是不连续的,就不能申请1G的数组空间,所以我们说数据太多不适合二分搜索法。
代码解释:
1:如果恰好找到一个mid^2 = x,可以直接在while循环中返回,
2:如果在while循环中还没找到,就好像x=8。让我们在[1,2,3,4]中寻找。while循环中的最后一个循环left == right == 3。我们只需要寻找k 2。
进阶:牛顿迭代法解决了这个问题!问题解决方案精选:leetcode-cn.com/problems/sq…
类似标题:367。有效完全平方数
类别解决方案{
public boolean is perfect square(int x){
//特殊判断
如果(x
返回true
}
long left=1,right = x>>1,mid = 0;
同时(左
mid =(左+右)> > 1;
if (mid * mid < x) {
左=中+1;
}else if (mid * mid > x) {
右=中1;
}否则{
返回true
}
}
返回false
}
}
复制代码
33.搜索旋转排序数组。
字节,Aauto快一点,百度最近面试问题,33。搜索旋转排序数组
两点发现变形问题。
思考要点:
1:二分法的条件:满足上下边界,下标可以得到数组存储,原数组单调递增。虽然旋转后整个数组不是单调的,但它的一半一定是单调递增的。
2.要实现log n的复杂度,必须对分,但不能简单套用二分法模板。我们需要先找出哪一半是单调的,确定目标是否在范围内。如果是,就在这部分找目标,如果不是,就找另一半。
53.查找旋转排序数组中的最小值。
网易,拼多多,今日头条面试题,153。在旋转排序数组中寻找最小值
利用二分搜索法,找出半有序数组[4,5,6,7,0,1,2]中间的无序度
74.搜索二维矩阵
新浪,爱奇艺,三星面试问题,74。搜索二维矩阵
解题思路:m×n的标准二元矩阵可以看作是m×n的有序数组。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
马伊琍女儿庆祝父亲节,与爸爸文章罕见同框,40岁文章已满头白发

马伊琍女儿庆祝父亲节,与爸爸文章罕见同框,40岁文章已满头白发

橘子大娱社
2024-06-18 19:20:02
幼儿园的老师才是知道秘密最多的人!因为小朋友什么都给老师讲!

幼儿园的老师才是知道秘密最多的人!因为小朋友什么都给老师讲!

开玩笑的水母
2024-06-19 18:24:56
汤姆克鲁斯18岁女儿和小鲜肉约会,牵手搂腰超甜,男方酷似阿汤哥

汤姆克鲁斯18岁女儿和小鲜肉约会,牵手搂腰超甜,男方酷似阿汤哥

开开森森
2024-06-20 08:04:37
美智库给中国提要求:要么成第二个韩国,要么像俄伊那样毁灭

美智库给中国提要求:要么成第二个韩国,要么像俄伊那样毁灭

第一军情
2024-06-19 10:23:47
刚刚!北约传来重大消息,高层变天,给中国的承诺该兑现了...

刚刚!北约传来重大消息,高层变天,给中国的承诺该兑现了...

新财迷
2024-06-20 09:14:47
说透了美国做着和俄核战、印太全面战争准备,印太针对超过对苏联

说透了美国做着和俄核战、印太全面战争准备,印太针对超过对苏联

邵旭峰域
2024-06-19 15:30:02
单亲妈35岁下海当女优 15岁儿子看的性感写真:别再变的出名了

单亲妈35岁下海当女优 15岁儿子看的性感写真:别再变的出名了

楚门记
2024-06-20 09:14:08
女性性欲发展的高峰与变迁

女性性欲发展的高峰与变迁

智见派
2024-06-19 14:31:28
河南女学霸2次高考查分,从627分变成335分,到底怎么回事?

河南女学霸2次高考查分,从627分变成335分,到底怎么回事?

莉雅细细谈
2024-06-17 20:44:48
正式解约!NBA历史最贵!1年9950万,他赚麻了

正式解约!NBA历史最贵!1年9950万,他赚麻了

篮球教学论坛
2024-06-20 00:08:12
杭州保姆纵火案通灵记录:通灵人与被害人交流,得知朱小贞真实死因

杭州保姆纵火案通灵记录:通灵人与被害人交流,得知朱小贞真实死因

古今档案
2024-06-18 20:56:33
广州发布今年首个高温黄色预警信号!接下来......

广州发布今年首个高温黄色预警信号!接下来......

鲁中晨报
2024-06-20 12:31:04
郑欣宜新形象,已瘦很多,亲情凉薄,曾独自在母亲墓碑前哭泣

郑欣宜新形象,已瘦很多,亲情凉薄,曾独自在母亲墓碑前哭泣

青芳草
2024-06-20 11:12:16
北大硕士赵斌再次回应:姜萍老师王闰秋是推手,带考研辅导要流量

北大硕士赵斌再次回应:姜萍老师王闰秋是推手,带考研辅导要流量

育学笔谈
2024-06-19 16:50:01
插手司法活动,上海市奉贤区委统战部原部长周龙华被公诉!

插手司法活动,上海市奉贤区委统战部原部长周龙华被公诉!

正义网
2024-06-19 16:25:13
以军击溃拉法70%建制武装,真主党大搞牛皮癣战术

以军击溃拉法70%建制武装,真主党大搞牛皮癣战术

西楼饮月
2024-06-19 22:32:55
爱来不来!欧空局宣布不会去中国空间站,终止与中国全部探月合作

爱来不来!欧空局宣布不会去中国空间站,终止与中国全部探月合作

贾文彬的史书
2024-06-19 18:58:07
欧洲杯-苏格兰1-1瑞士 沙奇里无解世界波小麦破门蒂尔尼伤退

欧洲杯-苏格兰1-1瑞士 沙奇里无解世界波小麦破门蒂尔尼伤退

直播吧
2024-06-20 04:56:09
姜萍事件新消息:她初三的数学老师发声,让我们又看到了一些真相

姜萍事件新消息:她初三的数学老师发声,让我们又看到了一些真相

法制社会报
2024-06-20 12:11:39
陈道明说对了,不演戏就“消失”的佟大为,已经走上了另一条大道

陈道明说对了,不演戏就“消失”的佟大为,已经走上了另一条大道

启农说
2024-06-19 18:47:43
2024-06-20 15:50:44
言出法随
言出法随
关注我,带你了解更多法律知识
4文章数 12关注度
往期回顾 全部

科技要闻

小米SU7流量泼天,富贵却被蔚来接住了

头条要闻

占用房屋拒不腾退 日籍女子仗着外国人身份威胁要跳楼

头条要闻

占用房屋拒不腾退 日籍女子仗着外国人身份威胁要跳楼

体育要闻

绿军的真老大,开始备战下赛季了

娱乐要闻

叶舒华参加柯震东生日聚会,五毒俱全

财经要闻

日本银行巨头突然爆雷!

汽车要闻

售价11.79-14.39万元 新一代哈弗H6正式上市

态度原创

艺术
本地
教育
游戏
房产

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

本地新闻

2024·合肥印象|用崭新视角对话城市发展

教育要闻

高考成绩400分左右,建议报考这四类大学,学生将来才能有出路!

上号围观!《边境》宣布停服后Steam在线人数暴涨

房产要闻

海棠湾!一所重量级国际学校真的来了!

无障碍浏览 进入关怀版