请教3个算法题目:
1.设计算法在O(n)时间内将数组A[1..n]划分为左右两个部分,使得左边的所有元素为奇数,右边的所有为偶数,要求所使用的辅助存储空间大小为O(1).
请问,O(1)是否意思是只能开辟一个存储单元?
2.设P(x)=a0+a1x+...+adx^d是一个d次多项式。假设已有一算法能在O(i)时间内计算一个i次多项式与一个一次多项式的乘积,以及一个算法能在O(ilogi)时间内计算两个i次多项式的乘积。对于任意给定的d个整数n1,n2,..nd,用分治法设计一个有效算法,计算满足P(n1)=P(n2)=...=P(nd)=0且最高次系数为1的d次多项式P(x),并分析算法的效率。(王晓东p37,2-7)
3.设T[0:n-1]是n个元素的数组,对任一元素x,设S(x)={i|T[i]=x},当|S(x)|>n/2时,称x为主元素。设计一个线性时间算法,确定T[0:n-1]是否有主元素。(王晓东2-9)
请问,所谓线性时间是否为O(kn)?,如果这个题目不能再另外开辟数组,如何做?