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项。第三种方法,人已经将通项公式计算出来了,留给计算机的就是数值计算。

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

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

  • 相关阅读:
    php学习----文件系统
    zabbix添加mysql自定义监控项
    mysql主从库不同步问题
    zabbix分区
    CentOs7.3 安装 MySQL 5.7.21 二进制版本及主从配置
    MySQL数据备份之mysqldump使用
    mysql 占用大量写I/O
    zabbix添加企业微信发送
    Centos7 更新软件及删除多余内核
    zabbix监控vCenter报错
  • 原文地址:https://www.cnblogs.com/arduka/p/12662857.html
Copyright © 2011-2022 走看看