算法时间复杂度简介
介绍
通常有几种不同的算法可以解决给定的计算问题。 因此,比较这些替代方案是很自然的。 但是我们如何知道算法A是否优于算法B?因此,为了后面更好的理解以及选择更优的算法,我们首先要了解的是如何去比较各种算法之间的复杂度,其中最重要的两点就是比较算法的时间复杂度和空间复杂度。
算法的两个衡量标准
决定算法“优劣”的一个重要因素是解决给定问题所花费的时间。 如果算法A比算法B花费更少的时间解决相同的问题,则认为算法A更好。
比较两种算法的另一个重要因素是解决给定问题所需的内存量。 需要较少内存的算法被认为更好。
比较算法的执行时间
我们将重点关注第一个因素,即执行时间。 我们如何比较两种算法的执行时间?
实验评估方法
我们可以实现这两种算法,并在计算机上运行它们,同时测量执行时间,执行时间短的算法更优。 但是,如果使用这种“试验评估的方法”,必须以公平的方式进行。所以通常需要在以下控制变量的条件下进行:
- 必须在相同的输入大小上测试被比较的算法。但是,由于有的算法中存在条件语句,所以即使是相同算法,在输入相同的数据数量相同的情况下,运行时间也可能会因提供给它的实际输入而有所不同。 这意味着要比较的算法必须在同一输入上进行测试。 由于对于特定输入,一种算法可能比另一种算法不利,因此我们必须针对所有可能的输入值进行详尽的测试。 所以,这种苛刻的测试方式是难以实现的。
- 实现这两种算法的程序必须在完全相同的硬件和软件环境下进行测试。 尽管可能如此,我们可以为所有科学家分配一台机器来测试他们的算法。 即使我们这样做了,现代操作系统中的任务调度也涉及很多随机性。 如果与“最佳”算法相对应的程序遇到过多的硬件中断该怎么办? 所以即使是使用了相同的硬件/软件环境,也难以确保公平的比较。