算法就是实现一个功能不同的方法。
学数学时,同一道题,有不同的解法,每个解法,就是一种算法。
如果以计算机的方式去实现算法,衡量算法的优略,就是用之前的空间复杂度和时间复杂度来衡量。
通常情况下,在无 bug 的前提下,实现同一功能,算法的时间复杂度越低、空间复杂度越小(耗时更短、占用内存更小),算法越优。
但在实际中,这两个指标往往相互制约:时间复杂度低的算法,通常空间复杂度会更高。
因此,工程上的最优,并非理论上的绝对最优,而是满足项目实际需求的最优。
例如:
- 若项目存储空间充足,但对实时性、响应速度要求极高,则应选择时间复杂度更低、空间复杂度更高的算法,这对该项目而言就是最优方案。
- 若项目存储空间有限,但对执行时间、响应速度要求不苛刻,则应选择空间复杂度更低、时间复杂度更高的算法,这同样是该场景下的最优选择。
工程师的核心价值,正是在时间性能、空间资源与业务场景之间做权衡与取舍,做出最合理的设计与优化。
这也是高校教师和工程师互相不对付的原因,高校教师侧重理论最优,工程师侧重工程最优。