打表

打表是典型的 空间换时间,一般指将所有可能需要用到的结果事先计算出来存入表,后面如果需要就直接查表。

常见方法有以下几种:

  1. 程序中一次性计算所有需要用到的结果,之后需要用到直接取

    最常用的方法

    如一个大量查询 Fibonacci 数 F(n) 的问题中,如果每次查询都要计算是很耗时的,假设查询 Q 次,时间复杂度即为 O(nQ)。如果进行预处理,即把所有的 Fibonacci 数预先计算并存在数组中,每次查询就只要 O(1),Q 次查询的时间复杂度 O(n+Q)

  2. 在程序 B 中事先算好需要用到的结果,然后手动把这些结果写在程序 A 的数组代码中,然后程序 A 中就可以直接使用

    这种方法一般用在程序一部分过程消耗的时间过多,或者没有想到好的算法,因此在另一个程序中暴力求出结果

    例如 n皇后问题,如果算法不好就容易超时,这是就可以在本地先算出 对所有 n 来说的方案数,然后把算出的结果直接写在数组中,就可以根据题目输入的 n 来输出结果

  3. 对一些感觉不会的题目,先用暴力计算小范围数据结果,然后找规律,也许就能发现一些“蛛丝马迹”

    这种方法用于数据非常大时,因为这样的题目可能不是用直接就能想到的算法来解决的,而需要寻找一些规律


胡凡《算法笔记》
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值