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

4. 算法与分析 (1)

本节主要讲了算法分析和算法度量标准(时间复杂度)。

本文部分ppt、视频截图来自:[青岛大学-王卓老师的个人空间-王卓老师个人主页-哔哩哔哩视频]

1. 算法

在这里插入图片描述

1.1 算法定义

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

在这里插入图片描述

1.2 算法描述

  • 自然语言:英语、中文

中文描述:复杂

在这里插入图片描述

  • 流程图:传统流程图、NS流程图

传统流程图描述:还是比较复杂,占篇幅

在这里插入图片描述

NS流程图:比较简介,更适合结构化算法描述

在这里插入图片描述

  • 伪代码类语言类C语言 (本专栏使用的算法描述语言)
  • 程序代码:C语言程序,JAVA语言程序…

1.3 算法与程序的关系

  • 算法解决问题的一种方法或一个过程,考虑如何将输入转换成输出一个问题可以有多种算法。
  • 程序是用某种程序设计语言对算法的具体实现

在这里插入图片描述

1.4 算法特性

在这里插入图片描述

1.5 算法设计要求

  • 正确性(Correctness)
    在这里插入图片描述
  • 可读性(Readability)
    在这里插入图片描述
  • 健壮性(Robustness) or 鲁棒性
    在这里插入图片描述
  • 高效性(Efficiency)
    在这里插入图片描述

2. 算法分析

算法分析的目的就是看算法实际是否可行,并在同一问题存在多算法时,进行性能上的比较,以便从中挑选出比较优的算法。

2.1 算法衡量标准

  • 一个好的算法首先要具备正确性,然后是健壮性,可读性,在几个方面都满足的情况下,主要考虑算法的效率,通过算法的效率高低来评判不同算法的优劣程度。
  • 算法效率以下两个方面来考虑:
    1.时间效率:指的是算法所耗费的时间。
    2.空间效率:指的是算法执行过程中所耗费的存储空间。
  • 但是算法的时间效率和空间效率有时候是矛盾的,需要结合计算机的性能和实际问题数据量的大小综合平衡考虑

2.2 算法效率度量

1. 算法时间效率的度量

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

两种度量方法

  • 事后统计:将算法实现,测算其时间和空间开销。(要花费时间和精力实现算法,并且实验结果依赖于软硬件等环境因素,掩盖算法本身优劣)
  • 事前分析:对算法所消耗资源的一种估算方法。(☆☆☆因此更多采用事前分析的方法)
  • 事前分析方法:
    在这里插入图片描述
    也可以表示为:
    在这里插入图片描述在这里插入图片描述

如:两个n×n矩阵相乘的算法可以描述为:

在这里插入图片描述
上述算法所消耗的时间定义为该算法中每条语句的频度之和,则上述算法的时间消耗T(n)为:
在这里插入图片描述

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

为了方便比较不同算法的时间效率,可以仅比较它们的数量级:

在这里插入图片描述
在这里插入图片描述

  • 算法时间复杂度定义

(1)一般情况下,不必计算所有操作的执行次数,而只考虑算法中基本操作的执行次数(最高次项),它是问题规模n的某个函数,用T(n)表示。

在这里插入图片描述
(2)什么是“基本语句”?

  1. 算法中重复执行次数和算法的执行时间成正比的语句。
  2. 对算法运行时间贡献最大。
  3. 执行次数最多。

(3)“问题规模n”表示什么?

n表示待处理问题数据量的多少,越大算法的执行时间越长

  • 排序:n为记录数
  • 矩阵:n为矩阵的阶数
  • 多项式:n为多项式的项数
  • 集合:n为元素个数
  • 树:n为树的结点个数
  • 图:n为图的顶点数或边数
http://www.xdnf.cn/news/715699.html

相关文章:

  • 【Dify系列教程重置精品版】第十一章:Dify与slenium
  • Flutter下的一点实践
  • 手动移植FreeRTOS
  • 用 Python 模拟雪花飘落效果
  • Oracle 临时表空间详解
  • Oracle的NVL函数
  • 前端面试题-HTML篇
  • C++:栈帧、命名空间、引用
  • 第三章:地下三层的技术遗产
  • JaCoCo 是什么
  • 系统架构设计师案例分析----经典架构风格特点
  • 挡片/测试晶圆(Dummy Wafer)通俗解析
  • 非线性声学计算与强化学习融合框架:突破复杂环境人机交互的新技术
  • C++进阶--C++11(04)
  • Golang 配置国内代理
  • Android高级开发第二篇 - JNI 参数传递与 Java → C → Java 双向调用
  • 【第4章 图像与视频】4.5 操作图像的像素
  • FastAPI JWT和hash加密
  • 数据中台系统是什么意思?如何实现数据中台的搭建?
  • MySQL JSON数据存储结构与操作
  • 几款主流V30、V60、V90相机SD卡的评测(索尼、闪迪、三星、雷克沙)
  • ultraiso制作U盘镜像 针对win2012及win2016等需要特殊处理
  • Python训练营打卡 Day39
  • 4 串电池保护芯片创芯微CM1341-DAT使用介绍
  • 板凳-------Mysql cookbook学习 (八--2)
  • [yolov11改进系列]基于yolov11引入倒置残差块块注意力机制iEMA的python源码+训练源码
  • 面向低端设备的移动网页调试策略:WebDebugX 在性能瓶颈分析中的应用
  • 1 µs = 10⁻⁶ s
  • 目标检测预测框置信度(Confidence Score)计算方式
  • ComfyUI+阿里Wan2.1+内网穿透技术:本地AI视频生成系统搭建实战