数据结构:算法(特性,时间复杂度,空间复杂度)

目录

  • 1.算法的概念
  • 2.算法的特性
    • 1.有穷性
    • 2.确定性
    • 3.可行性
    • 4.输入
    • 5.输出
  • 3.好算法的特质
    • 1.正确性
    • 2.可读性
    • 3.健壮性
    • 4.高效率与低存储需求
  • 4.算法的时间复杂度
    • 1.事后统计的问题
    • 2.复杂度表示的计算
      • 1.加法规则
      • 2.乘法规则
      • 3.常见函数数量级比较
  • 5.算法的空间复杂度
    • 1.程序的内存需求
    • 2.例题
    • 3.函数调用(递归)带来的内存开销

1.算法的概念

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

2.算法的特性

1.有穷性

一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。
算法必须是有穷的,而程序可以是无穷的

2.确定性

算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出

3.可行性

算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。

4.输入

一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。

5.输出

一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。

3.好算法的特质

1.正确性

算法应能够正确地解决求解问题。

2.可读性

算法应具有良好的可读性,以帮助人们理解。

3.健壮性

输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。

4.高效率与低存储需求

即算法执行省时、省内存:时间复杂度低、空间复杂度低。

4.算法的时间复杂度

事前预估算法时间开销T(n)与问题规模n的关系(T表示“time”)

  • 最坏时间复杂度:最坏情况下算法的时间复杂度。
  • 平均时间复杂度:所有输入示例等概率出现的情优下,算法的期望运行时间。
  • 最好时间复杂度:最好情况下算法的时间复杂度。

1.事后统计的问题

①和机器性能有关,如:超级计算机v.s.单片机
②和编程语言有关,越高级的语言执行效率越低
③和编译程序产生的机器指令质量有关
④有些算法是不能事后再统计的,如:导弹控制算法

2.复杂度表示的计算

1.加法规则

多项相加,只保留最高阶的项,且系数变为1。

2.乘法规则

多项相乘,都保留。

3.常见函数数量级比较

在这里插入图片描述

①顺序执行的代码只会影响常数项,可以忽略。
②只需挑循环中的一个基本操作分析它的执行次数与n的关系即可。
③如果有多层嵌套循环,只需关注最深层循环循环了几次。

5.算法的空间复杂度

1.程序的内存需求

①若无论问题规模怎么变,算法运行所需的内存空间都是固定的常量,
算法空间复杂度为s(n)= o(1),则称该算法为原地工作:算法所需的内存空间为常量。
②只需关注存储空间大小与问题规模相关的变量。

2.例题

在这里插入图片描述

3.函数调用(递归)带来的内存开销

一般情况,空间复杂度等于递归调用的深度。
注:有的算法各层函数所需存储空间不同,分析方法略有区别。

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

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

相关文章

5.3 用户定义的完整性

思维导图: 5.3 用户定义的完整性 用户定义的完整性是确保数据库中的数据满足特定应用的语义要求。这是通过关系数据库管理系统(RDBMS)中的内置机制来完成的,不需要依赖应用程序来执行。 5.3.1 属性上的约束条件 1. 定义属性上的约束条件 当在CREATE T…

centos7安装oxidized备份软件

首先需要提前下载ruby,因为默认yum安装的版本太低 https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0.tar.gz 1、yum remove ruby ruby-devel(有就卸载,没有则忽略) 2、将下载好的ruby包解压到/opt下 [rootoxidized ruby-…

Python---字符串输入和输出---input()、格式化输出:%,f形式,format形式

字符串输入: 在Python代码中,我们可以使用input()方法来接收用户的输入信息。记住:在Python中,input()方法返回的结果是一个字符串类型的数据。 如果之后使用输入的数据,一定要记得利用数据类型转换。 相关链接:Pyt…

nodejs升级或降级

node有一个模块叫n,是专门用来管理node.js的版本。 升级或降级步骤 1 、安装n模块 npm install -g n 2、 升级node.js到最新稳定版 n stable Ps: n后面也可以跟随版本号(用于升级或降级)比如: n v16.12.0

蚂蚁SOFA Stack融合大模型发布升级版 将为机构产研效能提升30%

11月1日,在云栖大会上,蚂蚁集团正式发布CodeFuse全面加持的SOFAStack5.0升级版本,向企业提供全方位研发运维智能助手相关能力。这是继蚂蚁集团在外滩大会发布代码大模型CodeFuse之后,首次公布面向行业的商业化产品进展。 “大模型…

Controllable Guide-Space for Generalizable Face Forgery Detection

一、研究背景 以往工作专注于提取伪造特征的共同特性和真假域鉴别性信息,以提升特征泛化性。 但在训练过程中,这些方法只区分真假域,并将不同的伪造域看作一类而不加以区分。 这会导致伪造样本进一步以伪造不相关特征(如&#xff…

ACID模型

ACID 是数据库管理系统(DBMS)中用来确保事务处理正确性和可靠性的四个特性的首字母缩写。ACID 是指原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性&#xff08…

如何通过 NAT 模式连接VMware虚拟机以及存在和不存在ens33文件的解决方案

文章目录 前言1 VMware配置1.1 打开vmvare虚拟网络编辑器1.2 取消使用本地DHCP1.3 NAT设置 2 虚拟机的配置2.1 存在ens332.2.1 修改ifcfg-ens33文件2.2.1.1 为什么设置BOOTPROTOstatic?2.2.1.2 如何选择使用static还是dhcp? 2.2.2 关闭防火墙 2.2 不存在…

VScode clangd 插件浏览 linux 源码

文章目录 VScode clangd 插件浏览 linux 源码clangd 安装与配置VScode 插件安装clangd 安装方法一方法二 clangd 配置 cmake 生成bear 生成 compile_commands.json触发 clangd linux 内核脚本生成 compile_commands.json 文件三种方式对比 VScode clangd 插件浏览 linux 源码 …

抖音协议算法最新版

抖音的协议算法是指用于推荐内容和个性化用户体验的算法系统。这些算法根据用户的兴趣、行为和偏好来推荐适合他们的视频内容,以提供更好的用户体验。 抖音的协议算法使用了大量的数据和机器学习技术来实现个性化推荐。以下是一些可能应用于抖音协议算法的技术和方法…

使用Objective-C和ASIHTTPRequest库进行Douban电影分析

概述 Douban是一个提供图书、音乐、电影等文化内容的社交网站,它的电影频道包含了大量的电影信息和用户评价。本文将介绍如何使用Objective-C语言和ASIHTTPRequest库进行Douban电影分析,包括如何获取电影数据、如何解析JSON格式的数据、如何使用代理IP技…

机器学习-特征工程

一、特征工程介绍 1.1 什么是特征 数值特征(连续特征)、文本特征(离散特征) 1.2 特征的种类 1.3 特征工程 特征是机器学习可疑直接使用的,模型和特征之间是一个循环过程; 实际上特征工程就是将原始数据…

3 Tensorflow构建模型详解

上一篇:2 用TensorFlow构建一个简单的神经网络-CSDN博客 本篇目标是介绍如何构建一个简单的线性回归模型,要点如下: 了解神经网络原理构建模型的一般步骤模型重要参数介绍 1、神经网络概念 接上一篇,用tensorflow写了一个猜测西…

微信小程序:自定义组件传值——获取手机验证码

一:遇到的问题 通过自己自定义的组件编写的表单,发现传值不了,点击后收到的值为空。 二:创建组件 先在根目录创建components文件夹,创建img-verify文件夹(这个是我取的组件名字),在…

什么是 DevOps

DevOps是一套融合软件开发(Dev)和 IT 运营(Ops)的实践,旨在缩短应用程序开发周期并确保以高软件质量持续交付,通过采用 DevOps 实践,您可以帮助组织更可靠、更快速、更高效地交付软件。 什么是…

一百九十八、Java——IDEA项目中有参构造、无参构造等快捷键(持续梳理中)

一、目的 由于IDEA项目中有很多快捷键,可以很好的提高开发效率,因此整理一下 二、快捷键 (一)快捷键生成public static void main(String[] args) {} 快捷键:psvm (二)快捷键在test中创建cn…

MacOS安装git

文章目录 通过Xcode Command Lines Tool安装(推荐)终端直接运行git命令根据流程安装先安装Command Lines Tool后再安装git 官网下载二进制文件进行安装官方国外源下载二进制文件(不推荐)国内镜像下载二进制文件(推荐)安装git 通过Xcode Command Lines Tool安装(推荐) 简单来讲C…

ubuntu(18.04)中架设HiGlass docker镜像服务,已尝试mcool、bedpe、wig格式文件

前言 使用到的软件 docker 文档 : https://www.docker.com/ HiGlass 文档:http://docs.higlass.io/higlass_docker.html#running-locally https://github.com/higlass/higlass-dockerhiglass-docker 地址:https://github.com/higla…

17.基干模型Swin-Transformer解读

文章目录 SWin-Transformer解读1.基础介绍关于Shifted Window based Self-Attention相对位置偏置网络整体结构和层级特征欢迎访问个人网络日志🌹🌹知行空间🌹🌹 SWin-Transformer解读 1.基础介绍 Swin-Transformer是2021年03月微软亚洲研究院提交的论文中提出的,比V…

Arduino开发

文章目录 Arduino IDE 的使用1. 使能编译以及烧录的LOG:2. 下载配置3. 下载 Arduino指令程序下载步骤通过下载器下载通过串口下载 关于Arduino IDE工程生成的二进制文件对比Tools-->burn bootloader 和 ArduinoISP例程 的区别自带例程 Arduino IDE 的使用 1. 使…