来自http://discuss.joelonsoftware.com/default.asp?interview.11.794054.1
序列A定义如下:
从自然数字开始 1,2,3,...
Initialize count = 1;
while(there are uncrossed numbers)
{
pick the first uncrossed number say n.
set A[count] = n.
Cross out the number count+n.
Cross out the number n
Increment count.
}
给出一个快速算法来确定A [n],给定n。
尝试获取log n中的多项式算法。
答案 0 :(得分:3)
很抱歉发布此问题。
显然这是一个名为Wythoff序列的着名序列,有一个由A [n] = [n * phi]给出的A [n]的整齐公式,其中[x] = x的整数部分,phi是黄金比例
为了计算[n phi],我们可以将phi近似为连续的斐波那契数的比率,给出O(logn loglogn)算法。 (O(logn)时间对O(log n)位数进行算术运算)。
答案 1 :(得分:2)
以下是如何开始
1 2 3 4 5 6 7 8 ... A[1] = 1, cross 2
1 X 3 4 5 6 7 8 ... A[2] = 1, cross 3
1 X X 4 5 6 7 8 ... A[3] = 1, cross 4
...
数字1永远不会越过,因为可以越过的最小数字是1 + 1 == 2.
因此有恒定时间算法:所有n的A [n] = 1。