分类: C/C++
2012-10-23 20:27:08
点击(此处)折叠或打开
runningdark2012-10-25 20:51:44
nextoccur就是当前数字在下次出现的位置。每次向后移动的时候,它的前一个珠子的下一次出现的位置如果在当前的串中,说明上个珠子可以删掉。长度就可以缩减一个。比如4,5,4,2,3,1,0这个序列(4~11),向后移一位,就是5,4,2,3,1,0, 去掉的那个4的nextoccur值是7,刚好输入的第七个元素在这个新串里。所以说明这个4去掉是合法的。相反的如多过去掉的4 的nextoccur是15,那么说明这个串要扩展到第15个元素才能保证符合条件。这个方式是为了降低算法复杂度。如果都用getfirstvalue,那么算法复杂度就高了。使用这个辅助的nextoccur,是想让它成线性复杂度。但是不幸的是,nextoccur是n平方复杂度的。如果能把这个想法改成线性的,就差不多了。不过整个过程还是太繁琐了。