原文地址:https://my.oschina.net/gooke/blog/684026

一下为本人笔记:)


场景:在解决计算机科学领域的问题时,经常有好多个方法都可以,想找到最优的方法,就有了时间复杂度。

时间复杂度

1.基于时间来衡量算法的效率高低。

2.时间:算法执行一个特定输入规模的函数所需要的时间。

案例!:

编写一个函数,找出数组中的最小值。

方法一:只是简单的遍历数组的每一个元素,然后用变量curMin保持当前的最小值。

int CompareSmallestNumber(int array[]) {

  int curMin;

  //把数组的第一个元素赋值给当前最小值

  curMin = array[0];

  /*

   * 遍历数组找出最小值

   */

  for (int x = 1; x < 10; x++) {

    if (array[x] < curMin) {

      curMin = array[x];

    }

  }

  // 返回最小值

  return curMin;

​}

方法二:让数组中的每一个元素和数组中的所有元素对比,如果某个元素小于或等于数组中所有的元素,那么这么元素就是数组中的最小元素。

int CompareToAllNumbers(int array[]) {

  boolean isMin;

  int  min =0 ;

  /*

   * 遍历数组中的每一个元素

   */

  for (int i = 0; i < 10; i++) {

    isMin = true;

    for (int j = 0; j < 10; j++) {

          /*

       * array[i]和数组的其他元素比较

       * 如果array[i]大于数组中的任何一个元素

       * 就说明array[i]不是最小值 

       */

      if (array[i] > array[j]){

        isMin = false;

      }

    }

    //如果是最小元素,保存下该元素并结束外层循环

    if (isMin){

      min =array[i];

      break;

    }

  }

  return min;

}

如何计算呢

“大O”会设法表达出n个输入项被“使用”了多少次。“使用”一词在不同的算法中会有不同的意思,在一个算法中表示“输入项”和一个常量了多少次,而在另外一个算法中可能表示“输入项”被往数据结构中添加了多少次,等等。

先来看方法一:

n(例子中是10)个输入项,每一个输入项仅在和最小值比较的时候被使用了一次。在“大O表示法”(Big-O Notation)中,它被写作O(n),也就是我们熟知的线性时间(linear time)。线性时间意味着,算法运行所需的时间和输入规模成正比。

我们把变量curMin初始化为数组的第一个值,也就是说,“输入项”被使用了一次。所以“大O表示法”应该是O(n+1)才对。实际上,“大O表示法”关心的是当输入规模n趋于无穷大时算法的运行时间。当‘n’趋于无穷大时,常量1就变得微不足道,可以忽略了。

所以,函数CompareSmallestNumber的“大O表示法”是O(n)而不是O(n+1)。

再看方法二:

这个算法最坏的情况是怎样的?数组中的最小值是数组的最后一个元素,就是最坏的情况,因为为了找到最小值,它不得不把数组从头到尾遍历一遍。数组中的每一个元素,都要和其他元素(包括自己)比较一次,一共做了100次比较,因为我们的输入规模是10,10x10=100=10²。当输入规模是n时,输入项会被使用n²次。O(n²)。

还有一些常见的大O符号,如 O(n²),O(log n),O(n log n)。

算法的时间复杂度——"大O分析法"(转载)的更多相关文章

  1. 算法的时间复杂度(大O表示法)

    定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数 T(n)称为这一算法的“时间复杂性”. 当输入量n逐渐加大时,时间复杂性的极限情形称为算法的“渐近时间复杂性 ...

  2. 习题一初步理解时间复杂度大O表示法案例

    1.如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a.b.c可能的组合? 如上:a+b+c=1000, a平方+b平方=c平方  求出所有abc可能的组合 ...

  3. 算法图解之大O表示法

    什么是大O表示法 大O表示法可以告诉我们算法的快慢. 大O比较的是操作数,它指出了算法运行时间的增速. O(n) 括号里的是操作数. 举例 画一个16个格子的网格,下面分别列举几种不同的画法,并用大O ...

  4. 重拾算法之复杂度分析(大O表示法)

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  5. C#中常用的排序算法的时间复杂度和空间复杂度

    常用的排序算法的时间复杂度和空间复杂度   常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 ...

  6. 白话算法:时间复杂度和大O表示法

    转自:https://www.jianshu.com/p/59d09b9cee58 每一个优秀的开发者脑中都有时间概念.他们想给用户更多的时间让用户做他们想做的事情.他们通过最小化时间复杂度来实现这一 ...

  7. 算法时间复杂度、空间复杂度(大O表示法)

    什么是算法? 计算机是人的大脑的延伸,它的存在主要是为了帮助我们解决问题. 而算法在计算机领域中就是为了解决问题而指定的一系列简单的指令集合.不同的算法需要不同的资源,例如:执行时间或消耗内存. 如果 ...

  8. python数据结构与算法学习自修第二天【时间复杂度与大O表示法】

    #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ from Queue import Queue import time que = Queue() time ...

  9. 常见算法的时间复杂度(大O计数法)

    定义 ​ 对于不同的机器环境而言,确切的单位时间是不同的,但是对于算法进行多少个基本操作(即花费多少时间单位)在规模数量级上却是相同的,由此可以忽略机器环境的影响而客观的反应算法的时间效率. 对于算法 ...

随机推荐

  1. pytorch自定义网络层以及损失函数

    转自:https://blog.csdn.net/dss_dssssd/article/details/82977170 https://blog.csdn.net/dss_dssssd/articl ...

  2. 货币转换C

    描述 人民币和美元是世界上通用的两种货币之一,写一个程序进行货币间币值转换,其中:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮ ...

  3. HTML中关于 浮动 的简单说明

    1.首先,标签之所以有存在等级分类,是因为他们处于标准文档流(块级元素,行内元素,行内块元素)当中. 2.如何脱离标准文档流? 浮动 绝对定位 固定定位 这些可以让一个标签脱离标准文档流,而元素一旦脱 ...

  4. TCP三次握手过程中涉及的队列知识的学习

    先上一张图 (图片来源:http://www.cnxct.com/something-about-phpfpm-s-backlog/) 如上图所示,这里有两个队列:syns queue(半连接队列): ...

  5. 阿里高级架构师教你使用Spring Cloud Sleuth跟踪微服务

    随着微服务数量不断增长,需要跟踪一个请求从一个微服务到下一个微服务的传播过程,Spring Cloud Sleuth 正是解决这个问题,它在日志中引入唯一ID,以保证微服务调用之间的一致性,这样你就能 ...

  6. 【翻译】--19C Oracle 安装指导

    18C新功能     1.简化的基于镜像的Oracle数据库安装     从18C开始,Oracle可以作为镜像文件来下载和安装,必须解压缩镜像文件到ORACLE_HOME目录,然后执行runInst ...

  7. 2.Vue调试工具vue-devtools的安装步骤和使用

    1.安装步骤: 打开谷歌浏览器设置 -->扩展程序 -->勾选开发者模式 --->加载已解压的扩展程序 --->选择“chrome扩展”文件夹即可:

  8. 浏览器获取当前ip

    function findIP(callback) { var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConn ...

  9. SQL server 语句执行分析

  10. tp5 sum某个字段相加得到总数

    方法 说明count 统计数量,参数是要统计的字段名(可选)max 获取最大值,参数是要统计的字段名(必须)min 获取最小值,参数是要统计的字段名(必须)avg 获取平均值,参数是要统计的字段名(必 ...