1.6.为什么要学习算法
计算机科学家经常通过经验学习。我们通过看别人解决问题和自己解决问题来学习。接触不同的问题解决技术,看不同的算法设计有助于我们承担下一个具有挑战性的问题。通过思考许多不同的算法,我们可以开始开发模式识别,以便下一次出现类似的问题时,我们能够更好地解决它。
算法通常彼此完全不同。考虑前面看到的 sqrt
的例子。完全可能的是,存在许多不同的方式来实现细节以计算平方根函数。一种算法可以使用比另一种更少的资源。一个算法可能需要 10 倍的时间来返回结果。我们想要一些方法来比较这两个解决方案。即使他们都工作,一个可能比另一个“更好”。我们建议使用一个更高效,或者一个只是工作更快或使用更少的内存的算法。当我们研究算法时,我们可以学习分析技术,允许我们仅仅根据自己的特征而不是用于实现它们的程序或计算机的特征来比较和对比解决方案。
在最坏的情况下,我们可能有一个难以处理的问题,这意味着没有算法可以在实际的时间量内解决问题。重要的是能够区分具有解决方案的那些问题,不具有解决方案的那些问题,以及存在解决方案但需要太多时间或其他资源来合理工作的那些问题。
经常需要权衡,我们需要做决定。作为计算机科学家,除了我们解决问题的能力,我们还需要了解解决方案评估技术。最后,通常有很多方法来解决问题。找到一个解决方案,我们将一遍又一遍比较,然后决定它是否是一个好的方案。