相关疑难解决方法(0)

斐波那契搜索

有人请解释我的斐波那契搜索算法.

我已经尝试了很多资源并进行了大量搜索,但算法仍然不清楚.大多数资源都将其描述为与二进制搜索相关联,但我不理解它们.我知道斐波那契搜索算法是二进制搜索的扩展,我很清楚.

我的书也没能解释.

我知道定义为F(n)= F(n-1)+ F(n-2)的斐波纳契数,所以不需要解释.

通过添加我不理解的内容来更新问题@AnthonyLabarre说:

我正在使用的书有奇怪的符号,没有任何解释.在这里发布算法,请帮忙.

if(key == a[mid]) return mid; // understood this, comes from binary search
if(key > a[mid]) {
  if(p == 1) return -1; // What is p? It comes as a function arg
  mid = mid + q; //Now what's this q? Again comes a function arg
  p = p - q; // Commented as p=fib(k-4)
  q = q-p; // q = fib(k-5)
 } else // key < a[mid] {
  if(q == 0) return …
Run Code Online (Sandbox Code Playgroud)

c algorithm search fibonacci

5
推荐指数
1
解决办法
7192
查看次数

Big-O表示法的定义

我真的想知道真正的定义.我试过看书,却无法理解.

O:Big-O符号最坏的情况.
Θ:Theta表示法的平均情况.
Ω:欧米茄符号最好的情况.

为什么维基百科代表Big-O算法的速度,包括其平均,最佳和最差情况?为什么他们没有取代那些正式的关键词?

big-o

4
推荐指数
2
解决办法
6781
查看次数

递归和迭代的fib函数的大订单?

我被要求以最有效的方式写一个fib函数?

这是我提供的实现:

public static int fib(int n)
{
    int prev1 = 1, prev2 = 1, ans = 1, i = 3;

    while (i <= n)
    {
        ans = prev1 + prev2;
        prev1 = prev2;
        prev2 = ans;
        i++;
    }
    return ans;
}
Run Code Online (Sandbox Code Playgroud)

这是最有效的吗?什么是大订单?

我还被要求给出递归实现的大概念:

public static int recursiveFib(int n)
{
    if (n <= 2)
        return 1;
    else
        return recursiveFib(n-1) + recursiveFib(n - 2);
}
Run Code Online (Sandbox Code Playgroud)

我认为这个是指数2 ^ n,这就是为什么它效率低下的原因.

java algorithm big-o

4
推荐指数
1
解决办法
2285
查看次数

我无法理解这个Fibonacci程序流程

所以我是编程和思想世界的新手,我会拿起一本书来开始学习.我买了C#3rd Edition的玩家指南和它给你的一个小作业,让我很难过.我一步一步地调试它以帮助我理解,但程序的流程对我来说毫无意义.这里是.

      static void Main(string[] args)
        {
            for (int index = 1; index <= 10; index++)
            {
                Console.WriteLine(Fibonacci(index));
            }

            Console.ReadKey();
        }

        /// <summary>
        /// Returns a number from the Fibonacci sequence, starting at 1.
        /// Note that this implementation is not very optimized, and can
        /// take a very long time if you're looking up large numbers.
        /// </summary>
        /// <param name="number"></param>
        /// <returns></returns>
        static ulong Fibonacci(int number)
        {
            if (number == 1) { return 1; }
            if (number == …
Run Code Online (Sandbox Code Playgroud)

c#

4
推荐指数
1
解决办法
293
查看次数

为什么我的递归Fibonacci实现与迭代实现相比如此之慢?

我创建了以下简单的Fibonacci实现:

#![feature(test)]
extern crate test;

pub fn fibonacci_recursive(n: u32) -> u32 {
    match n {
        0 => 0,
        1 => 1,
        _ => fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2)
    }
}

pub fn fibonacci_imperative(n: u32) -> u32 {
    match n {
        0 => 0,
        1 => 1,
        _ => {
            let mut penultimate;
            let mut last = 1;
            let mut fib = 0;
            for _ in 0..n {
                penultimate = last;
                last = fib;
                fib = penultimate + last; …
Run Code Online (Sandbox Code Playgroud)

recursion performance benchmarking rust

4
推荐指数
1
解决办法
545
查看次数

python 2.7 - 递归Fibonacci爆炸

我有两个函数fib1fib2计算Fibonacci.

def fib1(n):
    if n < 2:
        return 1
    else:
        return fib1(n-1) + fib1(n-2)

def fib2(n):
    def fib2h(s, c, n):
        if n < 1:
            return s
        else:
            return fib2h(c, s + c, n-1)
    return fib2h(1, 1, n)
Run Code Online (Sandbox Code Playgroud)

fib2工作正常,直到它炸毁递归限制.如果理解正确,Python不会针对尾递归进行优化.我很好.

什么让我fib1开始减速甚至停止,即使非常小的值n.为什么会这样?为什么它在缓慢之前没有达到递归限制?

python recursion

3
推荐指数
2
解决办法
1028
查看次数

大写符号和递归函数

我正在尝试学习Big-O符号,但我很难计算递归函数的时间复杂度.

你能帮我理解下面例子的时间复杂度吗?

public int recursiveFunction(int n) {
    if (n == 0) {
        return 0;
    }

    return Math.max(recursiveFunction(rand(n)) + 2,recursiveFunction(n - 1));
}

public int rand(int n) {
    return new Random().nextInt(n - 1);
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

java recursion big-o time-complexity

3
推荐指数
1
解决办法
1721
查看次数

家庭作业:递归功能的大哦

这是我作业的一个问题.我不太清楚如何解决这样的问题.

If T(n) = nT(n - 1) and T(1) = 3, then
a) T(n) = O(n^n)
b) T(n) = ?(n!)
c) T(n) = O(2^(nlogn))
d) none of the above

我不需要这个问题的确切答案(因为它的功课),但我想知道告诉递归函数的界限的方法.

algorithm recursion

2
推荐指数
1
解决办法
791
查看次数

递归函数的运行时间T(n)

我正在尝试计算这个函数的T(n),我得出的是T(n)= T(n)+ T(n)+ O(1).我有两个递归调用函数g()的拖曳T(n),然后是所有常数时间操作(如加法)的O(1).我觉得我离开了所以任何帮助都会非常感激,我的数学背景也不太合理.

int g(int y) {
 if (y <= 0) {
  return 1;
 }
 else {
  return g(y - 1) + g(y - 2);
 }
}
Run Code Online (Sandbox Code Playgroud)

c++ recursion time fibonacci time-complexity

2
推荐指数
1
解决办法
2233
查看次数

Smalltalk斐波那契

我必须使用Smalltalk返回第n 斐波那契数,我以前没有使用过这种语言。该程序将1返回到任何输入,我不知道为什么。我认为它甚至没有迭代for循环。有人可以帮我吗?谢谢。

'Which fibonacci number do you want? (n>2)' printNl.
n := stdin nextLine asInteger.

(n <= 2)
    ifTrue: ['Type a larger number, F(1) and F(2) equals 1!' displayNl.]
    ifFalse: [  
        result:= 1.
        parent := 1.
        gparent := 1.   
        2 to: n do: [ :i | [
                result := (parent + gparent).
                gparent := parent.
                parent := result.
                'come on, do something' displayNl.
            ]
        ].
        result displayNl.
    ].
Run Code Online (Sandbox Code Playgroud)

syntax for-loop smalltalk gnu-smalltalk

2
推荐指数
3
解决办法
1554
查看次数