大话数据结构学习笔记-算法

定义

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

特性

算法具有五个基本特性:输入、输出、有穷性、确定性和可行性。

输入:算法可以具有零个或多个输入

输出:算法至少有一个或多个输出。

有穷性:算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。

确定性:算法的每一步骤都具有确定的含义,不会出现二义性。

可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。

设计要求

算法具有正确性、可读性、健壮性、时间效率高、存储量低五个要求。

正确性是指算法至少应该具有输入、输出和加工处理无歧义性,能正确反应问题的需求,能够得到问题的正确答案。

可读性是指算法的设计必须便于阅读、理解和交流。

健壮性是指当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果。

时间效率高和存储量低:设计算法应该尽量满足时间效率高和存储量低的需求。

算法的效率度量

效率度量分为事后统计法和事前分析估算法。

其中事后统计法指的是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。由于事后统计法具有必须依赖算法实现编制好程序、算法的测试数据设计困难以及时间比较依赖计算机硬件和软件等环境因素的缺陷,因此基本不予采纳。

而事前分析估算法是指在计算机程序编制前,依据统计算法对算法进行估算。一个算法在计算机上运行时所消耗的时间取决于下列因素

1)算法采用的策略、方法

2)编译产生的代码质量

3)问题的输入规模

4)机器执行指令的速度

其中2、4取决于计算机硬件和软件,无法人为控制。因此,一个程序的运行时间,依赖于算法的好坏和问题的输入规模。所谓问题输入规模是指输入量的多少。

时间复杂度和空间复杂度

时间复杂度

简单理解:就是相同输入下算法的执行时间。

定义:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记作T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,乘坐算法的渐进时间复杂度,简称时间复杂度。其中f(n)是问题规模n的某个函数。一般在没有特殊情况说明的情况下,算法的时间复杂度都是指最坏时间复杂度。

推导时间复杂度的公式:

1)用常数1取代运行时间中的所有加法常数。

2)在修改后的运行次数函数中,只保留最高阶项。

3)如果最高阶项存在且其系数不是1,则去与这个项相乘的系数。

经过以上得到的结果就是算法的时间复杂度。

空间复杂度

算法的空间复杂度是指运行算法所需占用的存储空间。

PS:好啦,准备工作都完成了,都是一些概念等等的东西,后面才是重头戏。这次是第二遍看,一定要吃透!!!

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

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

相关文章

【QT教程】QT6 Web性能优化

QT6 Web性能优化 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费…

vue 常用的日历排班,带农历显示组件(2024-04-16)

显示当前月日历组件,里面带农历或节日显示 后面可以丰富一些国家法定节假期的业务需求 代码 js-calendar.js 文件 var lunarInfo [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, //1900-19090x04ae0, 0x0a5b6, 0…

SEO之搜索引擎的工作原理(三)

初创企业需要建站的朋友看这篇文章,谢谢支持:我给不会敲代码又想搭建网站的人建议 (接上一篇。。。) 排名 经过搜索引擎蜘蛛抓取页面,索引程序计算得到倒排索引后,搜索引擎就准备好可以随时处理用户搜索了…

故障键盘(Lc2810)——模拟

你的笔记本键盘存在故障,每当你在上面输入字符 i 时,它会反转你所写的字符串。而输入其他字符则可以正常工作。 给你一个下标从 0 开始的字符串 s ,请你用故障键盘依次输入每个字符。 返回最终笔记本屏幕上输出的字符串。 示例 1&#xff…

YOLOv8 目标检测项目实操

一 yolov8 背景介绍 YOLOv8是一种尖端的、最先进的(SOTA)模型,建立在以前 YOLO 版本的成功基础上,并引入了新的特性和改进,以进一步提高性能和灵活性。YOLOv8被设计为快速、准确、易于使用,这使它成为一个很好的选择,…

RAG (Retrieval Augmented Generation) 结合 LlamaIndex、Elasticsearch 和 Mistral

作者:Srikanth Manvi 在这篇文章中,我们将讨论如何使用 RAG 技术(检索增强生成)和 Elasticsearch 作为向量数据库来实现问答体验。我们将使用 LlamaIndex 和本地运行的 Mistral LLM。 在开始之前,我们将先了解一些术…

【Web】2022DASCTF Apr X FATE 防疫挑战赛 题解(全)

目录 warmup-php soeasy_php warmup-java warmup-php spl_autoload_register函数实现了当程序遇到调用没有定义过的函数时,会去找./class/函数名.php路径下的php文件,并把它包含在程序中。 拿到附件拖进Seay里自动审计一下 显然利用终点为evaluateExp…

SpringBoot项目如何实现邮件发送

文章目录 1. 开启邮箱SMTP服务2. 导入pom依赖3. 在配置文件中添加邮箱配置3. 封装EmailTask类4. 写测试类 1. 开启邮箱SMTP服务 这里以163邮箱为例,点击设置——更多设置——POP3/SMTP/IMAP——开启服务 根据提示开启服务之后会得到一个授权码,只显示一…

(通义千问,miyagpt,AlchatOS,aitianhu1,a1r,1ai)分享6个好用的GPT

目录 1、通义千问 (aliyun.com) 2、MIYAGPT (miyadns.com) 3、AIchatOS 4、 Safeline Waf CE (aitianhu1.top)

数据库:SQL分类之DCL详解

1.管理用户 1.查询用户 use mysql ; select * from user ; 2.创建用户 create user 用户名主机名 identified by 密码 ; 例: //创建用户itcast ,只能够在当前主机local host访问,密码123456 create user itcastlocalhost identified by 123456;//创建用…

postgreSql判断表是否存在某个字段

在PostgreSQL中,可以使用information_schema.columns视图来检查表是否存在某个字段。以下是一个SQL查询示例,它检查名为sys_statlog的表中是否存在名为origin_type的字段: SELECT EXISTS (SELECT 1FROM information_schema.columnsWHERE tab…

攻防演练,现在收到通知服务器已经被攻破,作为蓝方,怎么检查服务器被攻破的痕迹

在攻防演练中,如果您的服务器被告知已经被攻破,重要的是要快速并系统地响应,以确定攻击的范围、方法和影响。这包括确认攻击的痕迹、哪些数据可能被访问或盗取,以及如何尽快恢复安全状态。以下是一系列步骤和建议,帮助…

Cisco ACI使用Postman配置交换机-未完待续

先看下不使用脚本的情况下是怎么配置交换机端口的? 例: 有10个交换机接口要开trunk,透传50个vlan, 使用GUI的操作方式为 1 进入EPG -->Static port 2 右键,绑定接口 3 选中node -->指定接口—>指定vlan —>…

python 列表对象函数

对象函数必须通过一个对象调用。 列表名.函数名() append() 将某一个元素对象添加在列表的表尾 如果添加的是其他的序列,该序列也会被看成是一个数据对象 count() 统计列表当中 某一个元素出现的次数 extend() 在当前列表中 将传入的其他序列的元素添加在表尾…

JAVA后端面试

一、基础 1、创建对象的方法 new、反射、clone、反序列化 Class cl Class.forName("TestMe"); 2、有哪些引用类型 强引用、软引用、弱引用、虚引用 3、JVM 类加载机制 双亲委派机制(Parent-Delegate Model)是Java类加载器中采用的一种…

hover时预览切换,点击后才正式切换

1、使用CSS的:hover伪类 虽然这不是通过JavaScript或jQuery直接绑定事件,但CSS的:hover伪类可以用来改变元素在鼠标移入和移出时的样式。这种方法主要用于视觉效果的改变,而不是执行复杂的JavaScript逻辑。 #myElement:hover { /* 当鼠标悬停在#myEleme…

【学习笔记】Python大数据处理与分析——pandas数据分析

一、pandas中的对象 1、Series对象 由两个相互关联的数组(values, index)组成,前者(又称主数组)存储数据,后者存储values内每个元素对应关联的标签。 import numpy as np import pandas as pds1 pd.Series([1, 3, 5, 7])print(…

js如何設置滾動到元素位置

在JavaScript中,你可以使用window.scrollTo()方法或元素的scrollIntoView()方法来设置滚动位置。这些方法允许你将页面滚动到特定的坐标或元素。 使用 window.scrollTo() window.scrollTo() 方法接受两个参数:x坐标和y坐标,分别代表水平滚动…

pyqt的人脸识别 基于face_recognition库

参考文献: 1、python face_recognition实现人脸识别系统_python facerecognition检测人脸-CSDN博客 2、cv2.VideoCapture()_cv2.videocapture(0)-CSDN博客 1、camera.py文件代码如下;目录如下 import sys from PyQt5.QtWidgets import QApplication, …

JS两个按钮水平排列

要使两个按钮在水平方向上对半铺满&#xff0c;你可以使用CSS中的Flexbox布局或Grid布局。下面是使用Flexbox和Grid分别实现的示例代码&#xff1a; Flexbox布局&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF…