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

数据结构复习指导之绪论(算法的概念以及效率的度量)

文章目录

绪论:

2.算法和算法评价

知识总览

2.1算法的基本概念

知识点回顾与重要考点

2.2算法效率的度量

知识总览

1.时间复杂度

2.空间复杂度

知识点回顾与重要考点

归纳总结


绪论:

2.算法和算法评价

知识总览

2.1算法的基本概念

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

1)  有穷性。一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。

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

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

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

5)输出一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。通常,设计一个“好”的算法应考虑达到以下目标:

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

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

        3)健壮性。算法能对输入的非法数据做出反应或处理,而不会产生莫名其妙的输出。

        4)高效率与低存储量需求。效率是指算法执行的时间,存储量需求是指算法执行过程中所
        需要的最大存储空间,这两者都与问题的规模有关。

知识点回顾与重要考点

2.2算法效率的度量

知识总览

1.时间复杂度

一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。

算法中基本运算(最深层循环中的语句)的频度与T(n)同数量级,因此通常将算法中基本运算的执行次数的数量级作为该算法的时间复杂度。于是,算法的时间复杂度记为T(n)=O(f(n))

式中,O的含义是T(n)的数量级,其严格的数学定义是:若T(n)和 fn)是定义在正整数集合上的两个函数,则存在正常数C和n,使得当n≥n时,都满足0≤T(n)≤Cf(n)。

算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入数据的性质(如输入数据元素的初始状态)。例如,在数组A [ 0...n- 1]中,查找给定值k的算法大致如下:

i=n-l;
while (i>=0&&(A[i]!=k))
i--;
return i;

该算法中语句3(基本运算)的频度不仅与问题规模n有关,而且与下列因素有关:

若A中没有与k相等的元素,则语句3的频度f(n)=n。
②若A的最后一个元素等于k,则语句3的频度f(n)是常数0。最坏时间复杂度是指在最坏情况下,算法的时间复杂度。


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

最好时间复杂度是指在最好情况下,算法的时间复杂度。

一般总是考虑在最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。在分析一个程序的时间复杂性时,有以下两条规则:

1)加法规则:T(n)=T(n)+T,(n)=O(f(n))+O(gn))=O(max(f(n), g(n))

2)乘法规则: T(n)=T(n)xT;(n)=O(f(n))×O(g(n))=o(f (n)×g(n))

2.空间复杂度

算法的空间复杂度S(n)定义为该算法所需的存储空间,它是问题规模n的函数,记为

S(n)=O(g(n))

一个程序在执行时除需要存储空间来存放本身所用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间。若输入数据所占空间只取决于问题本身,和算法无关,则只需分析除输入和程序之外的额外空间。例如,若算法中新建了几个与输入数据规模n相同的辅助数组,则空间复杂度为O(n)。

算法原地工作是指算法所需的辅助空间为常量,即O(1)。


知识点回顾与重要考点

归纳总结

本章的重点是分析程序的时间复杂度。一定要掌握分析时间复杂度的方法和步骤,很多读者
在做题时一眼就能看出在厅出的两种形式,供大家参考。人众多资料,总结出了此类题型的两种形式,供大家参考。

1.循环主体中的变量参与循环条件的判断
在用于递推实现的算法中,首先找出基本运算的执行次数x与问题规模n之间的关系式,解得x=f(n),f(n)的最高次幂为k,则算法的时间复杂度为O(n^{k})。例如,

1.

int i=1;
while(i<=n)
i=i*2;

2.

int y=5;
while((y+1)*(y+1)<n)
y=y+1;


在例1中,设基本运算i=i*2的执行次数为t,则2^{t}\leqslant n,解得t\leqslant \log_{2}n,故 T(n)=O(\log_{2}n)

在例2中,设基本运算y=y+1的执行次数为t,则t=y-5,且(t+5+1)(t+5+1)<n,解得t<√n-6,即 T(n)= O( √n )。

2.循环主体中的变量与循环条件无关
此类题可采用数学归纳法或直接累计循环次数。多层循环时从内到外分析,忽略单步语句、条件判断语句,只关注主体语句的执行次数。

此类问题又可分为递归程序和非递归程序:

·递归程序一般使用公式进行递推。时间复杂度的分析如下:
T(n)=1+T(n-1)=1+1+T(n-2)=…=n-1+ T(1)
即T(n)=O(n)

·非递归程序的分析比较简单,可以直接累计次数。
 

相关文章:

数据结构复习指导之绪论(算法的概念以及效率的度量)

文章目录 绪论&#xff1a; 2.算法和算法评价 知识总览 2.1算法的基本概念 知识点回顾与重要考点 2.2算法效率的度量 知识总览 1.时间复杂度 2.空间复杂度 知识点回顾与重要考点 归纳总结 绪论&#xff1a; 2.算法和算法评价 知识总览 2.1算法的基本概念 算法( Al…...

C语言经典例题(23)

1.求n的阶乘。(不考虑溢出) #include <stdio.h>int fac(int n);int main() {int n 0;scanf("%d", &n);int sum fac(n);printf("%d", sum);return 0; }int fac(int n) {if (n > 1){return n * fac(n - 1);}elsereturn 1; }2.求第n个斐波那契…...

Gitea的简单介绍

Gitea 是一个自由、开源、轻量级的 Git 服务程序。它是为了建立一个易于使用的、类似 GitHub 的 Git 服务而创建的。Gitea 采用 Go 语言编写,具有简单、快速、易于安装和配置的特点。 Gitea 提供了一个基本的 Web 界面,可以方便地进行代码托管、问题跟踪、协作等操作。用户可…...

Qt信号与槽

我们在使用Qt的时候&#xff0c;不使用Qt Designer 的方式进行开发&#xff0c;使用ui文件&#xff0c;信号与槽的连接方式是生成代码之后才能在setupUi函数里才能看到&#xff0c;或者需要进入Ui设计器里的信号槽模式里才能看到信号槽的连接。所以我们最好使用代码绘制界面。 …...

QQ农场-phpYeFarm添加数据教程

前置知识 plugin\qqfarm\core\data D:\study-project\testweb\upload\source\plugin\qqfarm\core\data 也就是plugin\qqfarm\core\data是一个缓存文件,如果更新农场数据后,必须要删除才可以 解决种子限制(必须要做才可以添加成功) 你不更改加入了id大于2000直接删除种子 D…...

Java中创建多线程的方法

继承Thread类&#xff0c;对该类进行new一个实例&#xff0c;对实例调用start方法&#xff0c;重写run方法。 缺点&#xff1a;单继承&#xff0c;无法继承 public class myThread extends Thread {public static void main(String[] args) {myThread myThread new myThread()…...

MT3020 任务分配

思路&#xff1a;利用二分找到某个时间是满足“k个人可以完成” &#xff0c;并且时间最小。 因为尽量让后面的人做任务&#xff0c;所以从后往前排任务&#xff08;倒着分配&#xff09;。从后往前遍历任务&#xff0c;如果此人加上这个任务超出之前求得的时间&#xff0c;就…...

【Redis】事务

Redis事务是一组命令的集合。这组命令顺序化执行而不会被其他命令插入。 Redis事务命令 命令描述DISCARD取消事务&#xff0c;放弃执行EXEC执行事务MULTI标记事务的开始UNWATCH取消WATCH对所有key的监控WATCH监控所有key Redis事务特点 特点说明单独的隔离操作Redis命令执行…...

每日一题(leetcode238):除自身以外数组的乘积--前缀和

不进阶是创建两个数组&#xff1a; class Solution { public:vector<int> productExceptSelf(vector<int>& nums) {int nnums.size();vector<int> left(n);vector<int> right(n);int mul1;for(int i0;i<n;i){mul*nums[i];left[i]mul;}mul1;for…...

内网通如何去除广告,内网通免广告生成器

公司使用内网通内部传输确实方便&#xff01;但是会有广告弹窗推送&#xff01;这个很烦恼&#xff01;那么如何去除广告呢&#xff01; 下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1CVVdWexliF3tBaFgN1W9aw?pwdhk7m 提取码&#xff1a;hk7m ID&#xff1a;…...

视频知识整理

1 视频播放器原理 视频播放器播放一个互联网上的视频文件&#xff0c;需要经过以下几个步骤&#xff1a; 解协议&#xff1a;将流媒体协议的数据&#xff0c;解析为标准的相应的封装格式数据 解封装&#xff1a;将封装格式的数据&#xff0c;分离成为音频流压缩编码数据和视…...

【2024】使用Rancher管理k8s集群和创建k8s集群

Rancher管理k8s集群及创建k8s集群。 Rancher版本为:2.8.2目录 rancher管理k8s集群rancher创建k8s集群rancher管理k8s集群 使用rancher管理已经存在的k8s集群。 本部分内容需要自行准备好k8s集群及rancher平台,部署请看本人其他文章 。 登录到rancher平台后,点击集群管理,…...

生成对抗网络 – Generative Adversarial Networks | GAN

目录 生成对抗网络 GAN 的基本原理 非大白话版本 第一阶段:固定「判别器D」,训练「生成器G」...

基于深度学习的生活垃圾智能分类系统(微信小程序+YOLOv5+训练数据集+开题报告+中期检查+论文)

摘要 本文基于Python技术&#xff0c;搭建了YOLOv5s深度学习模型&#xff0c;并基于该模型研发了微信小程序的垃圾分类应用系统。本项目的主要工作如下&#xff1a; &#xff08;1&#xff09;调研了移动端垃圾分类应用软件动态&#xff0c;并分析其优劣势&#xff1b;分析了深…...

软件包名生成参考

服务名称-分支名称-最后提交时间(精确到秒)-最后提交-编译时间(unix时间戳) 示例&#xff1a;crm_5.2_221024-221020160306-b846f829-1665655859 包名生成脚本参考&#xff1a; 分支名称 export GIT_BRANCH$(git branch|grep "\*"|head -n1|awk {print $NF})git最…...

八大排序算法(面试被问到)

1.八大排序算法都是什么&#xff1f; 八大排序算法有&#xff1a;插入排序、冒泡排序、归并排序、选择排序、快速排序、希尔排序、堆排序、基数排序&#xff08;通常不提&#xff09;。此外&#xff0c;还可以直接调用Arrays.sort()进行排序。 2.八大排序算法时间复杂度和稳定…...

SCP指令详细使用介绍

SCP&#xff08;Secure Copy Protocol&#xff09;是一种用于在计算机之间安全地传输文件的协议。它通过加密的方式在网络上安全地复制文件。SCP基于SSH&#xff08;Secure Shell&#xff09;协议&#xff0c;因此它提供了加密的连接和身份验证&#xff0c;确保数据在传输过程中…...

《前端面试题》- JS基础 - 防抖和节流

在界面触发点击&#xff0c;滚动&#xff0c;输入校验等事件时&#xff0c;如果对事件的触发频率不加以限制&#xff0c;会给浏览器增加负担&#xff0c;且对用户不友好。防抖和节流就是针对类似情况的解决方案。 防抖 防抖(debounce)&#xff1a;当连续触发事件时&#xff0…...

RAGFlow:基于OCR和文档解析的下一代 RAG 引擎

一、引言 在人工智能的浪潮中&#xff0c;检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;简称RAG&#xff09;技术以其独特的优势成为了研究和应用的热点。RAG技术通过结合大型语言模型&#xff08;LLMs&#xff09;的强大生成能力和高效的信息检索系统…...

正则表达式|*+?

在理解编程语言和编译技术的上下文中&#xff0c;了解正则表达式&#xff08;regular expressions&#xff09;和正则集&#xff08;regular sets&#xff09;的概念是非常重要的。这些概念主要用于描述一组字符串的模式&#xff0c;广泛应用于词法分析中识别各类标记&#xff…...

无机布防火卷帘门价格怎么算?按尺寸定制,按需报价

无机布防火卷帘门作为建筑防火分区的核心设备&#xff0c;价格一直是工程采购的关注重点。很多用户在询价时&#xff0c;会发现不同厂家的报价差异较大&#xff0c;这是因为无机布防火卷帘门的价格并非按统一单价计算&#xff0c;而是完全根据项目的实际需求定制化核算。 &…...

Python基础语法:生成器 generator(yield)

一、简介根据指定的规则循环生成数据&#xff0c;当条件不成立时则生成数据结束。数据不是一次性全部生成出来&#xff0c;而是使用一个&#xff0c;再生成一个&#xff0c;好处是可以节约大量的内存。就像设计模式中的懒汉式。适合处理大数据或流数。生成器是一种特殊的迭代器…...

2026年,揭秘那些真正安全的原生态食材厂家你不可不知的秘密

随着人们生活水平的提升以及对健康的日益重视&#xff0c;选择真正安全的原生态食材已经成为许多人购买食物的标准。但市场的繁杂使得甄别真正安全的食材厂家变得愈加困难。今天&#xff0c;我将通过几个关键角度&#xff0c;为大家揭秘那些真正安全的原生态食材厂家的秘密&…...

钱钟书《围城》第1-5章阅读笔记:一场关于人生困境的提前预演

前言 钱钟书先生的《围城》被誉为"新儒林外史"&#xff0c;是中国现代文学史上风格独特的讽刺经典。这部创作于20世纪40年代的长篇小说&#xff0c;以抗战初期为背景&#xff0c;通过主人公方鸿渐的人生轨迹&#xff0c;深刻揭示了知识分子群体的精神困境与人性弱点。…...

从游戏引擎到仿真平台:手把手教你用AirSim+UE4搭建你的第一个无人机/自动驾驶仿真环境

从游戏引擎到仿真平台&#xff1a;构建AirSimUE4无人机与自动驾驶仿真环境实战指南当游戏引擎遇上机器人算法测试&#xff0c;会碰撞出怎样的火花&#xff1f;微软开源的AirSim项目将虚幻引擎&#xff08;Unreal Engine&#xff09;从游戏开发领域引入到自动驾驶和无人机研究的…...

UE5 Mac环境搭好了,然后呢?给新手的第一个5分钟:创建、操控并理解你的第一个角色

UE5 Mac环境搭好了&#xff0c;然后呢&#xff1f;给新手的第一个5分钟&#xff1a;创建、操控并理解你的第一个角色当你第一次打开UE5的Mac版本&#xff0c;面对那个闪烁着光芒的启动界面&#xff0c;内心可能既兴奋又忐忑。安装只是第一步&#xff0c;真正的旅程现在才开始。…...

AI圈内火热的Agent、MCP、Skill、CLI是啥?用装修房子讲透,看完秒懂

本文用装修房子的比喻&#xff0c;详细解释了AI领域的四个核心概念&#xff1a;Agent如同会自主规划任务的私人助理&#xff1b;MCP是AI与外部工具数据的统一接口&#xff0c;类似USB-C&#xff1b;Skill是指导AI按标准操作执行的手册&#xff1b;CLI则是不依赖图形界面的命令行…...

MeloTTS实战:多语言语音合成的高效解决方案

MeloTTS实战&#xff1a;多语言语音合成的高效解决方案 【免费下载链接】MeloTTS High-quality multi-lingual text-to-speech library by MyShell.ai. Support English, Spanish, French, Chinese, Japanese and Korean. 项目地址: https://gitcode.com/GitHub_Trending/me/…...

收藏|2026年AI大模型就业爆发!岗位暴涨12倍、月薪6W+,小白零基础入门指南

2026年&#xff0c;AI已从“科技热点”彻底变为职场“刚需赛道”&#xff01;脉脉高聘人才智库最新发布的《2026年1-2月中高端人才求职招聘洞察》&#xff0c;用硬核数据揭示行业真相&#xff1a;AI人才成招聘市场顶流&#xff0c;岗位量、薪资双双爆发式增长。尤其对零基础小白…...

Windows安卓应用安装终极指南:5分钟快速配置跨平台应用体验

Windows安卓应用安装终极指南&#xff1a;5分钟快速配置跨平台应用体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为在Windows电脑上无法直接安装安卓应用而烦…...