zoukankan      html  css  js  c++  java
  • 什么是算法?

    书中的解释是:

    算法 (algorithm) 是对特定问题求解步骤的一种描叙,它是指令的有限序列,其中每一条指令表示一个或多个操作;此外,一个算法还应具有:有穷性,确定性,可行性,输入,输出 5个重要特性。

    朴素的理解就是计算的方法,例如,求斐波那契数列的第n项:

    [a_n=a_{n-1}+a_{n-2} ]

    方法一:递归

    function fib1(n) {
        if (n <= 1) {
        	return n;
        }
        return fib1(n - 1) + fib1(n - 2);
    }
    

    方法二:迭代

    function fib2(n) {
        if (n <= 1) {
            return n;
        }
        let [pre, curr] = [0, 1];
        while (n-- > 1) {
            [pre, curr] = [curr, pre + curr];
        }
        return curr;
    }
    

    方法三:通项公式直接计算

    [F(n)=frac{1}{sqrt{5}}[(frac{1+sqrt{5}}{2})^n-(frac{1-sqrt{5}}{2})^n] ]

    function fib3(n) {
        var c = Math.sqrt(5);
        return parseInt((Math.pow((1 + c) / 2, n) - Math.pow((1 - c) / 2, n)) / c);
    }
    

    斐波那契数列的第n项等于前两项之和,第一种方法“递归”直接把这种表述反应在程序上,最符合递推公式 an=an-1+an-2 的数学表述了。第二种方法“迭代”程序就像人一样从第一项开始加起来,不断循环反复的去做这个加法,直到加到第n项。第三种方法,人已经将通项公式计算出来了,留给计算机的就是数值计算。

    对于计算机来说哪种方法最友好呢?

    自然是第三种。要知道,计算机的数值运算要比我们人脑快许多的,至于通项公式是怎么想出来的,计算机说,“交给你了,哥们”。第二种方法计算机要循环往复的去计算,那是不是比一步到位要复杂一点呢?第一种方法递归就像俄罗斯套娃,那个只能大喊,“禁止套娃”,哈哈。

  • 相关阅读:
    常用图书下载
    模式另类说明
    windows进程中的内存结构
    Windows API学习手记
    20060318工作记录
    X3全局变量及公共函数所在的命名空间说明
    PHP 后台定时循环刷新某个页面 屏蔽apache意外停止
    php随机生成指定长度的字符串 可以固定数字 字母 混合
    以div代替frameset,用css实现仿框架布局
    核中汇编写的字符串函数代码分析
  • 原文地址:https://www.cnblogs.com/arduka/p/12662857.html
Copyright © 2011-2022 走看看