|
有一未排序的序列{n1,n2,....nN},要求删除nk(k=1,2,...N),nk属于范围start至end的数。例如,序列{1,5,98,200,0,25},集合{4,5,6,...100}(m个连续数),删除操作结束后结果为{1,200,0}。
求一最优算法。
我用C实现的算法为:
1. 对该序列进行“快速排序”,时间复杂度为O(nln(n)/ln2),整理成“二叉排序树”( p->lchild->data > p->data > p->rchild )
2. 在二叉排序树上从100开始删除到4为止,每次比较的次数都不超过树的高度ln(n)/ln2,共比较m次。
总的时间复杂度为O(nln(n)/ln2)+O(mln(n)/ln2)。
应该最好啦。不知道Perl对数值集合如何最优化处理。 |
|