惰性初始模式 Lazy Initialization
wiki百科释义
你的代码要分配一个boolean的数组,分配内存所用时间复杂度是O(1),但是分配完后,数组的内容是任意值。已知,数组很大,我们不希望用遍历的方式初始化该数组,而是采用惰性初始化模式。
问题:
Design a deterministic scheme by which reads and writes to an uninitialized arrayA can be made in O(1) time. You may use O(n) additional storage; reads to uninitialized entry should return 0.
解答思路:
用变量t来表示当前A中已经初始化了的元素的个数。当对A中的某个元素,比如第3号元素,初始化时,就把3填入S[t]中,然后在P[t]填入t,最后t++。也就是说,S是A中已经初始化过的元素的标号,P中是A中元素初始化的顺序。
假如现在要读取A[4],
if P[4]>t,
说明A[4]还没被初始化;
else if P[4]<&#61;t&#xff0c;
if S[P[4]]&#61;&#61;4&#xff0c;
说明A[4]已经被初始化过&#xff1b;
else
说明A[4]未被初始化&#xff1b;