计算机算法在实际生活中的应用

计算机算法在实际生活中的应用_第1张图片
算法

在这一周的《吴军的谷歌方法论》中,老师讲了地址(addressing)的重要性,并在此基础上介绍了地址的查找,数据的访问。对于地址的查找,在数据量较小时,可以采用顺序查找法和字典查找法;当数据量达到一定程度后,则需要为数据建立索引。而对于已经建立的索引进行查找,老师又详细介绍了具体方法的演进过程,引出随机性在索引查找中的应用。

通过上一周的学习,有如下几点收获:

1.理清问题,确定算法,选择语言

在这周的文章中读到,以前的人把计算当作目的,图灵是把计算当作手段,实现一些功能才是他的目的,回想起自己做研究生课题时遇到的一个问题。当时自己做的是机油滤芯过滤阻力和过滤精度的模拟计算,开始阶段采用二维模型来模拟圆筒状的滤芯。实际生产的滤芯是用木屑做的,填充率为31.8%,自己模拟计算也希望达到这个数值,但是初步的计算达不到这个数值,就向博士毕业的堂姐请教了这个问题:

有一个圆环,外圆半径是3cm,内圆半径是1.75cm。在这个圆环的内部,想要放置长为0.3cm,宽为0.1cm的小矩形,且小矩形之间不相交。要使小矩形的总面积占圆环面积的百分比为31.8%,从而得到小矩形的数量为198。但我用Matlab生成小矩形时,数目都超不过100,达不到那个31.8%的百分比。

堂姐的回复如下:

你说的这个问题其实和Matlab无关,Matlab算一种语言吧,我们用语言来实现算法。要解决这个问题,最重要的是你的算法是什么。我现在电脑上没有matlab,因为新的学校没有买matlab,而且我也用不上了,我就是两年前上的一门数学课要用matlab,我已经有点忘记了,但是我的两个好朋友都是matlab专家。如果你的问题卡在不知道怎么用matlab实现你的算法, 我可以帮你问一下他们。但是如果是算法问题,那就不是matlab 能解决的了。

当时并没有非常理解她说的话,现在回过头来看,能更加明白她的意思了。对于一个具体的问题,可以采用的算法其实是非常多的,对于每一种算法又可以选择很多种实现的语言。但是我们解决问题的时候,一定要从问题这个根本出发,对于问题本身有足够深入的思考。在此基础上,明白解决这个问题采用怎样的算法最简洁高效,这是关键。至于选择那种语言或者工具,会对算法的实现效率产生一定影响,但不是最核心的。

2.从多个维度建立索引

对于算法的介绍中,老师强调了索引的重要性。关于建立索引,想到的两个应用的例子,一个是微信好友的标签,一个是印象笔记的标签。

对于我们在工作场合或者意外状况下认识的朋友,也许后期的联系会很少,那么建立细致的备注信息就很有必要。通过对聊天记录的梳理,在标签中注明行业,公司,家乡,甚至爱好,并且备注一些印象深的细节。这样不仅可以通过标签很快找到对应的人,而且在以后再次约见的时候,能通过这些标签信息,谈一些对方熟悉的话题,迅速拉近彼此的距离,对于我们的社交会有很大的帮助。

另外一个就是在印象笔记中建立新笔记时,可以建立尽量详细的标签。这在当时可能费事一点,但是后面随着笔记数量的增多,在海量笔记中通过标签来进行筛选,将是一件非常提升效率的事情。说到印象笔记,就像多说两句,因为真的很好用。建立标签就点击F3就可以开始建立新标签。

3.问题规模的增大会导致性质的变化

当一个问题的规模达到一定程度之后,它就不再是小问题的放大,就变成了另外一个问题。

读到这句话时,想到之前脱不花和罗振宇两位老师在周二例会时讲得到的发展。当时得到总共的人数是157个人,刚刚超过邓巴数(人类智力允许人类拥有稳定社交网络的人数,为148)。

在邓巴数以内,公司里面的人可以彼此认识并且维持稳定的关系,不需要太明确的部门和上下级关系。但是两位老师讲到,随着公司里的人数超过邓巴数,那么部门化和层级化是不可避免的趋势,因为这样可以提高效率。但部门和层级的建立,会导致利益变形,之前大家是向市场要收益,更关注如何把自己的工作做好;之后是向上级要收益,更容易出现溜须拍马的现象。

不过正如老师所说,本着遇到问题解决问题的态度,即便问题转化了,只要大家发挥主动性,认真去面对问题,总会有解决方法。而且Google,苹果这样的公司树立了很好的榜样,现在已经非常大了,依然保持很好的运作和增长。

而作为个人,我们应该更多关注自己如何在企业不断扩大的过程中,保持自己本身的不断成长,为公司解决新的更复杂的问题,让自己一直拥有竞争力。这也是《领导梯队》中想要告诉我们的,在领导梯队的上升过程中,面对的不是更多同类的问题,而是全新的问题。我们要让自己学会转化思维模式,这样在旧问题已经转变成新问题时,可以更好去应对。

你可能感兴趣的:(计算机算法在实际生活中的应用)