首页 > 其他分享 >时间复杂度计算-go

时间复杂度计算-go

时间:2023-03-15 15:55:05浏览次数:33  
标签:Println ++ 复杂度 次数 时间 计算 go fmt

两段函数,判断函数执行速度

func t1() int {
  fmt.Println("hello world")
  return 0
}

此段函数运行次数为2次,打印字符串一次,返回0值一次,T(n)估算值为:T(n)=2

  // i:=0 1次
  // i<n n+1次
  // i++ n次
  // fmt n次
  // return 1次
  // 相加:1 + n + 1 + n + n+ 1 = 3n+3
func t2(n int) int {
  for i := 0; i < n; i++ {
    fmt.Println("hello world")
  }
  return 0
}

当n=2时此段代码运行次数为9次,i=0一次,i<2 3次,i++两次,打印两次,return一次,T(n)估算值为:T(n)=3N+3

T(n),T当输入为n时,某段代码的总执行次数,n输入数据的大小或者数量

简化的T(n)就是时间复杂度

调用一次函数t1,T(n)= 2 → 1 ,T(n)=常数,常数无论是什么值都估算为1

掉用一次函数t2,T(n)=3n+3 →,常数在时间复杂度估算为1,T(n)=n,因为对于程序来说运行时长最大的还是n,常数的运行时长的固定的

对于n的指数方程应该按照最高指数项来约

T(n)=5n^3+6666n^2+2333 约为T(n)=n^3,n^2的运行时常远远小于n^3的运行时长,对于T(n)来说影响程序运行时长最大的还是n^3的运行时长

表示时间复杂度需要在估值外面加上O

例如:

T(n)=O(1)
T(n)=O(n)
T(n)=O(n^3)

例题

  • 多重循环
func t3(n int) {
  for i := 0; i < n; i++ { //执行次数为n
    for j := 0; j < n; j++ { //执行次数为n
      fmt.Println("你好@") //执行次数为1
    }
  }
  // 整体执行次数为:n * n * 1 = n^2
}
  时间复杂度:O(n^2),公式为如果有a层循环,时间复杂度就是O(n^a)
  • 多重循环加上单循环
func t4(n int) {
  for i := 0; i < n; i++ { //执行次数为n
    for j := 0; j < n; j++ { //执行次数为n
      fmt.Println("你好@") //执行次数为1
    }
  }
  // 多重循环执行次数为n^2
  for i := 0; i < n; i++ {
    fmt.Println("你好!")
  }
  // 单循环执行次数为n
}

  整体时间复杂度为O(n^2),因为对程序整体时间复杂度影响最大的是n^2
  • 多重循环加上判断
func t4(n int) {
  if n > 100 {
    for i := 0; i < n; i++ { //执行次数为n
      for j := 0; j < n; j++ { //执行次数为n
        fmt.Println("你好@") //执行次数为1
      }
    }
  } else {
    // 多重循环执行次数为n^2
    for i := 0; i < n; i++ {
      fmt.Println("你好!")
    }
  }
  // 单循环执行次数为n
}
  对于分情况运行的程序依旧是按照运行时间最长的分支来计算,所以此程序时间复杂度为O(n^2)
  • 循环嵌套
func t5(n int) {
  for i := 0; i < n; i++ {
    for j := i; j < n; j++ {
      // i = 0 j = 0 循环次数为n-0次 i = 1 j = 1 循环次数为 n - 1 次 i = 2 j = 2 循环次数为 n - 2次 当i = n -1 时 j = n -1 循环次数为 n - (n - 1) 循环次数为1
      fmt.Println(j, i)
    }
  }

}
  整体时间复杂度公式为:

  T(n) = n + (n -1) + (n-2)...+(n - (n-2)) + (n-(n-1))+(n-(n-0))

       =n + n - 1 + n - 2 ... + 2 + 1 + 0

       =n + n + n +.....

       =n * n

       = n^2

  时间复杂度O(n^2)

logn算法

func t6(n int) {
  for i := 0; i < n; i *= 2 {
    fmt.Println("hello world")
  }
}

根据单循环时间复杂度来类比,当n=2时T(2)=2,2是打印的次数,也就是说打印的时间就是此代码的真正执行时间。对于上面的代码,假设n=8,共计打印字符串的次数为3次,假设n=16共计打印字符串次数为4次,从公式可得

T(8)=3, 2^3=8,2^T(8)=8

T(16)=4, 2^4=16,2^T(16)=16

2^T(n)=n

转换一下可得:T(n)=logn2n,再换算为时间复杂度为:T(n)=O(logn n)

时间复杂度对比

  
名称 时间复杂度
常数时间 O(1)
对数时间 O(log n)
线性时间 O(n)
线性对数时间 O(n log n)
二次时间 O(n^2)
三次时间 O(n^3)
指数时间 O(2^n)

运行时间大小从上往下排越靠下运行时间越长

标签:Println,++,复杂度,次数,时间,计算,go,fmt
From: https://www.cnblogs.com/suknna/p/17218844.html

相关文章

  • django-filter用法
    一.环境准备pipinstallDjango==2.2-ihttps://pypi.douban.com/simplepipinstalldjangorestframework==3.10-ihttps://pypi.douban.com/simplepipinstalldjan......
  • [计算机基础笔记] C/C++
    C语言面向过程,C++面向对象。面相过程的思维方式,它更加注重这个事情的每一个步骤以及顺序。他比较直接高效,需要做什么可以直接开始干。程序=算法+数据面向对象的思维方式......
  • (转)go context详解
    原文:https://www.cnblogs.com/niuben/p/15110611.html前言平时在Go工程的开发中,几乎所有服务端的默认实现(例如:HTTPServer),都在处理请求时开启了新的 goroutine 进行......
  • 协同存储,为边缘计算创造更大价值
    01数据的爆发为存储带来持续挑战在5G时代下,视频和图片因其强大的信息承载力,已经成为数据内容的主要载体和信息传播的主要方式。而5G的大带宽、低时延、广连接的特性激活了......
  • css属性计算过程
    首先我们在HTML中使用h1标签展现标题时,我们没有设置该h1的任何央视,但是却能看到该h1由一定的默认样式,例如有默认的字体大小、默认的颜色。那么问题来了,我们这个h1元素上......
  • go程Id retrieve the current goroutine's ID
    https://github.com/petermattis/goidfuncGoID()int{varbuf[64]byten:=runtime.Stack(buf[:],false)//得到id字符串idField:=strings.Fields(......
  • #Python 计算地理经纬度距离
    一:X-MIND二:计算两点经纬度之间的距离经纬度是利用三维球面空间来描述地球上一个位置的坐标系统,每个经纬度坐标由经度lng和纬度lat两个分量组成。经纬度的有效范围为......
  • python+playwright 学习-32 启动Google Chrome 或 Microsoft Edge浏览器
    前言playwright默认会下载chromium,firefox和webkit三个浏览器,目前支持通过命令下载的浏览器有:chromium、chrome、chrome-beta、msedge、msedge-beta、msedge-dev、f......
  • Ubuntu 上安装 Golang 环境
    下载的相应Go版本压缩包https://golang.org/dl/##官网地址 打开终端并转到下载目录。 解压缩下载的Go二进制文件。可以使用以下命令解压缩:tar-C......
  • 解决raw.githubusercontent.com无法访问的问题(picgo+github配置图床图片不显示,但仓库
    解决raw.githubusercontent.com无法访问的问题(picgo+github配置图床图片不显示,但仓库已存储成功)关于如何配置picgo+github图床参考我的这篇文章:https://www.cnblogs.com/r......