第2章 算法分析基础

2-1 算法的时间复杂度分析

2.1.1 输入规模与基本语句

  • 输入规模:算法处理数据的规模,通常用 n 表示。

  • 基本语句:执行次数与输入规模直接相关的关键操作。

  • 例2.1 顺序查找

    int SeqSearch(int A[], int n, int k) {  for (int i = 0; i < n; i++)  if (A[i] == k) break;  if (i == n) return 0;  else return (i + 1);  
    }
    
    • 输入规模 n;基本语句是“比较 A[i] == k”

2.1.2 渐近分析

  • 大 O、大 Ω、大 Θ

    • T(n)=O(f(n)):∃ c, n₀, ∀ n ≥ n₀, T(n) ≤ c·f(n)

    • T(n)=Ω(f(n)):∃ c, n₀, ∀ n ≥ n₀, T(n) ≥ c·f(n)

    • T(n)=Θ(f(n)):同时满足 O(f(n)) 和 Ω(f(n))

  • 例:若 T(n) ≤ 100n + n 则 T(n)=O(n)

    • 取 n₀=5, c=101, 则 ∀ n ≥ 5, T(n) ≤ 101n → O(n)

  • 常见增长阶
    1 < log n < n < n log n < n² < n³ < … < 2ⁿ < n!

  • 例2.4 合并算法

    void Union(int A[], int n, int B[], int m, int C[]) {int i=0, j=0, k=0;while (i<n && j<m) {if (A[i] <= B[j]) C[k++] = A[i++];else C[k++] = B[j++];}while (i<n) C[k++] = A[i++];while (j<m) C[k++] = B[j++];
    }
    
    • 时间复杂度 O(n + m)

2.1.3 最好、最坏和平均情况

  • 当算法执行代价依赖于不同输入时,需要分别分析:

    • 最好情况:最少操作次数;

    • 最坏情况:最多操作次数;

    • 平均情况:所有输入实例上的平均操作次数。

  • 顺序查找例

    • 最好:第1个元素即中,比较1次;

    • 最坏:未找到或在末尾,比较n次;

    • 平均:约(n + 1)/2次


2-2 算法的空间复杂度分析

  • 空间复杂度 = 输入/输出数据占用 + 算法本身占用 + 辅助空间

    1. 输入/输出数据:题目本身的数据结构;

    2. 算法本身:局部变量、常量,通常为 O(1);

    3. 辅助空间:临时数组、递归栈等。

  • 示例

    • CommonFactor 求最大公约数:仅用常数级局部变量,O(1);

    • BubbleSort:只用固定数量的索引和临时变量,O(1);

    • Merge:需要长度为 n 的临时数组,O(n)。


2-3 算法的实验分析

  • 实验分析:将算法实现为程序,上机运行,实际测算时空开销

  • 常用度量方法

    1. 计数法:插入计数器,记录关键语句执行次数;

    2. 计时法:记录程序段开始和结束时间,计算时间差。

  • 例 BubbleSort 实验

    void BubbleSort(int r[], int n) {int j, temp, count1=0, count2=0, bound, exchange=n-1;while (exchange != 0) {bound = exchange; exchange = 0;for (j = 0; j < bound; j++)if (++count1 && r[j] > r[j+1]) {temp = r[j]; r[j] = r[j+1]; r[j+1] = temp;count2 += 3; exchange = j;}}cout<<"比较次数="<<count1<<",移动次数="<<count2<<endl;
    }
    
    • 目的:统计比较次数和移动次数

  • Collatz 过程实验

    • 规则:n 为奇数 → 3n+1,否则 → n/2,直到 n=1;

    • 例 n=9:{9,28,14,…,1};

    • 例 n=27:77步到9232,再32步到1。


2-4 拓展与演练:最优算法与下界

  • 下界 Ω 表示法
    若 ∃ c, n₀, ∀ n ≥ n₀, T(n) ≥ c·g(n),则 T(n)=Ω(g(n)),g(n) 是问题的时间下界

  • 最优算法
    如果问题已知下界 g(n),且算法满足 T(n)=Θ(g(n)),则该算法为最优。

  • 例2.10 最小值算法

    int ArrayMin(int a[], int n) {int min = a[0];for (int i = 1; i < n; i++)if (a[i] < min) min = a[i];return min;
    }
    
    • 比较次数下界 Ω(n),算法时间 O(n),故为最优。

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

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

相关文章

QT高级(1)QTableView自定义委托集合,一个类实现若干委托

自定义委托集合 1同系列文章2 功能3 源码 1同系列文章 QT中级&#xff08;1&#xff09;QTableView自定义委托&#xff08;一&#xff09;实现QSpinBox、QDoubleSpinBox委托 QT中级&#xff08;2&#xff09;QTableView自定义委托&#xff08;二&#xff09;实现QProgressBar委…

webrtc 视频直播

webrtc 是一种开源的音视频通信技术&#xff0c;可以不借助中间媒介建立浏览器点对点&#xff08;peer-to-peer&#xff09;连接&#xff0c;实现音视频以及其他数据的传输。webrtc具有平台兼容性&#xff0c;低延迟与高实时的优点。今天主要记录一下webrtc的使用记录&#xff…

游戏引擎学习第261天:切换到静态帧数组

game_debug.cpp: 将ProfileGraph的尺寸初始化为相对较大的值 今天的讨论主要围绕性能分析器&#xff08;Profiler&#xff09;以及如何改进它的可用性展开。当前性能分析器已经能够正常工作&#xff0c;但我们希望通过一些改进&#xff0c;使其更易于使用&#xff0c;特别是在…

three.js设置物体轮廓发光和物体发光

设置物体轮廓发光 <script setup> import * as THREE from three; import { OrbitControls } from three/addons/controls/OrbitControls.js; // 导入后期合成 import { EffectComposer } from three/examples/jsm/postprocessing/EffectComposer.js; import { RenderPas…

homebrew安装配置Python(MAC版)

Mac系统自带python路径为: /System/Library/Frameworks/Python.framework/Versionbrew 安装 Python3 在终端输入以下命令&#xff1a; brew search python3 # 查看支持安装的版本 brew install python3就可以轻松easy安装python了&#xff0c;安装完成后提示 查看 pyth…

如何建设网站?网站建设简单步骤有哪些?

新手如何开展网站建设&#xff1f;网站建设包括哪些步骤&#xff1f; 在开展网站建设之前先清楚了解网站建设的流程和步骤&#xff1a;注册域名、租用虚拟主机/服务器、建站工具的选取、网站建设流程详细流程共计7步&#xff0c;分别是注册域名、域名实名制、服务器或虚拟主机、…

当K8S容器没有bash时高阶排查手段

遇到容器没有bash甚至没有sh的情况&#xff0c;就像被困在没有门窗的房间。但真正的K8S运维高手&#xff0c;即使面对这种情况也能游刃有余。 一、无Shell容器三大特征 极简主义&#xff1a;移除所有非必要组件&#xff08;如/bin/sh&#xff09;安全加固&#xff1a;减少攻击…

Python案例实战《手势识别》

目录 1、效果图2、手势识别关键步骤&#xff08;1&#xff09; 导入必要的库&#xff08;2&#xff09;配置 MediaPipe&#xff08;3&#xff09;启动摄像头&#xff08;4&#xff09;设置手指张开判断的距离阈值&#xff08;5&#xff09;计算手指之间的欧几里得距离&#xff…

5G赋能农业物联网:智能化种植的新纪元

5G赋能农业物联网&#xff1a;智能化种植的新纪元 在农业领域&#xff0c;精准化、智能化已成为现代农业发展的方向。而5G的出现&#xff0c;让农业物联网&#xff08;Agri-IoT&#xff09;突破了传统的瓶颈&#xff0c;真正实现了实时监测、高效数据传输、智能化决策&#xf…

VIVADO IP核整理(二)——FFT

目录 IP 核配置IP 核接口s_axis_config_tdata 配置输入输出端口描述 仿真 参考&#xff1a;FFT IP核 详细介绍 参考&#xff1a;官方文档介绍 IP 核配置 在 IP Catalog 中搜索&#xff1a;Fast Fourier Transform 按照上图所示进行配置&#xff0c;下文对配置内容进行详述。 …

【计算机基础】任意进制转换方法详解

文章目录 一、通用进制转换(整数部分)1. R进制转十进制(整数)2. 十进制转R进制(整数)二、通用进制转换(小数部分)1. 十进制小数转R进制2. R进制小数转十进制三、二进制与十进制互转(整数部分)1. 二进制转十进制(整数)2. 十进制转二进制(整数)四、二进制与十进制互…

鼠标交互初体验:点击屏幕生成彩色气泡(EGE 库基础)

在图形编程领域&#xff0c;实现与用户的交互是让程序变得生动有趣的关键环节。对于初学者来说&#xff0c;使用合适的图形库能大幅降低开发难度&#xff0c;快速实现创意想法。EGE 库作为一款简单易用且功能强大的 C/C 图形库&#xff0c;特别适合新手入门图形交互编程。本文将…

Office 三大组件Excel、Word、Access 里 VBA 区别对比

以下是Excel、Word和Access在VBA中的主要区别对比及详细说明: 核心对象模型 Excel Workbook(工作簿)→ Worksheet(工作表)→ Range(单元格区域) 核心围绕单元格数据处理,如 Cells(1,1).Value = "数据" Word Document(文档)→ Range(文本范围)→ Paragrap…

【上位机——MFC】对象和控件绑定

对象和控件绑定 将控件窗口和类对象绑定具有两大作用 如果和数据类对象绑定&#xff0c;对象和控件可以进行数据交换。 如果和控件类对象绑定&#xff0c;对象就可以代表整个控件。 与数据类型对象绑定的使用 数据类型对象和控件可实现数据交互重写父类成员虚函数DoDataExch…

Excel处理控件Aspose.Cells教程:压缩Excel文件完整指南

Excel 电子表格是管理、分析和可视化数据的有效工具&#xff0c;但随着文件复杂度的增加&#xff0c;它们很快就会变得臃肿。无论是由于数据集庞大、嵌入图片、格式过多还是隐藏工作表&#xff0c;Excel 文件的大小都可能迅速膨胀&#xff0c;导致打开速度变慢、难以通过电子邮…

软考【软考高级QA】

软考高级QA 1.操作系统管理和调度进程时&#xff0c;有哪些状态&#xff1f;&#xff08;5种&#xff09;2.操作系统管理和调度进程时&#xff0c;会进行哪些状态转换&#xff1f; 1.操作系统管理和调度进程时&#xff0c;有哪些状态&#xff1f;&#xff08;5种&#xff09; …

神经网络基础-从零开始搭建一个神经网络

一、什么是神经网络 人工神经网络&#xff08;Articial Neural Network&#xff0c;简写为ANN&#xff09;也称为神经网络&#xff08;NN),是一种模仿生物神经网络和功能的计算模型&#xff0c;人脑可以看做是一个生物神经网络&#xff0c;由众多的神经元连接而成&#xff0c;…

Golang 接口 vs Rust Trait:一场关于抽象的哲学对话

一、引言 在现代编程语言中&#xff0c;接口&#xff08;Interface&#xff09; 和 Trait 是实现多态和抽象行为的关键机制。它们允许我们定义行为契约&#xff0c;让不同的类型共享相同的语义接口&#xff0c;从而提升代码的复用性和扩展性。 Go 和 Rust 分别代表了两种截然…

java实现一个操作日志模块功能,怎么设计

为了设计一个高效、可靠且可扩展的操作日志模块&#xff0c;可以结合 ​AOP&#xff08;面向切面编程&#xff09;​、异步处理​&#xff08;多线程或MQ&#xff09;以及合理的存储策略&#xff0c;具体方案如下&#xff1a; ​1. 技术选型与架构设计​ ​​(1) AOP 实现非侵…

【论文阅读】HunyuanVideo: A Systematic Framework For Large Video Generative Models

HunyuanVideo: A Systematic Framework For Large Video Generative Models 原文摘要 研究背景与问题 视频生成的变革性影响&#xff1a;近期视频生成技术的进步深刻改变了个人生活与行业应用。 闭源模型的垄断&#xff1a;主流视频生成模型&#xff08;如Runway Gen-3、Luma …