寻找最优算法
在数据之美中提到:“一个优秀的计算机科学家或者工程师与平庸的程序员的差别就在于:前者总是不断寻找并且有能力找到好的算法,而后者仅常常满足于勉强解决问题”。寻找到最优的算法就是从事计算机科学的人应该努力的目标。
算法复杂度和问题分类
算法复杂度用于比较多种算法的效率。算法复杂度公式以N为自变量,度量算法的复杂情况。如果一个算法的计算量不超过N的多项式函数,那么称这个算法是多项式函数复杂度的。如果一个问题存在一个多项式复杂度的算法,那么称这个问题为P(Polynomial)问题。
Non-polynomial的问题是实际无法解决的问题,比N的多项式函数还要高,例如计算每一步围棋的最佳走法。**值得注意的是,不是所有的问题都确定说一定找不到N的多项式函数复杂度算法,可能只是当前没有找到,这类问题被称为Nondeterministic Polynomial,简称NP问题。**NP-Complete问题(NPC)问题:认为所有的NP问题都可以在多项式时间内规约到NPC问题。对于计算复杂度至少是NPC的甚至更大的问题,称之为NP-hard问题。
所以在面对一个问题,寻找计算机算法时候,首先要寻找多项式复杂度的算法。有些无法找到多项式复杂度算法的问题,我们只能简化问题寻找近似解。而数学在计算机科学中的一个重要作用就是寻找到计算复杂度尽可能低的算法。同时,为NP-Hard问题找到近似解。
解决问题的方法
在进入一个新的领域的时候,如果这个领域已经有总结的规律和原则,那就需要按照这些规律和原则实现工程和项目。否则,如果仅仅是凑着完成工作,最终带来的会是几乎无法完善和提高当前的工程”,而且是的实现的逻辑和步骤混乱,无法被人理解。
思维方式很重要,在一个领域有积累也很重要,两者兼具才可能成为领域的人才,真正有所突破。爱因斯坦总结的:自然科学的基本原理就是力图把表面上极为复杂的自然现象归结为几个简单的几本概念和关系。
我非常赞成那句话:“欣赏美不是最终的目的,更值得追求的是创造美的境界。”