数据结构与算法--算法和算法分析

算法与数据结构之间存在密不可分的关系。简单来说,数据结构是存储和组织数据的方式,而算法则是操作和处理这些数据的方法。

首先,数据结构为算法提供了基础。算法是解决问题的步骤和流程,通过对数据结构进行操作,算法可以实现对数据的增删改查等操作。不同的数据结构特性影响算法的操作方式,例如,如果算法需要对一个有序数组进行搜索,那么它需要知道数组的有序性质,以便采用二分搜索的方式进行操作。同时,对于同一问题,不同的数据结构可能会导致不同的算法实现方式,因此在选择数据结构时必须考虑算法的复杂度和效率。

其次,算法对数据结构的优化和选择也有重要影响。算法可以通过优化数据结构来提高其性能,例如,通过使用合适的排序算法,可以减少排序时间。反过来,数据结构的设计也需要考虑到算法的实现和运行效率。一些排序算法需要随机访问数组元素,而另一些算法则需要在不同的时间点插入和删除元素,这些需求都会影响数据结构的选择。

程序= 数据结构+算法


算法的五个重要特性包括:

  1. 有穷性:算法必须能在执行有限个步骤之后终止。也就是说,一个算法在执行过程中不能无限循环,每个步骤都应该在有限时间内完成
  2. 确切性:算法的每一步骤必须有确切的定义,不能有二义性。这意味着算法的每一步都是清晰、明确的,不存在模糊或不确定的地方。
  3. 输入:一个算法有0个多个输入,以刻画运算对象的初始情况。这些输入是算法开始执行前所必需的,它们为算法提供了初始数据和条件。
  4. 输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。输出是算法执行完毕后得到的结果,是算法的主要目的。
  5. 可行性算法中执行的任何计算步骤都应该是可以执行的,即每个计算步都可以在有限时间内完成。这意味着算法所描述的操作都是实际可行的,可以通过已经实现的基本操作执行有限次来实现。

算法设计要求:

  1. 正确性与健壮性
    • 算法必须能够准确执行其预定功能,对于所有合法的输入都能产生正确的输出结果。
    • 算法应当具有健壮性,即能够合理处理异常情况、错误输入或非法数据,并给出相应的提示或处理结果,确保算法的稳定性和可靠性。
  2. 可读性
    • 算法设计应易于阅读和理解,使用清晰、简洁的语言和符号表达算法的逻辑。
    • 算法的结构应合理,逻辑应清晰,方便他人理解算法的工作原理和实现过程,便于后续的调试、维护和升级。
  3. 效率
    • 算法设计应追求高效,包括时间效率和空间效率
    • 在满足正确性的前提下,应尽量减少算法的执行时间和所需的存储空间,提高算法的性能。
    • 可以通过优化算法的时间复杂度和空间复杂度来实现高效的算法设计。
  4. 可维护性
    • 算法设计应考虑可维护性,使算法易于修改和扩展
    • 算法应具有模块化和结构化的特点,便于对各个部分进行单独的修改和替换。
    • 同时,算法的设计应考虑到未来的变化和升级需求,能够方便地添加新功能或修改现有功能,以适应不同的应用场景和需求。

        算法时间效率的度量:

        算法的时间效率可以依据算法编制的程序在计算机上执行进行的消耗的时间来度量。

        1.事后统计:要求将算法编程程序(计算机的软硬件会影响算法的优劣)

        2.事前分析:只能进行估算(更多用这个)

算法时间 = Σ每条语句频度*该语句执行一次的所需时间

假设每条语句执行的所需的时间均为单位时间,所以对算法运行时间就转化为讨论算法中所有语句执行次数,也就是频度之和。

例:

for(i=1;i<=n;i++){for(j=1;j<=n;j++){c[i][j]=0;for(k=0;k<n;k++)c[i][j]=c[i][j]+a[i][k]*b[i][k];}

这个代码段包含三个嵌套的循环,用于计算一个二维数组 c 的元素,其中 c[i][j] 是通过矩阵乘法得到的,即 c[i][j] 是由矩阵 a 的第 i 行与矩阵 b 的第 j 列的点积计算得出的。

首先,我们来分析每个循环的迭代次数:

  1. 外层循环 i 迭代 n 次(从 1 到 n)。
  2. 中层循环 j 也在每次外层循环 i 的迭代中迭代 n 次(从 1 到 n)。
  3. 内层循环 k 在每次中层循环 j 的迭代中迭代 n 次(从 0 到 n-1)。

因此,总的迭代次数是 n(外层循环)* n(中层循环)* n(内层循环)= n^3

由于内层循环中的操作(即 c[i][j]=c[i][j]+a[i][k]*b[i][k];)是常数时间的,所以整个算法的时间复杂度是 O(n^3)。这是矩阵乘法的一个常见时间复杂度,特别是在没有使用任何优化技术(如Strassen算法或并行计算)的情况下。

所以,这个代码段的时间渐进复杂度是 O(n^3)

 

 

一般情况下:时间复杂度可以直接找循环嵌套最深的

算法时间复杂度的渐进表示法:

我们仅仅需要比较数量级(数量级越大越不好)

算法的渐进时间复杂度是对算法的时间效率的度量,即分析一个算法执行所需要的时间。它表示随问题规模n的增大,算法执行时间的增长率和某个函数f(n)的增长率相同。换句话说,当问题规模n趋于无穷大时,算法运行时间的增长趋势的度量即为渐进时间复杂度。

为了分析一个算法的时间复杂度,通常需要考察算法中基本语句的执行次数,找出其与问题规模n的函数关系f(n)。基本语句是执行次数与算法的执行次数成正比的语句,它是算法中的关键操作。然后,用O(f(n))来表示算法的复杂度。这里,O表示大O表示法,用于描述算法执行时间的上界。

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

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

相关文章

【pyautogui】PyAutoGUI 的简单使用

文章目录 1 简介2 通用功能2.1 暂停/休眠/耗时2.2 自动防故障功能 3 鼠标控制3.1 移动鼠标3.2 获取鼠标指针位置3.3 点击鼠标3.4 拖动鼠标3.5 滚动鼠标3.6 常用方法 4 键盘控制4.1 输入字符串 write4.2 按键操作 press4.3 按下 & 释放4.4 组合键 hotkey4.5 键名 5 屏幕图像…

2.1 关系数据结构及形式化定义 数据库概论

目录 2.1.1 关系 关系&#xff1a;概念 1. 域&#xff08;Domain&#xff09; 2.笛卡尔积 元组&#xff08;Tuple&#xff09; 分量&#xff08;Component&#xff09; 基数&#xff08;Cardinal number&#xff09; 3. 关系 候选码&#xff08;Candidate key&#xf…

软件设计师17--磁盘管理

软件设计师17--磁盘管理 考点1&#xff1a;存储管理 - 磁盘管理调度算法磁盘调度 - FCFS磁盘调度 - SSTF例题&#xff1a; 考点1&#xff1a;存储管理 - 磁盘管理 存取时间寻道时间等待时间&#xff0c;训导时间是指磁头移动到磁道所需的时间&#xff1b;等待时间为等待读写的扇…

网工内推 | 上市公司网工,IE认证优先,最高18K*13薪,包吃住

01 深圳市宝腾互联科技有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、是整个数据中心的网络技术及安全问题的负责人&#xff0c;确保数据中心业务的正常进行&#xff1b; 2、负责规划、设计、搭建、维护数据中心的网络环境&#xff0c;确保IDC /云平台&a…

python INI文件操作与configparser内置库

目录 INI文件 configparser内置库 类与方法 操作实例 导入INI文件 查询所有节的列表 判断某个节是否存在 查询某个节的所有键的列表 判断节下是否存在某个键 增加节点 删除节点 增加节点的键 修改键值 保存修改结果 获取键值 获取节点所有键值 其他读取方式 …

[Kali] 安装Nessus及使用

在官方网站下载对应的 Nessus 版本:Download Tenable Nessus | TenableDownload Nessus and Nessus Managerhttp://www.tenable.com/products/nessus/select-your-operating-system这里选择 Kali 对应的版本 一、安装 Nessus 1、下载得到的是 deb 文件,与

【爬虫开发】爬虫从0到1全知识md笔记第1篇:爬虫概述【附代码文档】

爬虫开发从0到1全知识教程完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;爬虫概述。selenium的其它使用方法。Selenium课程概要。常见的反爬手段和解决思路。验证码处理。chrome浏览器使用方法介绍。JS的解析。Mongodb的介绍和安装,小结。mongodb的简单使…

为什localhost被forbidden而127.0.0.1不被绊?

原因&#xff1a; 判段网关的时候判127.0.0.1&#xff0c;所以最好改localhost 其他参考&#xff1a; 【计算机网络】localhost不能访问&#xff0c;127.0.0.1可以访问&#xff1f;_ping localhost和ping 127.0.0.1-CSDN博客

基于springboot实现驾校信息管理系统项目【项目源码+论文说明】

基于springboot实现驾校信息管理系统演示 摘要 随着人们生活水平的不断提高&#xff0c;出行方式多样化&#xff0c;也以私家车为主&#xff0c;那么既然私家车的需求不断增长&#xff0c;那么基于驾校的考核管理也就不断增强&#xff0c;那么业务系统也就慢慢的随之加大。信息…

一文了解Cornerstone3D中窗宽窗位的3种设置场景及原理

&#x1f506; 引言 在使用Cornerstone3D渲染影像时&#xff0c;有一个常用功能“设置窗宽窗位&#xff08;windowWidth&windowLevel&#xff09;”&#xff0c;通过精确调整窗宽窗位&#xff0c;医生能够更清晰地区分各种组织&#xff0c;如区别软组织、骨骼、脑组织等。…

mac【启动elasticsearch报错:can not run elasticsearch as root

mac【启动elasticsearch报错&#xff1a;can not run elasticsearch as root 问题原因 es默认不能用root用户启动&#xff0c;生产环境建议为elasticsearch创建用户。 解决方案 为elaticsearch创建用户并赋予相应权限。 尝试了以下命令创建用户&#xff0c;adduser esh 和u…

C# ListView 控件使用

1.基本设置 listView1.Columns.Add("序号", 60); //向 listView1控件中添加1列 同时设置列名称和宽度listView1.Columns.Add("温度", 100); //下同listView1.Columns.Add("偏移", 100);listView1.Columns.Add("分割", 50);listView1…

ssm蛋糕甜品商城系统(程序+文档+数据库)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

计算机视觉研究院 | EdgeYOLO:边缘设备上实时运行的目标检测器及Pytorch实现

本文来源公众号“计算机视觉研究院”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;EdgeYOLO&#xff1a;边缘设备上实时运行的目标检测器及Pytorch实现 代码地址&#xff1a;https://github.com/LSH9832/edgeyolo 今天分享的研究…

【LeetCode】升级打怪之路 Day 21:二叉树的最近公共祖先(LCA)问题

今日题目&#xff1a; 236. 二叉树的最近公共祖先1644. 二叉树的最近公共祖先 II235. 二叉搜索树的最近公共祖先 目录 LCA 问题LC 236. 二叉树的最近公共祖先 【classic】LC 1644. 二叉树的最近公共祖先 II 【稍有难度】LC 235. 二叉搜索树的最近公共祖先 ⭐⭐⭐ 今天做了几道有…

python备份库

个人简介 &#x1f468;&#x1f3fb;‍&#x1f4bb;个人主页&#xff1a;九黎aj &#x1f3c3;&#x1f3fb;‍♂️幸福源自奋斗,平凡造就不凡 &#x1f31f;如果文章对你有用&#xff0c;麻烦关注点赞收藏走一波&#xff0c;感谢支持&#xff01; &#x1f331;欢迎订阅我的…

SAM分割 图片bbox提示任意数量目标输出mask

前提条件&#xff1a;labelimg打标签得到bbox 1.代码 import torchfrom segment_anything import SamPredictor, sam_model_registry import cv2 import numpy as np import os import glob import xml.etree.ElementTree as ETcheckpoint "./weight/sam_vit_h_4b8939.…

分布式数据处理MapReduce简单了解

文章目录 产生背景编程模型统计词频案例 实现机制容错机制Master的容错机制Worker的容错机制 产生背景 MapReduce是一种分布式数据处理模型和编程技术&#xff0c;由Google开发&#xff0c;旨在简化大规模数据集的处理。产生MapReduce的背景&#xff1a; 数据量的急剧增长&…

通过OceanBase 3.x中not in无法走hash连接的变化,来看OB优化器的发展

作者简介&#xff1a; 张瑞远&#xff0c;曾从事银行、证券数仓设计、开发、优化类工作&#xff0c;现主要从事电信级IT系统及数据库的规划设计、架构设计、运维实施、运维服务、故障处理、性能优化等工作。 持有Orale OCM,MySQL OCP及国产代表数据库认证。 获得的专业技能与认…

C#,数值计算,矩阵相乘的斯特拉森(Strassen’s Matrix Multiplication)分治算法与源代码

Volker Strassen 1 矩阵乘法 矩阵乘法是机器学习中最基本的运算之一,对其进行优化是多种优化的关键。通常,将两个大小为N X N的矩阵相乘需要N^3次运算。从那以后,我们在更好、更聪明的矩阵乘法算法方面取得了长足的进步。沃尔克斯特拉森于1969年首次发表了他的算法。这是第…