算法技巧之打表

转载:煮咖啡的猪!html

打表是一种典型的用空间换时间的技巧,通常指将全部可能须要用到的结果事先计算出来,这样后面须要用到时就能够直接查表得到。打表常见的用法有以下几种:算法

  一、在程序中一次性计算出全部须要用到的结果,以后的查询直接取这些结果。数组

   这个是最经常使用到的用法,例如在一个须要查询大量Fibonacci数F(n)的问题中,显然每次从头开始计算是很是耗时的,对Q次查询会产生O(nQ)的时间复杂度;而若是进行预处理,即把全部Fibonacci数预先计算并存在数组中,那么每次查询就只需O(1)的时间复杂度,对Q次查询就值须要O(n+Q)的时间复杂度(其中O(n)是预处理的时间)。spa

  二、在程序B中分一次或屡次计算出全部须要用到的结果,手工把结果写在程序A的数组中,而后在程序A中就能够直接使用这些结果。htm

  这种用法通常是当程序的一部分过程小号的时间过多,或是没有想到好的算法,所以在另外一个程序中使用暴力算法去i出结果,这样就能直接在源程序中使用这些结果。例如对n皇后问题来讲,若是使用的算法不够好,就容易超时,而能够在本地用程序计算付出对全部n来讲n皇后问题的方案数,而后把算出的结果直接卸载数组中,就能够根据题目输入的n来直接输出结果。blog

  三、对一些感受不会作的题目,先用暴力程序计算小范围数据的结果,而后找规律,或许就能发现一些“蛛丝马迹”。ci

  这种用法在数据范围很是大时候容易用到,由于这样的题目可能不是用直接能想到的算法来解决的,而须要寻找一些规律才能获得结果。get

 

例如:PAT乙级1044/甲级1100 火星数字技巧

相关文章
相关标签/搜索