当前位置: 首页 > news >正文

1.2 算法和算法评价

1.2.1 算法的基本概念

算法:对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。

算法的五个重要特性

“好”的算法的五个目标

1.2.2 算法效率的度量

一、时间复杂度

算法的时间复杂度是指一个算法每行语句执行次数的最大值。

例子

运行结果

我们可以看到最终的运行次数取决于循环语句的运行次数,而循环语句的执行次数又与n有关,如果n的值无限大,那么循环的运行次数就会无限大,也就是n,所以运行时间复杂度就是n。

例子源代码(C语言)

#include <stdio.h>int main()
{//初始化;int i = 0;//运行了1次!//定义n的值;int n = 10;//运行了1次!//定义循环;for (i = 1; i <= n; i++)//运行了11次!{//打印现在是第几次运行;printf("现在是第%d次运行!", i);//运行了10次!//换行;printf("\n");//运行了10次!}//换行;printf("\n");//运行了1次!//打印总共运行了几次;printf("总共运行了%d次!", i);//运行了1次!return 0;
}

(一)时间复杂度的分类

1.常数阶O(1)

无伦代码执行了多少行,只要没有循环时间复杂度就为O(1)

2.线性阶O(n)

有循环,循环的时间复杂度为O(n)

3.对数阶O(logN)

从上面的代码中可以看到每次i的变化是乘2,所以相当于i乘2的x次方等于n,所以x等于log₂n。

所以时间复杂度为O(log₂n)

4.线性对数阶O(nlog₂n)

就是把对数阶循环n遍,时间复杂度就是O(nlog₂n)。

5.平方阶O(n²)

就是把循环n次再循环n次,时间复杂度为O(n²)。

6.立方阶O(n³)、K次方阶O(n^k)

参考上面的O(n²) 去理解就好了,O(n³)相当于三层n循环,其它的类似。

(二)循环语句的运算方法

以下面的代码为例

运算步骤

①找循环条件:n>=i*i;

②找循环体中的趋近条件结束变量:x=x+1;

③假设循环执行t次;

④将③带入②,计算t<=n的表达式;

       ③带入②:x=t

       ②带入①:n>=t²

                         n½>=t

                         t<=n½

算法的时间复杂度T(n)=O(n½)

(三)时间复杂度的不同情况

最坏时间度复杂度:在最坏的情况下算法的时间复杂度;

(比如找找一个数据,最坏情况就是把所有数据都查完了最后一个才是要找的数据)

平均时间复杂度:所有可能输入实例在等概率情况下,算法的期望运行时间;

(比如找找一个数据,平均情况就是在所有数据中位于中间位置的就是要查找的数据)

最好时间复杂度:在最好情况下算法的时间复杂度;

(比如找找一个数据,最好情况就是把第一个数据就是要查找的数据)

(四)常见的渐进时间复杂度

O(1) < O(log₂n) < O(n) < O(nlog₂n) < O(n²) < O(n³) < O(2ⁿ) < O(n!) < O(nⁿ)

二、空间复杂度

算法的空间复杂度为该算法在运行过程中所需要的存储空间。

(一)算法空间复杂度O(1)

如果算法执行所需要的临时空间不随着某个变量的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)。

(二)算法空间复杂度O(n)

在上面的代码中数组a需要开辟的存储空间为n,在运行过程中循环只是往开辟好空间的数组a中不断填入数据,所以空间复杂度为O(n)。

相关文章:

1.2 算法和算法评价

1.2.1 算法的基本概念 算法&#xff1a;对特定问题求解步骤的一种描述&#xff0c;它是指令的有限序列&#xff0c;其中的每条指令表示一个或多个操作。 算法的五个重要特性 “好”的算法的五个目标 1.2.2 算法效率的度量 一、时间复杂度 算法的时间复杂度是指一个算法每行…...

各大常见编程语言应用领域

不同编程语言因其特性和设计目标而适用于不同的应用领域。以下是一些常见编程语言及其主要应用领域&#xff1a; 1. Python 数据科学与人工智能&#xff1a;Python 在数据分析、机器学习、深度学习等领域广泛使用&#xff0c;因其丰富的库&#xff08;如 NumPy、Pandas、Tens…...

【FFT】数据点数是否一定为2的n次方?不补零会如何处理?

一般来说&#xff0c;FFT的数据点个数为以2为基数的整数次方&#xff08;采用以2为基的FFT算法&#xff0c;可以提升运算性能&#xff09;&#xff0c;但是并没有要求FFT的数据点个数一定为2的n次方。 因此针对数据点数不是以2为基数的整数次方&#xff0c;有两种处理方法&…...

shell脚本小练习#003:查找并拷贝目录

实例1&#xff1a; # 从当前执行脚本的路径位置开始向上搜索一个名为sourceProject目录名 # 并将这个文件目录的路径名称打印出来#!/bin/bashfunction find_dir() {local current_dir$PWDwhile [[ $current_dir ! "/" ]]; doif [[ -d "${current_dir}/sourcePr…...

frp内网穿透

目录 1&#xff0c;准备公网服务器 2&#xff0c;下载安装frp服务端 3&#xff0c;服务端安装 2&#xff09;编辑服务端配置文件fprs.toml 3&#xff09;配置启动服务 4&#xff09;启动服务 5 &#xff09;设置开机启动服务 6&#xff09;查看服务启动状态 3&#xff0c…...

Android电视项目焦点跨层级流转

1. 背景 在智家电视项目中&#xff0c;主要操作方式不是触摸&#xff0c;而是遥控器&#xff0c;通过Focus进行移动&#xff0c;确定点击进行的交互&#xff0c;所以在电视项目中焦点、选中、确定、返回这几个交互比较重要。由于电视屏比较大&#xff0c;在一些复杂页面中会存…...

时频转换 | Matlab基于S变换S-transform一维数据转二维图像方法

目录 基本介绍程序设计参考资料获取方式基本介绍 时频转换 | Matlab基于S变换S-transform一维数据转二维图像方法 程序设计 clear clc % close all load x.mat % 导入数据 x =...

转载 为nautilus安装rabbitvcs

# 添加 rabbitvcs 的 ppa 源 sudo add-apt-repository ppa:rabbitvcs/ppa sudo apt update # 安装 rabbitvcs sudo apt install rabbitvcs-cli rabbitvcs-core rabbitvcs-gedit rabbitvcs-nautilus # 注销后重新登录&#xff0c;右键即可使用 # 解决 RabbitVCS 无法自动保存…...

OpenCV 模板匹配全解析:从单模板到多模板的实战指南

简介&#xff1a;本文深入探讨 OpenCV 中的模板匹配技术。详细介绍构建输入图像与模板图像的步骤&#xff0c;包括读取、截取、滤波与存储等操作。剖析 cv2.matchTemplate 语法及其参数含义&#xff0c;阐述不同匹配方法下结果值的意义。同时讲解 cv2.minMaxLoc 语法&#xff0…...

手机控制载货汽车一键启动无钥匙进入广泛应用

移动管家载货汽车一键启动无钥匙进入手机控车系统‌&#xff0c; 该系统广泛应用于物流运输、工程作业等货车场景&#xff0c;为车主提供了高效、便捷的启动和熄火解决方案&#xff0c;体现了科技进步对物流行业的积极影响‌ 核心功能‌&#xff1a;简化启动流程&#xff0c;提…...

Springboot——SseEmitter流式输出

文章目录 前言SseEmitter 简介测试demo注意点异常一 ResponseBodyEmitter is already set complete 前言 最近做AI类的开发&#xff0c;看到各大AI模型的输出方式都是采取的一种EventStream的方式实现。 不是通常的等接口处理完成后&#xff0c;一次性返回。 而是片段式的处理…...

【人工智能数学基础篇】线性代数基础学习:深入解读矩阵及其运算

矩阵及其运算&#xff1a;人工智能入门数学基础的深入解读 引言 线性代数是人工智能&#xff08;AI&#xff09;和机器学习的数学基础&#xff0c;而矩阵作为其核心概念之一&#xff0c;承担着数据表示、变换和运算的重任。矩阵不仅在数据科学中广泛应用&#xff0c;更是神经…...

idea 自动导包,并且禁止自动导 *(java.io.*)

自动导包配置 进入 idea 设置&#xff0c;可以按下图所示寻找位置&#xff0c;也可以直接输入 auto import 快速定位到配置。 Add unambiguous imports on the fly&#xff1a;自动帮我们优化导入的包Optimize imports on the fly&#xff1a;自动去掉一些没有用到的包 禁止导…...

奇怪的编码2

1.当铺密码 当铺密码的标志是“田由中人工大王夫井羊” 口 0 田 0 由 1 中 2 人 3 工 4 大 5 王 6 夫 7 井 8 羊 9 解密脚本&#xff1a; s 田由中人工大王夫井羊 codeinput("请输入当铺密码&#xff1a;") code code.split(" ") w for i in code:k…...

AI服务器从HBM到CXL的技术变革

AI服务器从HBM到CXL变革 本文探讨了AI产业的新范式&#xff0c;特别是服务器变革。传统服务器价格通常在1万美金以内&#xff0c;而搭载8张H100算力卡的DGX H100AI服务器价值高达40万美金(约300万人民币)。这一变化将对AI产业产生深远影响。 自然语言和图形处理依赖大量存储器…...

将自定义 AWS S3 快照存储库连接到 Elastic Cloud

作者&#xff1a;来自 Elastic Annie Hansen, Stef Nestor 在本博客中&#xff0c;我们将介绍如何通过 Elasticsearch 的快照将我们已提交的集群数据备份到 AWS S3 存储桶中。在 Elastic Cloud&#xff08;企业版&#xff09;中&#xff0c;Elastic 在其 found-snapshots 存储…...

Java 多线程编程核心要点全解析:深度探秘关键方法与同步机制

1.Thread 类中的start() 和 run() 方法有什么区别&#xff1f; 在Java编程语言中&#xff0c;Thread 类的 start() 和 run() 方法有重要的区别&#xff1a; start() 方法&#xff1a; 当你调用 start() 方法时&#xff0c;它会启动一个新的线程&#xff0c;并且这个新线程会…...

个人博客接入github issue风格的评论,utteranc,gitment

在做个人博客的时候&#xff0c;如果你需要评论功能&#xff0c;但是又不想构建用户体系和评论模块&#xff0c;那么可以直接使用github的issue提供的接口&#xff0c;对应的开源项目有utteranc和gitment&#xff0c;尤其是前者。 它们的原理是一样的&#xff1a;在博客文章下…...

搞个项目之-esp32-cam ov2640模组搭建图像视频项目

开发版的介绍&#xff1a; 1、开发板使用的是&#xff1a;ESP32-CAM 2、摄像头模组&#xff1a;OV2640 3、烧录底座&#xff1a;ESP32-CAM开发板烧录座 4、mirco usb线&#xff0c;四线30cm 5、开发版的原理图像 项目前期的准备工作 一、安装arduino arduino官网地址地址…...

【FPGA开发】Vivado自定义封装IP核,绑定总线

支持单个文件的封装、整个工程的封装&#xff0c;这里用单个文件举例。 在文件工程目录下&#xff0c;自建一个文件夹&#xff0c;里面放上需要封装的verilog文件。 选择第三个&#xff0c;指定路径封装&#xff0c;找到文件所在目录 取个名&#xff0c;选择封装IP的路径 会…...

Leetcode51:N 皇后

题目描述&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问…...

C#面向对象之访问限制,类基础,继承

文章目录 1 访问限制1.1 简介 2 类基础讲解2.1 类定义2.2 构造函数2.2.1 构造函数2.2.2 静态构造函数2.2.3 初始化顺序2.2.4 对象初始化器 2.3 析构函数2.4 类的静态成员2.5 匿名对象2.5.1 定义2.5.2 匿名对象的创建 3 继承3.1 基类和派生类3.2 基类初始化3.3 Partial类3.3.1 定…...

科研小白成长记41——享受大起大落

一直内心对自己的定位是喜欢安安静静生活的人&#xff0c;但是朋友提醒我我的生活一直都是出于各种冒险之中&#xff0c;从GAP申博&#xff0c;到GAP找工作&#xff0c;都不是一个乐于安于现状的人会做出来的。仔细想想不无道理&#xff0c;既然如此&#xff0c;那就如享受安静…...

正则表达式笔记

一、基本正则 常见元字符 元字符说明^以某个字符开头$以某个字符结尾.匹配任意单字符*对前一项进行0次或者多次重复匹配{m,n}将前一项字符重复m-n次&#xff0c;{m,},{,n},{m&#xff0c;n}[]对方括号内的单字符进行匹配[^]不匹配方括号内的单字符^[]匹配以某个字符开头的行(…...

解决本地运行SuperPoint_SLAM报错ERROR: flag ‘flagfile‘ was defined more than once

解决本地运行SuperPoint_SLAM报错ERROR: flag flagfile was defined more than once 起因使用LD_DEBUG排查链接过程用ldd查看各自链接的库解决办法问题解决 起因 在之前本地编译了opencv-3.4.2&#xff0c;当时因为contrib模块需要gflags&#xff0c;重新下载了一个gflags在本…...

springboot信息化在线教学平台的设计与实现(代码+数据库+LW)

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了信息化在线教学平台的开发全过程。通过分析信息化在线教学平台管理的不足&#xff0c;创建了一个计算机管理信息化在线教学平台的方案。文章介绍了信息化在线教…...

maxun爬虫工具docker搭建

思路来源开源无代码网络数据提取平台Maxun 先把代码克隆到本地&#xff08;只有第一次需要&#xff09; git clone https://github.com/getmaxun/maxun.git 转到maxun目录 cd maxun 启动容器 docker-compose --env-file .env up -d 成功启动六个容器 网址 http://local…...

高效 Python Web 开发:FastAPI 入门与实践

高效 Python Web 开发&#xff1a;FastAPI 入门与实践 目录 ✨ 1. 安装与环境配置 &#x1f4e6; 安装 FastAPI 和 Uvicorn&#x1f5c2;️ 项目目录结构和初始化&#x1f680; 创建一个简单的 FastAPI 项目 &#x1f6e0;️ 2. FastAPI 路由与请求处理 &#x1f6e3;️ 基本…...

C++中的函数重载

函数重载是指在同一个作用域&#xff08;通常是一个类或者一个命名空间&#xff09;内&#xff0c;可以有多个同名函数&#xff0c;但是这些同名函数的参数列表&#xff08;参数的个数、类型或者顺序&#xff09;不同。当调用这个函数名时&#xff0c;编译器会根据传入的实际参…...

达梦数据库常用指令都是工作中常用的

达梦数据库连接配置文件名称 cd /etc/dm_svc.conf查询 sql 日志记录是否开启&#xff1a;0 关闭&#xff0c;1/2/3开启); select SF_GET_PARA_VALUE(1,SVR_LOG)union ALL select SF_GET_PARA_VALUE(2,SVR_LOG);关闭 sql 日志记录功能 call SP_SET_PARA_VALUE(1,SVR_LOG,0);开…...

【2024最新】基于Springboot+Vue的就业信息管理系统Lw+PPT

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…...

linux一键部署apache脚本

分享一下自己制作的一键部署apache脚本&#xff1a; 脚本已和当前文章绑定&#xff0c;请移步下载&#xff08;免费&#xff01;免费&#xff01;免费&#xff01;&#xff09; &#xff08;单纯的分享&#xff01;&#xff09; 步骤&#xff1a; 将文件/内容上传到终端中 …...

修改MySQL数据库密码报1290

修改MySQL数据库密码报1290 错误 如下&#xff1a; alter user ‘root’‘localhost’ identified by ‘root’; ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement 需要刷新下配置 flush privileg…...

OpenCV4.8 开发实战系列专栏之 17 - 图像直方图

大家好&#xff0c;欢迎大家学习OpenCV4.8 开发实战专栏&#xff0c;长期更新&#xff0c;不断分享源码。 专栏代码全部基于C 与Python双语演示&#xff0c;领学习资料(Free) & 进专栏答疑群&#xff0c; VX&#xff1a; OpenCVXueTang_Asst 本文关键知识点&#xff1a;图…...

Linux下如何安装JDK

在Linux系统上安装JDK&#xff08;Java Development Kit&#xff09;&#xff0c;通常包括下面步骤&#xff1a; 下载JDK安装包解压安装包配置环境变量等 在介绍安装之前&#xff0c;先厘清一些常用问题。 Linux 下Java 安装到哪个目录比较好&#xff1f; 在Linux系统下&am…...

实时数据开发|Flink如何实现不同数据源输入--DataSource模块

DataStream 编程模型 Flink定义DataStream API让用户灵活且高效的编写流式应用。主要分为3部分&#xff1a;DataSource模块&#xff0c;Transformation模块以及DataSink模块。 DataSource模块&#xff0c;主要定义了数据接入功能&#xff0c;将外部数据接入至flink&#xff0…...

使用Dify与BGE-M3搭建RAG(检索增强生成)应用-改进一,使用工作流代替Agnet

文章目录 前言Agent vs 工作流编写工作流 前言 在上一篇中&#xff0c;我们实现了一个基本的基于Dify的RAG的示范。 使用Dify与BGE-M3搭建RAG&#xff08;检索增强生成&#xff09;应用 这个效果确实很差。 我们一起来看看&#xff0c;该怎么改进。 今天我们就尝试一下&…...

GPT模型:改变世界的AI魔法师

目录 一、什么是GPT&#xff1f;它是怎么来的&#xff1f; 二、GPT能干啥&#xff1f;&#xff08;它简直无所不能&#xff01;&#xff09; 三、想用GPT&#xff1f;这点开发技巧你一定要知道&#xff01; 第一步&#xff1a;用OpenAI API搭建自己的GPT服务 第二步&#x…...

初识ProtoBuf以及环境搭建(Win和Ubuntu)

初始ProtoBuf 序列化和反序列化的概念 序列化&#xff1a;把对象转换为字节序列的过程 称为对象的序列化。 反序列化&#xff1a;把字节序列恢复为对象的过程 称为对象的反序列化。 什么情况下需要序列化和反序列化&#xff1f; 存储数据&#xff1a;当你想把的内存中的对象状…...

H3C OSPF实验

实验拓扑 实验需求 按照图示配置 IP 地址按照图示分区域配置 OSPF &#xff0c;实现全网互通为了路由结构稳定&#xff0c;要求路由器使用环回口作为 Router-id&#xff0c;ABR 的环回口宣告进骨干区域 实验解法 一、配置IP地址 [R1]int l0 [R1-LoopBack0]ip add 1.1.1.1 32 […...

【Spark源码分析】基于Spark3.4.2源码分析SparkSQL执行过程

基于Spark3.4.2源码分析SparkSQL执行过程 文章目录 基于Spark3.4.2源码分析SparkSQL执行过程基本执行流程Unresolved逻辑计划树相关类RuleExector相关类 详细代码SparkSessionAbstractSqlParserDatasetQueryExecutionAnalyzerRuleExecutorCheckAnalysis 附录CTE简述SQL解析器Qu…...

centos8:Could not resolve host: mirrorlist.centos.org

【1】错误消息&#xff1a; [rootcentos211 redis-7.0.15]# yum update CentOS Stream 8 - AppStream …...

超详细ensp配置VRRP和MSTP协议

一、简介 1、什么是VRRP&#xff1a; &#xff08;1&#xff09;VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;的概念&#xff1a; VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;指的是一种实现路由器冗余备份的协议&#xff0c;常用于…...

聊聊Flink:这次把Flink的触发器(Trigger)、移除器(Evictor)讲透

一、触发器(Trigger) Trigger 决定了一个窗口&#xff08;由 window assigner 定义&#xff09;何时可以被 window function 处理。 每个 WindowAssigner 都有一个默认的 Trigger。 如果默认 trigger 无法满足你的需要&#xff0c;你可以在 trigger(…) 调用中指定自定义的 tr…...

为啥不推荐使用数据库外键

为啥不推荐使用数据库外键 前言 在阿里开发手册中写道&#xff1a;不得使用外键与级联&#xff0c;一切外键概念必须在应用层解决。 说明&#xff1a;&#xff08;概念解释&#xff09;学生表中的 student_id 是主键&#xff0c;那么成绩表中的 student_id 则为外键。如果更…...

C# 13 中的新增功能

C# 12 中的新增功能C# 11 中的新增功能C# 10 中的新增功能C# 9.0 中的新增功能C# 8.0 中的新增功能C&#xff03;7.0中有哪些新特性&#xff1f;C#6.0中10大新特性的应用和总结C# 5.0五大新特性 将C#语言版本升级为预览版 C# 13 包括一些新增功能。 可以使用最新的 Visual Stu…...

sunshine+moonlight

参考自 b站视频 电脑端&#xff08;发送端&#xff09; 去 sunshine github 下载 https://github.com/LizardByte/Sunshine/releases/tag/v2024.1127.551下载后打开&#xff0c;创建用户名和密码修改配置选项&#xff0c;启用 UPnP&#xff0c;IP 地址族使用 IPv4IPv6 平板端…...

Python练习题合集

目录 一. 请编程输出其中 “超过平均身高” 的那些值。 二. 字典处理&#xff1a; 三. 求斐波那契数列的前若干项 四. 编程输出最长字符串的长度。 五. 去掉一个最高分&#xff0c;去掉一个最低分&#xff0c;其余分求平均作为最终分数。 六. 打印小九九乘法表 七.…...

frp 内网穿透

文章目录 前言使用自己的服务器搭建frp 这里服务器是linux centos 7 宝塔&#xff0c;client是 windows10 https://github.com/fatedier/frp/releases/tag/v0.53.2 版本下载分客户端与服务端 一、frp是什么&#xff1f;二、使用步骤1.部署服务器端2.客户端 前言 使用自己的服务…...

Vue3 子路由vue如何调用父路由vue中的方法?

1. router -> index.ts 文件&#xff1a; import { createRouter, createWebHistory } from vue-router import DefaultView from /views/default/index.vue import ParentView from /views/parent/index.vue import ChildView from /views/child/index.vueconst router …...