zoukankan      html  css  js  c++  java
  • 算法分析

    问题描述:在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 Interger类,两对整数明明完全一样,为何一个输出true,一个输出false
    使用类的静态字段和构造函数,跟踪某个类所创建对象的个数
    Java基础笔记3
    Java 统计单词频数
    重拾javaweb(假期后第一次web测试)
    人月神话读后感(三)
    人月神话读后感(二)
    人月神话读后感(一)
    七天开发安卓软件(七)
  • 原文地址:https://www.cnblogs.com/niepeizhi/p/12068762.html
Copyright © 2011-2022 走看看