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

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

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

  • 相关阅读:
    weblogic详解
    Java实现视频网站的视频上传、视频转码、及视频播放功能(ffmpeg)
    Java上传视频(mencoder)
    input标签type="file"上传文件的css样式
    jQuery系列:选择器
    jQuery系列:Ajax
    Sql Server系列:规范化及基本设计
    Sql Server系列:查询分页语句
    Sql Server系列:通用表表达式CTE
    Sql Server系列:子查询
  • 原文地址:https://www.cnblogs.com/arduka/p/12662857.html
Copyright © 2011-2022 走看看