算法设计与分析-时间和空间的权衡

本文探讨了算法设计中如何权衡时间和空间复杂度,通过分布计数排序算法展示了在特定条件下的线性时间复杂度,并介绍了字符串匹配中的输入增强计数策略,如KMP和Horspool算法,强调了利用模式串信息优化匹配失败后的移动距离。
摘要由CSDN通过智能技术生成
引入问题:

考虑一个计算函数值的问题:

  你可以完全不用任何计算方法,先把函数值计算好(例如计算三角函数的值的那张表),把这些预先就计算好了的值存储于计算机中,当你需要这个函数值时,直

接去取就行了,当然这样的时间复杂度是O(1),因为你不需要任何计算,直接取出即可。(在计算机发明之前,事实上就是这样,类似于三角函数查表)

  相对于其他再用别的算法来计算函数值的算法,它的时间复杂度是最好滴,它是最快滴。当然,你为时间最快付出了什么代价呢?空间!对,你需要一块空间来存

储这些值,而其他的算法不需要或者需要的空间少得多。

  这就是时间和空间的考量,有时候需要拿时间换取空间,有时候需要拿空间换取时间。


在一些算法设计中,上面这个很简单的问题给了我们一些启示, 拿空间换取时间 !!!


--------------------------------------------------------------------------------------------------------------------------------------------------


1,按照上述问题的启发,我们有一种这样的方法,叫 输入增强 对部分或全部输入作预处理,获得额外的信息进行存储 ,以加速后面问题的求解。

简单的说,输入增强就是我们得到输入的时候,要不仅仅得到属于,还要对这个输入作一番处理和考察,得到它内在的更多信息,把它存起来:

1)计数排序

2)增强的字符串匹配算法:BM算法,KMP算法等都是基于这样的思想



2,另一种用空间换取时间的技术是 使用额外的空间来实现更快和更方便的数据存取 ,称为 预构造

1)散列法(hash表)

2)B树索引


3,还有一种空间换时间思想的技术:动态规划,将作为一门专门的算法设计技术在下一章讨论。


---------------------------------------------------------------------------------------------------------------------------------------------------


1,计数排序


思想很简单: 确定每个元素在数组中比它小的元素有多少个 ,实际就得到了每个元素的位置。若在数组A中,比元素x小的元素有2个,那么x应该是A的第三个元素即A[2]。2个循环就能得到每个元素比它小的元素有多少个,很简单,我们把这个信息存起来在另一个数组Count中,就可以根据Count的值得到它在A中的位置:

实现起来比较简单:



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值