算法2

2018-10-26  本文已影响0人  无端飞溅

算法的分类

  1. 精确算法(exact algorithm),总能保证求得问题的解
  2. 启发式算法(heuristic algorithm),通过使用某种规则,简化或智能猜测来减少问题求解时间。不能保证是问题的最优解,甚至不一定是问题的可行解(feasible solution)

PS:对于最优化问题,一个算法如果致力于寻找近似解而不是最优解,被称为近似算法(approximation algorithm),求得的是问题的可行解,而不是最优解。

如何确认算法

递归

  uint64_t Fib(uint64_t n)
  {
    if (n<=1) return n;
    return Fib(n-1)+Fib(n-2);
  }

挺简单的,是吧,但是,对,这种话后面一般都有但是
这个程序如果真的执行,最多也就到n=40左右,50基本上就看不到结果了,或者要等很久,因为递归嵌套太深了,所以,还要优化,

map<uint64_t, uint64_t> g_mapFib;
uint64_t Fibex(uint64_t n)
{
    if (n<=1){
        return n;
    }
    uint64_t t = g_mapFib[n];
    if (0 == t){
        t = Fibex(n-2) + Fibex(n-1);
        g_mapFib[n] = t;
    }
    
    return t;
}

使用map把计算过的值存起来,避免重复计算,然后速度就很快啦
这里用map纯粹是图方便,用vector,数组都可以的

上一篇下一篇

猜你喜欢

热点阅读