Recamans序列为20132014学期

时间:2014-01-03 22:17:22

标签: java algorithm logic sequence

我想要一个算法在问题中给出的30秒内生成recamans术语!

Java代码:

int a0=0;
int a1;
System.out.println("Enter the term for which Recman sequence need to be calculated");
int n=Integer.parseInt(bfr.readLine());

list.add(a0);
for(int i = 1; i <= n; i++)
{
    a1 = a0 - i;
    if(a1 > 0 && !list.contains(a1))
    {
        a0 = a1;
        list.add(a0);
    }
    else
    {
        a1 = a0 + i;
        a0 = a1;
        list.add(a0);
    }
    System.out.println(a0);
}
System.out.println("The" + n + "th term is " + a0);
}
}

程序无限期运行,是否有任何替代算法在30秒内生成结果?

2 个答案:

答案 0 :(得分:0)

将您的列表更改为HashMap<Integer, Integer>
这应该加快速度。 HashMap 将索引N映射到序列元素a[N] 另外,看看是否有溢出,即如果Integer类型为
足够大,可以生成你想要的术语。

从我在这里看到的,似乎这个序列没有 快速成长。所以我怀疑你会溢出 对于合理大小的N.

http://mathworld.wolfram.com/RecamansSequence.html

http://oeis.org/A005132

http://oeis.org/A005132/b005132.txt

答案 1 :(得分:0)

当然:不要使用清单;相反,使用支持快速查找的集合数据结构。您当前实现的罪魁祸首可能是list.contains(a1))部分。