相关疑难解决方法(0)

大O,你如何计算/近似它?

大多数拥有CS学位的人肯定会知道Big O代表什么.它可以帮助我们衡量算法的实际效率(如何),如果你知道你试图解决的问题属于哪个类别,你可以弄清楚是否仍然可以挤出那么少的额外性能.1

但我很好奇,如何计算或近似算法的复杂性?

1 但正如他们所说,不要过度,过早优化是所有邪恶的根源,没有正当理由的优化也应该得到这个名称.

algorithm optimization performance complexity-theory big-o

852
推荐指数
20
解决办法
41万
查看次数

什么是动态编程?

什么是动态编程

它与递归,记忆等有什么不同?

我已经阅读了维基百科上的文章,但我仍然不太了解它.

algorithm dynamic-programming

265
推荐指数
8
解决办法
13万
查看次数

是否可以将(x == 0 || x == 1)简化为单个操作?

所以我试图在Fibonacci序列中尽可能紧凑地写出第n个数:

public uint fibn ( uint N ) 
{
   return (N == 0 || N == 1) ? 1 : fibn(N-1) + fibn(N-2);
}
Run Code Online (Sandbox Code Playgroud)

但我想知道我是否可以通过改变来使其更加紧凑和高效

(N == 0 || N == 1)
Run Code Online (Sandbox Code Playgroud)

进入单一比较.是否有一些奇特的位移操作可以做到这一点?

c# algorithm optimization arithmetic-expressions

106
推荐指数
9
解决办法
1万
查看次数

在Haskell中生成Fibonacci数?

在Haskell中,如何基于第n个Fibonacci数等于第(n-2)个Fibonacci数加上第(n-1)个Fibonacci数的属性生成Fibonacci数?

我见过这个:

fibs :: [Integer]
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)

我真的不明白,或者它是如何产生无限列表而不是包含3个元素的列表.

我如何通过计算实际定义来编写haskell代码,而不是通过使用list函数做一些非常奇怪的事情?

haskell fibonacci

49
推荐指数
5
解决办法
4万
查看次数

为什么计算Fibonacci系列2 ^ n而不是n ^ 2的复杂性?

我试图找到使用递归树的Fibonacci系列的复杂性,并因此得出height of tree = O(n)最坏情况cost of each level = cncomplexity = n*n=n^2

怎么回事O(2^n)

algorithm recursion big-o fibonacci

24
推荐指数
5
解决办法
5万
查看次数

各种斐波那契实施的大O.

我只是尝试用各种方法实现代码(在Java中),通过它可以计算斐波那契数列的第n项,并且我希望验证我学到了什么.

迭代实现如下:

public int iterativeFibonacci(int n)
{
  if ( n == 1 ) return 0;
  else if ( n == 2 ) return 1;
  int i = 0, j = 1, sum = 0;
  for ( ; (n-2) != 0; --n )
  {
    sum = i + j;
    i = j;
    j = sum;
  }
  return sum;
}
Run Code Online (Sandbox Code Playgroud)

递归实现如下: -

  public int recursiveFibonacci(int n)
  {
    if ( n == 1 ) return 0;
    else if ( n == 2 ) …
Run Code Online (Sandbox Code Playgroud)

java algorithm complexity-theory big-o time-complexity

21
推荐指数
1
解决办法
1万
查看次数

ConcurrentHashMap和Fibonacci数字 - 结果不一致

我写了一个递归计算斐波纳契数的程序,用a ConcurrentHashMapcomputeIfAbsent()方法:

程序工作绝对正常,当我使用小值8,9,10,但当从程序的值增加永远停止时卡在无限循环中10 to 20

 public class Test {
    static Map<Integer, Integer> concurrentMap = new ConcurrentHashMap<>();

    public static void main(String[] args) {
        System.out.println("Fibonacci result for 20 is" + fibonacci(20));
    }

    static int fibonacci(int i) {
        if (i == 0)
            return i;

        if (i == 1)
            return 1;

        return concurrentMap.computeIfAbsent(i, (key) -> {
            System.out.println("Value is " + key);
            return fibonacci(i - 2) + fibonacci(i - 1);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我为什么它会永远被卡住吗?

java fibonacci concurrenthashmap

15
推荐指数
1
解决办法
1062
查看次数

如何更快地生成Fibonacci

我是一名CSE学生,正准备参加编程竞赛.现在我正在研究Fibonacci系列.我有一个大小约为包含正整数的Kilo字节的输入文件.输入甲酸酯看起来像

3 5 6 7 8 0
Run Code Online (Sandbox Code Playgroud)

零表示文件结束.输出应该如此

2 
5 
8 
13 
21 
Run Code Online (Sandbox Code Playgroud)

我的代码是

#include<stdio.h>

int fibonacci(int n) {
  if (n==1 || n==2)
    return 1;
  else
    return fibonacci(n-1) +fibonacci(n-2);
}
int main() {
  int z;
  FILE * fp;    
  fp = fopen ("input.txt","r");    
  while(fscanf(fp,"%d", &z) && z) 
   printf("%d \n",fibonacci(z));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

该代码适用于样本输入并提供准确的结果但问题是我的实际输入集它花费的时间超过我的时间限制.谁能帮我吗.

c algorithm fibonacci

13
推荐指数
6
解决办法
3万
查看次数

第n个Fibonacci数的调用次数

请考虑以下代码段:

int fib(int N)
{
   if(N<2) return 1;
   return (fib(N-1) + fib(N-2));
}
Run Code Online (Sandbox Code Playgroud)

鉴于fib从主要调用N为10,35,67,...(比如说),总共拨打了多少电话fib

这个问题有什么关系吗?

PS:这是一个理论问题,不应该被执行.

编辑:

我知道其他方法可以更快地计算Fibonacci系列.

我想要一个解决方案来计算fib被调用为fib(40),fib(50),...而没有编译器的帮助,并且在考试条件下你应该回答40个类似于这个规定的问题时间(约30分钟).

谢谢,

c c++ algorithm

8
推荐指数
1
解决办法
1万
查看次数

从C++中的函数返回递归lambda

请参阅以下代码:

std::function<int(int)> makeFibonacci() {
    std::function<int(int)> fibonacci = [&fibonacci](int n) {
        if (n == 1) {
            return 1;
        }
        if (n == 2) {
            return 1;
        }
        return fibonacci(n-1) + fibonacci(n-2);
    };
    return fibonacci;
};

int main() {
    std::function<int(int)> fibonacci = makeFibonacci();
    std::cout << fibonacci(6) << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,数字8按预期输出.但是,当我将捕获更改&fibonacci为仅fibonacci用于副本捕获时,程序实际上会main在其运行的第一行上进行段错误makeFibonacci.

如果fibonacci(第2行)是makeFibonacci函数的局部函数,因此当函数退出时超出范围,如何通过引用捕获并递归使用?另外,为什么当我通过副本捕获lambda时程序会出现段错误?

c++ lambda

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