• 算法分析


    问题描述:在1000个数内,找出3个相加和为506有多少个

    // js
    let count = 1000;
    let target = 506;
    let result = 0;
    for(let i=1; i<=count; i++) {
      for (let j=1; j<=count; j++) {
        for (let k=1; k<=count; k++) {
          if (i+j+k===target) {
            result++;
          }
        }
      }
    }
    

    分析运行时间

    运行时间T(n) = a * 增长函数
    a: 常数。具体看运行机器,可以理解为执行每条语句的耗时
    增长函数:语句运行的次数。通常为循环语句、函数调用的次数

    1. 求出增长函数:O(n^3)。因为这里有3层循环,其他语句可以忽略不计
    2. 求出运行时间,这里需要实际运行一下
            function testRunTime(fn) {
                let start = new Date();
                let end = null;
                fn();
                end = new Date();
                console.log(`运行时间: ${(end - start) / 1000}秒`); // 1.718 秒
            }
            testRunTime(() => {
                let count = 1000;
                let target = 506;
                let result = 0;
                for (let i = 1; i <= count; i++) {
                    for (let j = 1; j <= count; j++) {
                        for (let k = 1; k <= count; k++) {
                            if (i + j + k === target) {
                                result++;
                            }
                        }
                    }
                } 
            });
    
    1. 求出a: 1.718 / 1000^3 = 0.000000001718
    2. 得到时间计算模型: T(n) = 0.000000001718 * n^3(秒)

    注意事项

    1. 如果算法中除了循环或函数调用,有较大的语句运行,也要计算进去。如 O(n) = n + 100
    2. 增长函数并非只是统计循环、函数调用。

    分析内存使用情况

    算法运行时所创建的数据类型的内存占用大小总和

    1. 找出算法运行时创建的数据类型:
      5个数字类型变量。因为for循环中定义的变量是局部变量,每一次循环结束都会销毁,故算一次
    2. 找出数据类型占用的内存大小,将全部相加
      假设每个数据类型占用内存为4字节,则5*4=20字节
  • 相关阅读:
    Java之修改文件内容:字符串逐行替换
    Java之"instanceof"和"isInstance"代码举例
    spring之跨模块引用配置文件
    Java之相对路径找不到文件问题解决方法
    html 页面模块的常用命名
    移动端资源集锦
    手机web不同屏幕字体大小高度自适应
    meta标签整理
    css文字超出自动显示省略号
    display:inline、block、inline-block的区别
  • 原文地址:https://www.cnblogs.com/niepeizhi/p/12068762.html
Copyright © 2020-2023  润新知