运行时间的计算方法
1、了解输入数据的量和运行时间的关系
使用相同的算法,输入数据的量不同,运行时间也会不同。比如对10个数字排序和对1000000个数字排序,很容易想到就是后者运行时间更长。实际上会长多少呢?后者是前者的100倍,还是1000000倍?不仅需要理解不同算法在运行时间上的区别,也要了解根据输入数据量的大小,算法的运行时间具体会产生多大变化。
2、如何求运行时间
使用“步数”来描述运行时间。“1步”就是计算的基本单位。通过测试“计算机从开始到结束总共执行了多少步”来求得算法的运行时间。
根据理论层面求出选择排序的运行时间,选择排序的步骤如下:
①从数列中寻找最小值
②将最小的值和数列左边的数字交换,排序结束。回到①
如果数列中有n个数字,那么①中“寻找最小值”步骤只需要确认n个数字即可。这里将“确认1个数字的大小”作为操作的基本单位,需要的时间设置为Tc,那么步骤①运行的时间就是n*Tc。
将“两个数字进行交换”也作为基本操作单位,需要时间设置为Ts,那么①和②总共重复n次,每经过“1轮”需要查找的数字就减少1个,因此总的运行时间如下:
虽然只剩1个数字不需要确认了,但是方便起见还是进行对它进行确认和交换时间计算比较好。
3、运行时间的表示方法
Tc和Ts都是基本的单位,与输入无关。会根据输入变化而变化就是n,即数列的长度。所以需要考虑n变大的情况,n越大,n2就越大,其他部分就相对变小了。也就是说对结果影响最大的是n2。所以删除其他部分,将其结果表示为下面的形式。
通过这个可以大概了解到排序算法的运行时间与输入量n的平方成正比。例如某个算法的运行时间如下:
那么结果可以用O(n3)表示。
如果运行时间为:
则可以用O(nlogn)表示。
备注:O表示“忽略重要项以外的内容”,O(n2)的意思是“算法的运行时间最长就是n2的常数倍”。