`

如何设计一个地图功能,找到当前最近的加油站?

阅读更多

吴军老师的《硅谷来信》中的第080封信,讲了一道Google面试题。

 

题目如标题,主要考察两方面:

1、考察计算机科学的基本知识

2、看候选人分解问题、解决问题的能力

 

首先处理一个问题要先全面了解问题,否则答非所问或者没有体会出题人的考察点。我刚开始思考这道题,忽略掉了有点个关键点:

1、汽车是移动的,结果会不断更新,计算速度不能很慢。

2、这个产品不同的使用场景,对准确度接受度是不同的。如果两个加油站差200米,司机和行人对200米感受是不一样的。

3、汽车是有方向且移动的。汽车位置只有GPS定位,需要转换成街道地址的范围等。

4、距离的计算。在现实中两点之间的距离不是欧几里得直线距离,车辆不可能穿过建筑直行。两点之间的距离是很多距离片段的叠加,且两点之间每一段距离的线路有N多种组合,怎样找到最短的一条?可以使用动态规则方法找到最短路径。

 

找到所有加油站距离结果的列表之后,按照距离排序所有的加油站。另外需要考虑的几个问题:

1、排序复杂度。北京1000(n)个加油站,普通排序的算法复杂度n*log(n)。

2、计算量级。考虑汽车是移动的每分钟更新3到5次数据。北京有百万辆车在路上,可能有几千辆车在寻找加油站。

3、缩小问题范围。从问题出发了解到只要找到最近的几个加油站,距离比较远的加油站用户并不关心。所以没必要对那么多加油站距离结果进行排序。谈到二叉权一个特殊细类,即“堆”,这个数据结构可以做到只排出前几名,而不用管后面的,这个算法也叫做小规模的堆排序。

注:使用这种算法,计算第一名的复杂度是N,后面第二、第三名等的计算复杂度都是Log(n)。如果只要找到最近的10个加油站,计算的量级大约是1000左右(1000+x*10),这种算法也叫TopN算法。

 

结合真实场景,持续优化:

预先计算+全局优化:把北京所有路口之间点到点的距离事先计算好,当一个人要找加油站时,距离计算就变成汽车从当前的位置出发到附近的几个路口的距离,再算一下某个加油站到它所在地附近路口的距离,由于各个路口点到点的距离 都是事先计算好的,因此做几次加法就可以计算出结果。

 

作者总结了这道题可能带来的几点思维启发:

1、不要做无用功。

2、很多事情都遵循同一个规律。

学习理论(算法)很重要,同时要了解这个理论为什么会提出,解决的应用问题是什么,然后一通百通。

3、解决问题时,尽量避免主观假设。

加油站这道题,我们很长时间都是假设找加油站这件事,是为我个人服务的,并没有考虑,这个假设不在题目中。无法跳出我们的局限性,也就无法进一步优化了。

 

 

分享到:
评论

相关推荐

    周边加油站

    在IT行业中,"周边加油站"项目是一个典型的地理位置服务应用,它结合了聚合数据接口和百度地图API,旨在为用户提供当前位置附近的加油站信息,并帮助规划导航路径。以下是对该项目涉及的知识点的详细阐述: 1. **...

    加油站微信小程序的设计与实现.zip

    1. **位置定位与导航**:集成地图API,帮助用户快速找到最近的加油站,同时提供路线规划服务。 2. **预约加油**:用户可以提前预约指定时间的加油服务,避免排队等待,提高效率。 3. **在线支付**:支持微信支付、...

    地图系统,简单的查询最优路径

    1. 地图显示:地图系统应提供清晰易读的地图视图,支持缩放、平移操作,同时标注兴趣点(POI)如餐馆、酒店、加油站等。 2. 路线规划:用户应能输入起始点和目的地,系统返回多条可能的路线供选择,包括最优路径和...

    长城汽车地图主程序

    此外,兴趣点搜索功能可以帮助用户快速找到附近的餐馆、加油站、酒店等生活服务设施。 在安装或升级这个压缩包时,用户需要确保他们的车载系统兼容这个版本,并按照厂商提供的指导进行操作,以免出现不兼容或误操作...

    毕业设计程序

    本毕业设计的项目是一个简易车辆导航系统,它利用GPS技术,旨在为用户提供高效、准确的路线规划和导航服务。这个系统包含了地图匹配、电话号码集成、单位设施查询以及最优道路检索等功能,旨在提升驾驶者的出行体验...

    Android源代码程序MioGas(查找附近油价)

    MioGas的主要功能是利用GPS定位技术,结合网络数据,帮助用户快速找到周边的加油站,并展示各加油站的汽油价格。这涉及到地图服务集成、地理位置获取、数据解析与展示等多个技术领域。 二、地图服务集成 Android中...

    PetrolPump:一个基于物联网的项目,当汽车的汽油水平低时,可以找到最近的汽油泵

    PetrolPump项目是一个创新的物联网(IoT)解决方案,旨在帮助驾驶员在汽车燃油即将耗尽时迅速找到最近的加油站。这个系统利用现代技术,如Android应用程序、蓝牙通信以及谷歌地图API,为用户提供便捷的服务。 ...

    汽车导航系统中POI部分的设计与实现(本科毕业论文)

    【汽车导航系统】汽车导航系统是一种为驾驶者提供路线指引的智能设备,它结合了电子地图、定位技术、信息检索等功能,使得驾驶者能够轻松找到目的地。系统通过接收GPS信号,确定车辆当前位置,并依据预存的地理信息...

    FuelPrices:一个提供爱沙尼亚塔林加油站信息的 Android 应用程序

    综上所述,FuelPrices是一个结合了Java编程、数据抓取、地图集成以及地理位置服务的Android应用,为用户提供方便快捷的塔林加油站燃料价格查询服务。通过持续的开发和维护,这款应用将持续满足用户对实时信息的需求...

    凯立德导航C版说明书

    4. **兴趣点搜索**:内置丰富的POI(Point of Interest)数据库,用户可以快速查找并导航至餐厅、酒店、加油站等生活服务场所。 5. **离线地图**:支持下载离线地图,即使在无网络环境下也能正常使用导航功能。 6. *...

    基于android的智能导航系统的设计与实现.doc

    支持模糊查询、关键词匹配等多种搜索方式,方便用户快速找到附近的餐馆、加油站、景点等信息。 #### 五、系统实现与测试 ##### 5.1 开发工具与环境配置 - **开发工具**:Android Studio - **编译环境**:JDK 1.8+ ...

    车载软件Explorer

    3. **兴趣点搜索**:内置丰富的POI(Point of Interest)数据库,方便用户快速找到附近的餐馆、加油站、酒店等服务设施。 4. **离线地图**:支持下载离线地图,即使在没有网络信号的地方也能正常使用导航。 5. **多...

    道道通秋季版

    3. **兴趣点(POI)**:POI是地图上的重要组成部分,包括餐馆、酒店、加油站、医院、旅游景点等。秋季版地图会包含最新的POI信息,方便用户在出行过程中寻找所需的设施和服务。 4. **实时交通信息**:道道通可能...

    高*德CE V6 2主程序1106

    4. **兴趣点搜索**:内置丰富的POI(Point of Interest)数据库,可以快速找到加油站、餐馆、酒店等生活服务场所。 5. **离线地图**:即使在没有网络的情况下,也能正常使用地图和导航功能,节省流量。 关于【标签...

    凯立德PC版3D

    7. **兴趣点搜索**:软件内置了大量的兴趣点数据,用户可以快速找到附近的餐馆、酒店、加油站等,方便日常生活和旅行。 8. **离线地图**:考虑到网络环境可能不稳定,凯立德PC版3D通常支持离线地图下载,用户可以在...

    careland navione 安卓 下的导航

    4. **兴趣点搜索**:内置大量地点信息,如餐馆、加油站、酒店等,方便用户查找并导航至这些地方。 5. **路线规划**:根据用户设定的出行方式(步行、骑行或驾车),提供多种路线选项,包括最短距离、最快时间等。 ...

    停车管理系统英文翻译.pdf

    随着智能手机的普及,人们越来越依赖于移动设备获取实时的地理位置信息,比如寻找最近的餐馆、加油站或停车场。 【位置和停车场】系统是为了解决停车信息的稀缺性和不准确问题而提出的。传统的地图服务,如谷歌地图...

    移动导航助手

    6. **兴趣点搜索**:内置丰富的兴趣点数据库,方便用户查找附近的餐厅、酒店、加油站等设施。 7. **多模式导航**:支持步行、驾车、骑行等多种出行方式的导航。 #### 二、软件特色 除了以上提到的基本功能外,移动...

    8700GpsMaps4.2

    5. **兴趣点搜索**:内置丰富的POI(Point of Interest)数据库,包括餐厅、酒店、加油站等,方便用户查找周边设施。 除了基本的导航功能,8700GpsMaps4.2还可能包含了一些特色特性,如交通信息实时更新、多路线...

    凯立德移动导航系统C系列用户手册

    - **周边设施查找方法**:输入或选择特定类型的设施(如加油站、医院等)进行查找。 - **周边设施查找范围设置**:用户可以根据需求调整查找的地理范围。 **4.12 浏览地图直接查找** - 通过手动拖拽地图或放大...

Global site tag (gtag.js) - Google Analytics