数据结构 ——— 算法的时间复杂度

目录

时间复杂度的概念

时间复杂度函数式

大O的渐进表示法的概念

大O的渐进表示法


时间复杂度的概念

在计算机科学中,算法的时间复杂度是一个函数(数学上的函数式),它定量描述了该算法的运行时间,一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有把程序放在机器上跑起来,才能知道

所以才有了时间复杂度这个分析方式,一个算法所花费的时间于其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度


时间复杂度函数式

代码演示:

#include<stdio.h>
int main()
{int N = 0;scanf("%d", &N);int count = 0;// 循环1for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){count++;}}// 循环2for (int k = 0; k < N * 2; k++){count++;}// 循环3int M = 10;while (M--){count++;}printf("%d\n", count);return 0;
}

问:以上代码中的 count++ 语句执行了多少次?

代码解析:

循环1执行了 N*N 次 ;循环2执行了 N*2 次 ;循环3执行了 10 次

时间复杂度函数式:F(N) =  N*N + N*2 + 10

N = 10          F(N) = 130

N = 100        F(N) = 10210

N = 1000      F(N) = 1002010

代码验证:


大O的渐进表示法的概念

在实际中我们计算时间复杂度时,并不一定要计算精确的执行次数,只需要大概的执行次数,那么就需要使用大O的渐进表示法


大O的渐进表示法

大O符号:是用于描述函数渐进行为的函数符号

推导大O阶的方法:

  1. 用常数1取代运行时间中的所有加法常数
  2. 在修改后的运行次数函数中,只保留最高阶项
  3. 如果最高阶项存在且不是1,则去除与这个项目相乘的常数,得到的结果就是大O阶

 使用大O的渐进表示法后,以上时间复杂度函数式:F(N) =  N*N + N*2 + 10 就被改写为了:O(N^2)

N = 10          F(N) = 100

N = 100        F(N) = 10000

N = 1000      F(N) = 1000000

结论:

去掉了那些低阶项,大O的渐进表示法对结果的影响不大,且更加简洁明了的表示出了执行次数 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/54284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java工具安装教程

提示:先安装软件打开后关闭&#xff0c;在执行魔法操作 解压后会多个文件夹&#xff0c;从文件夹打开 要魔法哪款软件就打开对应的魔法脚本 比如&#xff1a;idea就运行idea魔法 点击打开 显示下面弹窗则成功&#xff0c;点击确定即可 打开IDEA查看&#xff1a;

Arthas thread(查看当前JVM的线程堆栈信息)

文章目录 二、命令列表2.1 jvm相关命令2.1.2 thread&#xff08;查看当前JVM的线程堆栈信息&#xff09;举例1&#xff1a;展示[数字]线程的运行堆栈&#xff0c;命令&#xff1a;thread 线程ID举例2&#xff1a;找出当前阻塞其他线程的线程 二、命令列表 2.1 jvm相关命令 2.…

面试题高频之token无感刷新(vue3+node.js)

无感刷新的基本原理 使用刷新令牌&#xff08;refresh token&#xff09;&#xff1a; ○ 应用程序在首次登录成功后会获得一个访问令牌&#xff08;access token&#xff09;和一个刷新令牌&#xff08;refresh token&#xff09;。 ○ 访问令牌通常有较短的有效期&#xff0…

人工智能 | 基于ChatGPT开发人工智能服务平台

简介 ChatGPT 在刚问世的时候&#xff0c;其产品形态就是一个问答机器人。而基于ChatGPT的能力还可以对其做一些二次开发和拓展。比如模拟面试功能、或者智能机器人功能。 模拟面试功能包括个性化问题生成、实时反馈、多轮面试模拟、面试报告。 智能机器人功能提供24/7客服支…

Python习题 190:用类编写一个年会抽奖程序

(编码题)用 Python 的类编写一个年会抽奖程序,要求: 公司员工的名单用 Faker 来模拟构造,要求有姓名、部门(自己编写几个随机指定)、工号,名单数据类型为 pandas 的 DataFrame 类型 在抽奖项目的类中,有两个属性,一个是奖池,即要参与抽奖的员工名单,一个是获奖名单…

Python的基础知识,帮助初学者快速上手

Python 是一种广泛使用的高级编程语言&#xff0c;以其简洁的语法、动态类型系统和强大的标准库而著称。这里介绍一些Python的基础知识&#xff0c;帮助初学者快速上手。 1. 环境搭建 安装Python&#xff1a;可以从Python的官方网站&#xff08;https://www.python.org/&…

学习之使用IDEA集成GIT

一、环境准备 1.1 配置git忽略文件 git.ignore 文件模版内容如下: # Compiled class file *.Class#Log file *.log# BlueJ file *.ctxt# Mobile Tools for Java (J2Me) *.mtj.tmp/# Package File *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar.classpath .project .settings…

SDKMAN!关联已安装JDK

查看已经安装的JDK目录 xxx:~ xxx$ /usr/libexec/java_home -V Matching Java Virtual Machines (3):17.0.6, x86_64: "Java SE 17.0.6" /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home11.0.10, x86_64: "Java SE 11.0.10" /Library/Java/J…

简单接口自动化框架实现(Python+requests+pytest)

1、接口自动化流程 1.需求分析2.挑选需要做自动化测试的功能3.设计测试用例4.搭建自动化测试环境[可选]5.设计自动化测试项目的架构[可选]6.编写代码7.执行测试用例8.生成测试报告并分析结果 2、框架结构 --api -->封装请求 --scripts -->编写测试脚本…

pandoc自定义过滤器

pandoc自定义过滤器 pandoc是一个强大的文本转换工具&#xff0c;可以实现各种文本格式的互相转换。 在开发过程中常用的文档格式有rst、markdown、pdf、docx等&#xff0c;pandoc支持这些格式互转&#xff0c;但是对于一些特殊格式和排版支持不是太好&#xff0c;需要做一些…

Python基础(六)——PyEcharts数据可视化初级版

案例 【前言&#xff1a;为了巩固之前的Python基础知识&#xff08;一&#xff09;到&#xff08;五&#xff09;&#xff0c;并为后续使用Python作为数据处理的好帮手&#xff0c;我们一起来看几个例子】 使用工具&#xff1a;Echarts Echarts 是一个由百度开源的数据可视化…

2024年华为杯广东工业大学程序设计竞赛 B.你是银狼(反悔贪心)

题目链接 B 你是银狼 思路&#xff1a; 发现其实只有房间 1 1 1 有的选&#xff0c;房间 2 , 3 2,3 2,3 都没得选&#xff0c;是一定要选的。房间 2 2 2 回血有益还能房间通过数 1 1 1&#xff0c;因此我们肯定会选。而对于一系列房间 1 1 1&#xff0c;在血量允许的前…

[2025]医院健康陪诊系统(源码+定制+服务)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【电路笔记】-运算放大器比较器

运算放大器比较器 文章目录 运算放大器比较器1、概述2、表示2.1 同相比较器2.2 反相比较器3、临界点转换4、施密特触发器4.1 同相触发器4.2 反相触发器4.3 应用5、总结1、概述 在前面的大多数运算放大器文章中,电路都有一个到反相输入的反馈环路。 这种设计是最常见的,因为它…

基于SpringBoot+Vue的企业会议室预定管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

Gin渲染

HTML渲染 【示例1】 首先定义一个存放模板文件的 templates文件夹&#xff0c;然后在其内部按照业务分别定义一个 posts 文件夹和一个 users 文件夹。 posts/index.tmpl {{define "posts/index.tmpl"}} <!DOCTYPE html> <html lang"en">&…

shell指令及笔试题

一&#xff1a;linux基本指令考察 创建文件&#xff0c;直接在本目录的上级目录下创建一个名为dir1的文件夹&#xff0c;并在dir1文件夹下创建一个名为file1的文件 答&#xff1a;本目录的上级目录下创建一个名为dir1的文件:mkdir ../dir1 在dir1文件夹下创建一个名为file1的…

集合是什么

1.是什么 集合&#xff08;Collection&#xff09;是Java语言中一个非常重要的概念&#xff0c;它是一组对象的容器&#xff0c;用于存储、检索和操作对象。在Java中&#xff0c;集合框架定义了一系列接口和实现类&#xff0c;用于处理不同类型的集合。 集合的概念 集合框架提…

TCP/IP - TCP

目录 1. 数据格式2. TCP建立:三次握手第一次握手:Client发出SYN帧(SN=a, AN=0, SYN=1, ACK=0)第二次握手:Server发出SYN+ACK帧(SN=b, AN=a+1, SYN=1, ACK=1)第三次握手:Clietn发出ACK帧(SN=a+1, AN=b+1, SYN=0, ACK=1)为什么是三次握手,而不是两次?建立连接之后,一…

【SQL】百题计划:SQL内置函数“LENGTH“的使用

【SQL】百题计划-20240912 方法一&#xff1a; Select tweet_id from Tweets where LENGTH(content) > 15;– 方法二&#xff1a; Select tweet_id from Tweets where CHAR_LENGTH(content)> 15;