9 抽象的寻路

现在在公司,我提议每周末都开个分享会,一个主讲人上台演讲,其他人听着可以发表问题意见。
我的期望是指定一个主讲人然后一周时间的准备,周五下午开会上台。这过程中对于主讲人的锻炼可见一斑,但这几周下来似乎没有什么效果,前天周五因为没有提前指定主讲人,我就整理了一下关于“抽象”的一些感想,在会上分享了一下,算是抓住锻炼自己的机会吧。
而这次的快速整理,第一次使用了“思维导图”,在分享过程中确实非常有用,而且导图的最后一点当时没有想好,所以在会上也没出现什么奇迹,很马虎地就结束了。这里这篇文字大纲也是通过当时的思维导图重新整理下来的。

关于抽象,程序上来说,属于面向对象的几个特点之一:抽象,封装,多态。
但这里我想分享的是这种思维方式,其实是可以当成一种认识周边世界的思维的。
在这之前我先说几个小故事吧。

记得当时参加第一份工作,老大让我写个虚拟文件系统。当时刚毕业,C++还没用6呢,写了一两个星期。我忘了是其中遇到了什么问题,然后让老大来看。发现老大刷刷刷看了几个代码,马上说这里有问题,改下这个就可以了。我当时特别震惊,要我当时找到自己的代码逻辑我都要翻半天,而老大看了几个文件就马上指出了我的问题所在,就特别佩服。

之后,在一次策划案子的评审会上,策划程序一齐开会,一个策划主讲他的案子,下面人听完后可以指出问题,没有问题就可以开搞。我是不知道有什么问题的,但发现有好多次,都是老大站出来提出一个问题,而且每次提出的问题大家都很认为这确实是一个很本质的问题。我还是特别佩服。

虽然老大技术牛B,但我却特别希望能够拥有他这种很快发现问题核心的能力。有人说这是经验,当你工作了几年之后你也可以,我不是很以为然。

然后被安排了做寻路。做寻路的过程让我感受颇深,而且似乎可以找到实现这种思维的方式了,那就是抽象。
当时做A*寻路,网上只有一篇流传很广的教程,教程里为了教学简单方便,使用了很正规的正方形作为路径点。但这却让我掉入了误区,默认以为路径点就是方形的,吃了很多苦头。最后老大指导,一句话让我醍醐灌顶:点与点之间的连通性。


寻路寻的就是两个节点之间是否可以连通,而节点是抽象的,不仅可以是方形的,也可以是三角的,甚至只是一个数字,而关键是点与点之间的连通性。
有了这样一层抽象,就可以做二级寻路了。一级寻路是指计算一个一个的小节点的连通性,但一张地图可能有上百万个节点,这样算起来效率会有问题,所以二级寻路就是,将一组小节点当成一个大节点,先在大节点级别进行寻路,然后再在每个大节点内部使用一级寻路小节点,最后组成的就是目标路径。
还可以更加抽象的就是,可以做三级,四级,五级,六级寻路。

而理解了这样的抽象,就不仅可以用于地图的路径寻路,还可以做跨地图的寻路,因为以地图作为一个节点,配置好地图与地图之间的连通性,寻路算法就可以胜任。
虽说叫“寻路”算法,但只要有这样寻找的逻辑,其实都可以使用这个算法。比如六度空间的理论,一个人最多可以通过六个人来认识某个陌生人。把人作为一个节点,而人与人之间的关系作为连通性,“寻路”算法同样可以胜任。

20131112111528-1965889095
而这样的思维方式,就是抽象的力量,你是不是也很佩服我的老大了。

其实这种思维方式我们每个人都有,就是归纳总结的能力。
尤其是现在信息爆炸的时代,每天都会接收各种信息,而信息也仅仅是信息。但如果将多个信息进行归纳总结,抽象出共同属性,就可以成为知识,而这样的知识就是你自己的东西,甚至可以应用到各种领域。
但也必须承认,用于归纳的信息是有限的,所以抽象出的本质是相对的,总归会有黑天鹅的例外,但随着信息的不断汲取,知识的不断升级,总比靠运气误打误撞来的高效吧。

正好下周抽签抽到也是主讲人,心里很高兴,又可以当做刻意练习了。

 

请你关注微信公众号: 游戏感觉

qrcode_for_gh_8813f0e099c7_430 (1)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

* Copy This Password *

* Type Or Paste Password Here *