Fibonacci序列,二分搜索

时间:2013-04-17 22:00:07

标签: c++ search binary numbers fibonacci

我正在尝试解决以下问题:

F是无限的整数序列,对于任何整数i,满足Fibonacci条件F(i + 2)= F(i + 1)+ F(i)。编写一个程序,计算F(i)和F(j)给定值的F(n)值。

输入: 输入按以下顺序包含五个整数:i,F(i),j,F(j),n。 -1000≤i,j,n≤1000,i≠j, -2·10 ^9≤F(k)≤2·10 ^ 9(k = min(i,j,n),...,max(i,j,n))。

输出: 输出由一个整数组成,它是F(n)的值。

我试图通过找到F(min(i,j)+1)然后使用这两个邻居来找到F(n)来解决这个问题。我被告知这可以通过在间隔(-2 * 10 ^ 9,2 * 10 ^ 9)上实现二进制搜索来完成,但我不明白如何在这里使用二进制搜索。可以给我一个提示或解释算法很简单。

1 个答案:

答案 0 :(得分:1)

我能想到的一种方式是:让我说< j和F(i)< F(j)所以我们想要找到F(i + 1)。 我们知道F(i)< F(i + 1)< F(j)所以我们可以在[F(i),F(j)]之间进行二分搜索 - 每次我们猜F(i + 1)并检查它是否合适(我认为不容易解决)直到你得到正确的价值。

复杂性 - 每次迭代可能需要2000步(最坏的情况),最坏的情况是需要log(4 * 10 ^ 9)迭代,大约是32,所以看起来合理。