常数时间初始化向量

来自《编程珠玑》1.6.9

使用更多的空间来换取更少的运行时间存在一个问题:初始化空间本身需要消耗大量的时间。说明如何使用一种技术,在第一次访问向量的某项的时候将其初始化为0。提示:采用空间换时间的方式,并且空间占用和向量长度成线性关系。这种方式仅在【空间很廉价】【时间很昂贵】【向量很稀疏】的时候有用。


一直没有想到这个问题怎么处理,后来上网搜了一下。发现了答案。先看答案:




然后来理解答案....

当我们访问到data[i]时,首先就需要判断data[i]是否已经被初始化,怎么判断?这里采用的方式就是直接判断  from[i]<top && to[from[i]]==i   。其实这里相当于是采用了一个双保险来判断。如果不是首次访问,按照上面的初始化方式,明显是满足这个条件的。如果恰好是首次呢?那么from[i]也没有初始化,是一个随机数r,如果 r > top ,则明显而易见不满足;如果r < top,则 to[r] 保存的必然是某个已经初始化的data[k]对应的索引k,肯定不会是i。因此,同时满足这两个条件的from[i]的随机数出现的概率为0!!!因此,这个方法是安全的!!!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值