算法复杂度详解

算法复杂度详解算法复杂度详解在本篇文章中你将了解到 O 1 O n O logn O nlogn 的区别及分析方法时间复杂度的优劣对比首先 o 1 o n o logn o nlogn 是用来表示对应算法的时间复杂度 这是算法的时间复杂度的表示 不仅仅用于表示时间复杂度 也用于表示空间复杂度 算法复杂度分为时间复杂度和空间复杂度 其作用 时间复杂度是指执行这个算法所需要的计算工作量 空间复杂度是指执行这个算法所需要的内存空间 O 后面的括号中有一个函数 指明某个算法的耗时

算法复杂度详解

在本篇文章中你将了解到:

  • O(1),O(n),O(logn),O(nlogn)…的区别及分析方法
  • 时间复杂度的优劣对比

    首先o(1), o(n), o(logn), o(nlogn)是用来表示对应算法的时间复杂度,这是算法的时间复杂度的表示。不仅仅用于表示时间复杂度,也用于表示空间复杂度。

算法复杂度分为时间复杂度和空间复杂度。其作用:

  • 时间复杂度是指执行这个算法所需要的计算工作量;
  • 空间复杂度是指执行这个算法所需要的内存空间;

O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。

O(1),O(n),O(logn),O(nlogn)…的区别及分析方法

  1. 时间复杂度为O(n)—线性阶,就代表数据量增大几倍,耗时也增大几倍。比如常见的遍历算法。
//循环遍历N次即可得到结果 count = 0; for(int i = 0;i < 10 ; i ++){ 
    count ++; } 
  1. 时间复杂度O(n^2)—平方阶, 就代表数据量增大n倍时,耗时增大n的平方倍,这是比线性更高的时间复杂度。比如冒泡排序,就是典型的O(n x n)的算法,对n个数排序,需要扫描n x n次。
 for(int i =1;i<arr.length;i++) { 
    //遍历n次 for(int j=0;j<arr.length-i;j++) { 
   //遍历n-1次 if(arr[j]>arr[j+1]) { 
    int temp = arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } //整体复杂度n*(n-1) 
  1. 时间复杂度O(logn)—对数阶,当数据增大n倍时,耗时增大logn倍(这里的log是以2为底的,比如,当数据增大256倍时,耗时只增大8倍,是比线性还要低的时间复杂度)。二分查找就是O(logn)的算法,每找一次排除一半的可能,256个数据中查找只要找8次就可以找到目标。
    int count = 1; while(count < n) { 
          count = count*2; //时间复杂度O(1)的程序步骤序列 ...... } 

由于每次count成衣2之后,就距离n更近了一分。也就是说,有多少个2相乘后大于n,则会退出循环。由2^x=n 得到x=logn。所以这个循环的时间复杂度为O(logn).

 js int binarySearch(int a[], int key) { int low = 0; int high = a.length - 1; while (low <= high) { int mid = low + (high - low) / 2; if (a[mid] > key) high = mid - 1; else if (a[mid] < key) low = mid + 1; else return mid; } return -1; } 
  1. 时间复杂度O(nlogn)—线性对数阶,就是n乘以logn,当数据增大256倍时,耗时增大256*8=2048倍。这个复杂度高于线性低于平方。归并排序就是O(nlogn)的时间复杂度。
  2. O(1)—常数阶:最低的时空复杂度,也就是耗时与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变。 哈希算法就是典型的O(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到目标。
    index = a; a = b; b = index; //运行一次就可以得到结果 

    时间复杂度的优劣对比

    O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3)< O(2^n) < O(n!) < O(n^n)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222125.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午4:31
下一篇 2026年3月17日 下午4:31


相关推荐

  • Linux远程连接工具:finalshell

    Linux远程连接工具:finalshell一 finalshell 介绍前面一直使用 xshell 作为 Linux 远程连接的工具 教程请看 通过 xshell 远程连接 ubuntu 但是 xshell 是付费软件 于是 找到一个 finalshell 作为其替换软件 FinalShell 是一体化的的服务器 网络管理软件 不仅是 ssh 客户端 还是功能强大的开发 运维工具 充分满足开发 运维需求 特色功能 云端同步 免费海外服务器远程桌面加速 ssh 加速 本地化命令输入框 支持自动补全 命令历史 自定义命令参数更多介绍 请自行百度 或查看官网介绍 http

    2026年3月19日
    3
  • fleck 客户端_C Fleck的WebSocket使用

    fleck 客户端_C Fleck的WebSocket使用1 Web 网页端代码 WebSocket 测试 div1 height 88px width 173px border 1pxsolidblue margin auto h4 margin auto varwebSocket 创建 websocktfunc webSocket newWebSocket ws 127

    2026年3月19日
    2
  • FindWindowEx函数

    FindWindowEx函数当你想控制一个现有的窗口程序时,就需要获取那个程序的窗口句柄。比如有一些黑客软件需要查找到窗口,然后修改窗口的标题。在外挂流行的今天,惊奇地发现它们也可以修改输入窗口的文字。这其中,就需要使用到FindWindowEx函数来定位窗口。下面就来使用这个函数来实现控制Windows里带的计算器程序。打开计算器程序,最小化在状态下面,运行本例子,点击创建按钮后,就可以点按钮,就会把计算器显示在最前面。

    2022年5月31日
    102
  • 净推荐值NPS(Net Promoter Score)[通俗易懂]

    净推荐值NPS(Net Promoter Score)[通俗易懂]净推荐值净推荐值(NetPromoterScore,NPS)目录[隐藏]1什么是净推荐值2净推荐值的理论基础[3]3净推荐值的计算4净推荐值的意义5净推荐值的评析6净推荐值在企业中的应用分析[3]7企业通过净推荐值提高客户忠诚度的主要步骤[5]8净推荐值提高客户忠诚度的实证分析[5]9净推荐值应用实例10参考文献[编辑]什么是净推荐值  净推荐值(N…

    2022年6月12日
    36
  • ubuntu 安装教程(2016年qq版本v6.3.6)

    1、ctri+alt+t打开控制台2、输入:sudoadd-apt-repositoryppa:ubuntu-wine/ppa这是添加wine的库,照提示按回车添加稍等一下3、更新新软件中心输入:sudoapt-getupdate等待更新完毕后输入:sudoapt-getinstallwine1.7

    2022年4月17日
    39
  • 计算机组成原理浮点规格化,规格化浮点数

    计算机组成原理浮点规格化,规格化浮点数本词条缺少概述图 补充相关内容使词条更完整 还能快速升级 赶紧来编辑吧 规格化浮点数又称格式化输出 是指把一个浮点数按指定的格式进行转换 通常在报表统计展示 数据计算存储时需要格式化 常用的格式化函数有 format cast 等 中文名规格化浮点数又称格式化输出定义是指把一个浮点数按指定的格式进格式化函数 format cast 规格化浮点数计算机组成原理编辑语音若不对浮点数的表示作出

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号