专栏名称: java一日一条
主要是讲解编程语言java,并且每天都推送一条关于java编程语言的信息
目录
相关文章推荐
芋道源码  ·  SpringBoot3.4.0 结构化日志详解 ·  17 小时前  
芋道源码  ·  裁员天花板:全员降薪40%,“闲置员工” ... ·  17 小时前  
芋道源码  ·  300 秒到 4 秒,如何将 MySQL ... ·  昨天  
芋道源码  ·  用 Spring AOP 优化 IN ... ·  3 天前  
芋道源码  ·  DeepSeek 全面指南:95% ... ·  4 天前  
51好读  ›  专栏  ›  java一日一条

厉害了,学霸利用贪心算法找偷车贼

java一日一条  · 公众号  · Java  · 2019-02-11 18:30

正文

转载自:公众号【超级数学建模】

作者:超模君

惹谁

都不要惹会算法的人



今天要讲的故事的主人公,是来自 圣母大学计算机系的副教授史戈宇 。就在不久之前,他还经历了一场惊心动魄的劫车事件。


度假旅游遇劫匪


12月中下旬的的一个周末,史教授计划着开车带一家人去百慕大度假旅行。 一家人从印第安纳的South Bend出发,中午12点左右到达了芝加哥中国城。


当时史教授发现Mazda CX-9提示胎压异常,于是决定开车前往附件的加油站给轮胎充气。



但由于加油站的设备简陋,没有胎压读数,史教授想着要不换个加油站试试。


跟我们平常出去关门一样,上车后史教授觉得右前轮的气门帽好像没拧紧,于是决定下车看看。


刚下车,就有两个20来岁的黑人从后面的一辆车下来并靠近史教授,其中一个人直接用一把枪指着他: “See the gun? Give me your wallet. Give me your key.”


另一个劫匪则钻进了驾驶室并且让所有人下车。



因为车里还有小孩和孕妇,安全起见,史教授很配合劫匪,把钱包给了他们。劫匪要史教授赶紧把车钥匙给他。与此同时,车里的另一个劫匪也在催车里的人下车。


史教授发现他们并没有关上驾驶座的门,于是趁机把手机扔到了门上的夹袋里,希望对后续追踪能有所帮助。


报警911,警察无作为


大家都下车后,劫匪也一溜烟开车跑了。而史教授一家的行李,包括护照绿卡还留在尾箱。


由于劫匪并没有抢走史教授太太的手机,她的手机就成了史教授一家人的唯一通讯工具。


被抢之后史教授立马拨打了911,第一次大约等了十几秒并没有被接通,直到第三次电话才打通。


但是911接线员却告知: “I cannot find your license plate number sir”。(无法查询到史教授的车牌信息)


于是他继续拨打911,这一次接线员在听了案情描述后,帮他转接到了芝加哥中央警察局,但中央警察局的接线员又表示:”This is a true emergency and you should call 911 directly.“(你应该打给911啊)


打个电话却跟踢皮球一样,史教授非常生气,说到:我打了,但是是他们把我转过来的!


于是,接线员又帮转回了911,最后的接线员终于说派警察过来,此时离抢劫发生已经过去了大约十分钟。


过了大约十分钟,与美国大片里的大量警车闪着警灯蜂拥而至的场景不同,只来了一辆警车,下来了两个警察,仔细的询问了案发的经过,包括有没有看清劫匪的长相、年龄等。


史教授:“我说你们能不能先帮我去追一下车子,这些信息我慢慢给你提供。“


警察:”别担心,一旦获得了所需的所有信息,就会将史教授的车牌信息输入系统并发布给执行的警察。“


最后,等警察处理完所有的事情时,距车子被劫走已经过去了整整半小时。



警察发现加油站有监控,于是进到店里准备看监控。但没过一会,他们就放弃了,因为他们俩不知道怎么上传视频……还告诉史教授会有侦探来处理这件事,他们只能帮到这里了。


两警察刚准备上车离去时,又跑过来问史教授:“你的Mazda CX-9 是台两门的对吧?”


史教授听了表示已经完全无语了,敢情你就没把我之前的话听进去?


“长官,是个四门的SUV。”


“OMG. It’s an SUV? F*ck!”


然后警察立刻冲回车里拿起对讲机说:“It is not a small car. It’s a four-door SUV.“


图片来源于马*达官网


这时候离史教授的车被抢已经过去了四十多分钟,史教授忽然想起了他把手机留车里了!


警察听了也一脸兴奋:”是iPhone手机吗?有没有开追踪功能?“


“不,是台华为手机”


“什么手机?”


“华为,H-U-A-W-E-I”


“没听说过华为,它能追踪吗?”


“能,但是得花点时间。你们不能直接追踪手机信号吗?”


“不能,那都是电影里的情节,通过手机信号根本不能追踪手机。”


史教授脏话都快飙出来了,如果不能追踪,那Sprint’s Family Locator 和 AT&T's FamilyMap的功能都是骗人的吗?明明三角追踪是很容易的!


由于史教授等登入手机账户,需要使用学校的email,但是学校的email系统开启了基于Duo的two step verification。


所以在新的手机上登录需要首先通过自己的手机或者办公室电话验证,但这两条途径都没有办法使用。但由于周末学校也没人,史教授也放弃了。


梦引发的找车思路


最后,史教授一家人打了个Uber之后,就回家了。


回到家后,史教授找朋友借了台电脑,立刻赶回学校,利用办公室的电话通过了two step verification,,登录了find my phone的网页。


虽然last seen的日期是当天,但已经无法显示实时位置了,看来劫匪对电子产品的追踪功能还是非常了解,找车是无望了。


回到家后,身心疲惫的史教授很快就睡着了。史教授做了个梦。


他梦到留在家里的那把车钥匙上有个远程遥控,摁一下车子就自己开回来了,而且所有行李都还在车上。


这个梦也让他想起了一件事:当时在买车的时候,他们讨价还价了很久,到最后价格实在压不下来时,就让对方给免费装了一个Mazda Mobile Start (MMS),可以利用手机远程发动汽车引擎,给车辆上锁和开锁。”


“我的判断是既然能用手机远程控制车子,那在安装这个MMS的时候也一定启动了 GPS定位的功能。”


史教授马上打开电脑搜了一下,发现果然MMS还有一个附带功能,就是帮你找到停车地点。


于是他立刻在手机上登录这个app,但发现密码始终不正确。最后他去网上找了MMS的说明,阅读后发现了可能没续租……


于是史教授尝在网上续租了一年的服务,果然,他顺利的登录进了app。


“不得不说,马自达的IT实在是太烂了。


从软件工程角度来说,没有续租导致的无法登录居然显示密码错误,这是UI设计的反面典型。


只是这样也就算了,当我在app里找到CarFinder的界面,他的显示就是一个红点和一个大圈,红点代表车的位置,大圈代表车的范围,然后右上角有距离显示81.8英里和相对误差+/- 22 英尺。没有地图,没有提供GPS坐标。”


所以,史教授除了能知道他和车的直接距离和相对位置,别的什么都不知道 (后来发现其实那个相对位置也只有距离车很近的时候才会比较准,距离远的时候完全可能是错的)。


他还顺便看了一下引擎的状态,是OFF的,说明车子被停在了某个地方。


也算是有车的线索了,史教授立马打电话给911,结果接线员说这事儿不紧急,要他直接联系芝加哥中央警察局。


史教授又打给芝加哥警局,接电话的警员表示这个事情你得告诉负责你的案子的侦探啊,但今天周末他不在办公室里,我帮你转到他语音信箱吧,这样他上班就能第一时间知道。


史教授听了,虽然愤怒,但还是耐着性子说:“这事难道不是越早解决越好嘛?”



“那行吧,你把GPS坐标给我,我们派人去看看。”


史教授随后表示汽车没有坐标,只能看到车子和用户的距离以及相对的方向。


听到这话,对方又表示那警力有限,不能帮着你满大街找车。并且还给了一个非常有建设性的意见: 不如你自己去找找?找到了以后可以给我们打电话呀,我们一定来解决剩下的事情。


史教授心想,看来警察是靠不住了。



求人不如求己系列


早上六点,于是史教授不好意思的打了个电话给他的一个平时还挺机灵的学生小王,请他陪同一起去趟芝加哥找车。


小王听了,二话不说就赶了过来,史教授把驾驶任务交给了小王,自己开始在车上进行一些信息搜集和准备工作。


大概搜索了一下,史教授发现按照MMS提示的直线距离,大概目标位置会是在芝加哥的南郊,一个以暴乱和枪击闻名的地区,看来得考虑好安全问题。


史教授当时目测劫匪手里的枪的口径应该不超过9mm,有效射程是100米左右。 这样的话,只要保持车辆始终在移动状态下,没有经过专业射击训练的枪手是很难击中车里的人的,同时只要始终警惕100米范围内是否有人靠近就可以了。


史教授同时也发现MMS相对位置提示有问题,因为他们出发的时候MMS提示车子位于正北方,而芝加哥位于正西方,他判断劫匪肯定还把车留在芝加哥。



因此他决定忽略方位提示直接去芝加哥。上高速后就他发现直线距离很明显的在快速减小,说明方向是正确的。


在快到芝加哥南郊I-94 130th st的出口时,距离减小到了2英里 。


于是史教授从该出口下去以后转了一圈,发现周围都是公园,而且距离也没有继续减小,于是又开回I-94, 继续前行,距离又开始减小,到了Roseland区域时,降到了1英里以下,但偏偏I-94在这里分叉了另一支高速 I-57 West,于是又只好转到了I-57并在下一个出口 Halsted St下了高速。此时距离提示又增加到了2英里。


最终,史教授把车辆位置确定在了图中红色的区域里。



以下是该区域的放大地图:



下高速后,他们进入了这片小区,同时发现有一辆白色的小车一直跟在后面。直到过了好几个街区以后,那辆车才消失不见。


史教授嗅到了危险的气息,再次和学生约定: 不管发生什么情况,尽量不要停车,如果一定要停车,一定要让车辆保持在D档随时准备开动。


接着,史教授开始了一件最有技术含量的事:因为相对方位并不靠谱,他选择了计算机算法中最直接的 greedy approach」 ,也就是沿着一个方向开,直到距离不再明显变小(这是说明我们前进的方向已经几乎垂直于我们和目标之间连线),就转到垂直方向的街道再继续搜寻。



在小区中兜了一段时间以后,终于在S Eberhart Ave在101st St和102nd St之间某个位置直接距离显示为200英尺,说明离目标已经很近了。



但奇怪的是,他们并没有看到Mazda,周围其他街道上时提示距离也大于200英尺,史教授完全没有办法让距离进一步减小了。


转来转去,他们最后发现,原来在S Vernon Ave和S Eberhart Ave之间还有一条小路,这条路并没有名字,在谷歌地图上甚至没有显示,但在上面这张卫星图里面可以看到这条路的存在(红色标记左侧的第一条路)。


于是他们从101st St上转入了这条小路,入口是这样的。



史教授他们保持缓慢的速度进入了小路。进入就发现MMS里提示的距离又开始明显下降,直到开过倒数第三间车库的时候,车库门是关着的,但距离显示小于5英尺,MMS发出提示音,看来车子就在里面!


没有过多的停留,在转到102nd St上后,史教授拨打了911,告诉接线员找到了被劫车辆。接线员问清了位置和所在的车辆信息后,让他们在原地等待警察。


就在他们紧张的等待时,史教授发现自己与被劫车辆的距离已经变成了1.5英里,而且引擎已经启动,说明车辆正在行驶中!


看来打草惊蛇了。


懊悔之余,史教授拨打了911,并且决定跟上马自达! 但不幸的是,MMS并不是设计用来追踪行驶状态下的车辆的,因此车的位置和距离更新不是实时的。







请到「今天看啥」查看全文