第1讲 时空分析
信息学竞赛有个特色,它的题目原型与计算机无关,而是与学习、生活息息相关。拿到题目后,需要把题目的模型转换成能用程序语言描述的算法或数据结构。在设计解决问题的方法时,可以采用不同的算法,例如*小生成树有Prim、Kruskal算法,排序有快排、桶排、插入排序等算法。方法不一样,程序计算的工作量就不一样。采用什么样的方法,才是有效的?评价一个方法的好坏,可以从时间复杂度和空间复杂度来判别。有的方法只需耗时l秒钟,有的方法却需耗时10秒钟;有的方法只需耗费10MB的空间,有的方法却需耗费1GB的空间。我们认为耗费时间、空问越小,算法越优。
一、时间复杂度
时间复杂度又称计算复杂度,是指执行程序的计算工作量。同一问题,采用不同的算法,程序的计算工作量是不一样的。衡量一个算法的时间复杂度,可以采用两种方法:执行时间和执行运算次数。执行时间,指在计算机上运行程序从开始到结束所花费的时间。执行时间与��算机配置有关,配置越高的机器,运算速度越快,执行时间就越少,反之越多。因计算机配置差异太大,这种方法可取性不高。执行运算次数是根据程序中执行指令条数和语句条数来度量的,它大致等于计算机执行一种简单操作所需时间与算法中简单操作次数的乘积。这种方法不以计算机的配置为依据,而以算法中的操作次数总耗时为依据,耗时越少,执行时间越快;耗时越多,执行时间越慢。这种方法已经被作为衡量时间复杂度的*有效方法。每年NOl的所有比赛,中国计算机学会(CCF)都会把评测机的详细配置放在NOl官网上,供选手们根据算法来预测程序的执行时间。
……