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

Posted 程序员共读

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了厉害了,学霸利用贪心算法找偷车贼相关的知识,希望对你有一定的参考价值。


文章来源丨超级数学建模


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


度假旅游遇劫匪


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


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


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


厉害了,学霸利用贪心算法找偷车贼但由于加油站的设备简陋,没有胎压读数,史教授想着要不换个加油站试试。


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


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


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


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


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


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


报警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之后,就回家了。



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


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


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


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


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

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


厉害了,学霸利用贪心算法找偷车贼史教授马上打开电脑搜了一下,发现果然MMS还有一个附带功能,就是帮你找到停车地点。


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


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


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


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


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


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


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




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


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


“那行吧,你把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并不是设计用来追踪行驶状态下的车辆的,因此车的位置和距离更新不是实时的。


两人人漫无目的的在路上行驶,希望有机会能看到这辆马自达。十多分钟后,警察来了,史教授简单描述了如何寻找到被劫车辆的位置,并且告诉他们劫匪又跑了。


警察从史教授手里借走了手机,让他们在路边等待,他们去追踪。史教授告诉了警察如何使用MMS定位,并再三强调只能相信距离,不要去看相对位置。


警察留了手机之后,很快就开走了。但史教授决定还是继续在附近寻找,而不是在路边等待,一方面是碰碰运气,另一方面则是出于安全考虑,不想要停留在一个地方。



警察回来见到史教授后,还和他抱怨了一通MMS是多么的垃圾和难用,并询问他是否打算继续找?



史教授拿回手机,更新一下状态,发现引擎已经处于了停止状态,说明车子又被停在了某个地方,距离显示是4.3英里。于是史教授和小王又开始重复早上那套简单但行之有效的greedy search方案。


皇天不负有心人,他们在位于2801 W 87th St的Citgo加油站里看到了被劫车辆(车子就停在下图中左边那辆白色汽车左边的位置)。


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


因为打着双闪,无法看清车内是否有人。


汲取之前的教训,他们把车也开进了加油站,为了确保能看到被劫车辆,他们停到了图里黑色汽车所在的位置,随后再次拨打了911。


这次史教授直接告诉接线员:我看到了被劫车辆。为了让警方重视,史教授故意说车里好像有人,他们还有枪。


果然,不到五分钟,第一辆警车就到了。在随后的几分钟里,来了七八辆警车,来的警察还都穿着防弹背心,手放在腰间的枪上。


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


一群警察小心翼翼的靠近那辆马自达,很快就确定了车里并没有人。


史教授也走了过去,打开后尾箱,发现里面有自己的书包,装着单反和几个镜头的相机包,史教授太太的包,以及不知道是谁的一双崭新的Nike boots。


丢失的东西包括多个证件,并且车里还弥漫着一股大麻的味道,后座上还留了一些吃剩的食物的袋子和可乐罐。


厉害了,学霸利用贪心算法找偷车贼全部重要证件和大部分财物都在,甚至还多了一双Nike……


由于劫匪没有来的及清理车里的大量证物,警方提取了劫匪的DNA和指纹。


同时警察们也都被史教授能够自己如此迅速解决此事而惊叹:“They shouldn’t have messed up with computer science professors!” 


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


厉害了,学霸利用贪心算法找偷车贼那当然,我们史教授可是个牛人!说出来吓死你们!


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

史弋宇


现任圣母大学计算机系终身副教授,博士生导师,并兼任电子系终身副教授, 该校美国国家科学基金委新型可持续人工智能产学研究中心主任。之前任密苏里大学罗拉分校助理教授,博士生导师,美国国家科学基金委基于网络的软件系统产学研究中心副主任。


史教授于2005年在清华大学电子工程系获得学士学位,2009年在美国加州大学洛杉矶分校(UCLA)电子工程系获得博士学位,2009-2010在卡内基梅隆大学进行博士后研究工作。


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


史教授目前的研究方向主要是人工智能的硬件实现和在医疗等领域的应用。他曾获得美国国家自然基金委CAREER奖,IEEE Region 5 个人成就奖,卡尔圣路易科学院发明奖等;多次在领域内顶级国际会议上获得最佳论文提名。他获得美国发明专利5项(其中一项于2009年获得IBM专利奖,一项获得台北国际博览会金奖);在国际重要研究期刊和会议上发表学术论文100余篇。他现任IEEE VLSI Circuits and System Letter的deputy Editor-in-Chief,IEEE Trans. on CAD, ACM JETC, VLSI Integration等期刊的Associate Editor, 以及ACM SIGDA的Education Chair。


关于文章中提到的,定位车辆的关键技术“计算机算法中最直接的greedy approach”,史教授说,其实就是一个螺旋搜索,确保他们始终在沿着距离下降的方向单调搜索一定可以收敛的。


同时这个算法也称贪心算法。是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。


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


“设想平面内有个点x0,你的目标函数是f(x,x0)f 是euclidian distance between x and x0,欧式距离是个凸函数,全局最优解存在切唯一,x0。”


百度北京大数据实验室主任浣军教授认为,史教授用greedy approach是个凸优化问题,他始终能测距离。


学霸不可怕,会算法的学霸最可怕!惹谁都不能惹会算法的人!


 推荐↓↓↓ 

以上是关于厉害了,学霸利用贪心算法找偷车贼的主要内容,如果未能解决你的问题,请参考以下文章

不要再问我贪心算法了!看不懂找我要红包

2016级算法第六次上机-C.AlvinZH的学霸养成记II

Supermarket超市(贪心算法 优先队列)- POJ 1456

贪心思想

uva 1614Hell on the Markets(算法效率--贪心)

算法| 贪心算法:如何用贪心算法实现Huffman压缩编码?