如何分析算法的运行时间(以插入排序为例)

分析算法 文章目录RAM模型插入排序算法的分析小结 分析算法的意义就是为了预测算法所需要的资源,更通常的说法是为了计算时间复杂度和空间复杂度。 RAM模型 在分析一个算法之前,我们必须有一个要使用的实现技术的模型,包括描述所用资源及其代价的模型。在算法导论中假定了一种通用的单处理器模型——随机访问模型(RAM)。 RAM模型包含真实计算机中常见的指令:算术指令(如加减乘除、取余、上取整、下取整)、数据移动指... 阅读详情

一个算法在特定输入上的运行时间是指执行的基本操作或步数量。

简单来说就是执行每行(i)伪代码所需演的时间(c_{}i)。

接下来看下面这段伪代码

 

行代码c_{5}代价次数
1for j = 2 to A.lengthc_{1}n
2key = A [ j ]c_{2}n-1
3//Insert A [ j ] into the sorted sequence A [ 1 . . j - 1 ]0n-1
4i = j - 2c_{4}n-1
5while  i > 0 and A [ i ] > keyc_{5}\sum_{j=2}^{n}t_{j}
6A [ i + 1 ] = A [ i ]c_{6}\sum_{j=2}^{n}t_{j}-1
7i = i - 1c_{7}\sum_{j=2}^{n}t_{j}-1
8A[i+1] = keyc_{8}n-1

即运行时间为T(n) =c_{1}n+c_{2}(n-1)+c_{4}(n-1)+c_{5}\sum_{j=2}^{n}t_{j}+c_{6}\sum_{j=2}^{n}(t_{j}-1)+c_{7}\sum_{j=2}^{n}(t_{j}-1)+c_{8}(n-1)

若输入数组已经排好序,则出现最佳情况T\left ( n \right )= c_{1}(n)+c_{2}(n-1)+c_{4}(n-1)+c_{5}(n-1)+c_{8}(n-1) = (c_{1}+c_{2}+c_{4}+c_{5}+c_{8})n-(c_{2}+c_{4}+c_{5}+c_{8})

                                        该运行时间表示为an+b

若输入数组已反向排序,则导致最坏情况。此时

                                 \sum_{j=2}^{n}(t_{j}) = \frac{n(n+1)}{2}-1             \sum_{j=2}^{n}(t_{j}-1) = \frac{n(n-1)}{2}

              T(n) = (\frac{C_{5}}{2}+\frac{C_{6}}{2}+\frac{C_{7}}{2})n^{2}+(C_{1}+C_{2}+C_{4}+\frac{C_{5}}{2}-\frac{C_{6}}{2}-\frac{C_{7}}{2}+C_{8})-(C_{2}+C_{4}+C_{5}+C_{8})

         该运行时间表示为an^{2}+bn+c

接着我们做一些更简化的抽象,我们真正感兴趣的是运行时间的增长率或增长量级。所以我们只考虑公式中最重要的项(例:an^{2}),因为当n很大时,低级项相对来说不那么重要。

所以我们记插入排序的最坏运行时间O(n^{2})

f_fs.c 初始化流程(进行中) 前言 之所以选择f_fs.c作为这系列的开始,因为usb在/driver/usb下面的内容实在太多太多,如果讲各种各样点会太分散了。所以决定切入点以实际使用为主,就是f_fs了,目前我了解这是做bulk裸传输使用的,具体的通信协议自己确定。 初始化部分 开始点从这个路径下说起, /drivers/usb/gadget/function/f_fs.c 然后f_fs.c第一个使用的是include/composite.h中的宏定义function #define DECLARE_USB_FUNCTION(_n 阅读详情

相关推荐

python数据分析与可视化

Python数据分析主要包括数据清洗、数据探索和数据可视化三个部分。数据清洗是数据分析的重要环节,主要是对数据进行预处理,包括缺失值处理、异常值处理、数据类型转换等。数据探索则是通过对数据进行初步分析,了解数据的分布和特征,为后续的数据分析提供基础。数据可视化则是将数据以图形化的方式呈现,帮助人们更好地理解和分析数据。

2301_82032652的博客 7712

python实现插入、快速、冒泡排序算法及运行时间

python实现插入、快速、冒泡排序算法及运行时间

南木的博客 934

告别硬件!用Wokwi在线模拟ESP32点灯,5分钟搞定开发环境搭建

本文介绍如何使用Wokwi在线模拟器快速搭建ESP32开发环境,5分钟内完成点灯实验。无需硬件即可体验GPIO控制、PWM调光等核心功能,特别适合物联网开发初学者和快速原型验证。Wokwi的零成本、全功能模拟特性让嵌入式开发变得前所未有的简单高效。

weixin_42567497的博客 494

算法——算法分析

本博客根据数据结构与问题求解Java语言描述(第3版)(Data Structure and Problem Solving Using Java Third Edition)整理而成。百度百科 豆瓣评分 算法:算法是一个明确指定的指定集合,计算机将按照这个指令集解决某个问题。 算法分析:对某个问题给定一个算法且证明这个算法是正确的,下一步就是要确定该算法所需要的资源量。

sch的学习笔记 1026

告别GitHub!手把手教你用Gitblit在Windows 10上搭建私人局域网Git服务器(附SourceTree配置)

本文详细介绍了如何在Windows 10环境下使用Gitblit搭建私有Git服务器,实现局域网内高效代码协作。通过轻量级的Gitblit解决方案,开发者可以享受数据完全自主、离线可用性和局域网高速访问等优势。文章包含从环境准备、安装部署到SourceTree配置的全流程指南,特别适合金融、医疗等敏感行业团队使用。

weixin_30430169的博客 281

基于FFT的阵列方向图快速计算公式推导

因为自己毕设涉及到阵列方向图综合相关知识,最近阅读了关于方向图综合的相关文献,就其中关于使用FFT计算阵列方向图的方法进行了公式推导。 简介: 自从1965年Colley-Tukey发表快速傅里叶变换[1]论文以来,FFT在许多科学技术领域获得了广泛和成功的应用。在阵列信号处理与雷达信号处理领域,随着科技的发展,对于电尺寸较大的相控阵天线,使用公式按照级数求和计算天线阵列方向图的方法效率甚低,...

qq_38151438的博客 4290

算法复杂度分析

一 、时间复杂度            算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是度量算法执行的时间长短;而空间复杂度是度量算法所需存储空间的大小。任何算法运行所需要的时间几乎总是取决于他所处理的数据量,在这里我们主要说时间复杂度。对于一个给定计算机的算法程序,我们能画出运行时间的函数图。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。

极致的专注 无限的热情 6618

STM32 RTC_WaitForSynchro()死循环问题分析与LSI时钟优化实践

本文深入分析了STM32使用LSI时钟源时,调用RTC_WaitForSynchro()函数陷入死循环的根本原因。问题核心在于RTC时钟域未正确使能,导致硬件同步标志RSF无法置位。文章提供了通过显式调用RCC_RTCCLKCmd(ENABLE)函数启用RTC时钟总开关的解决方案,并分享了编写健壮RTC/BKP初始化代码、增加超时机制等最佳实践,确保系统稳定运行。

weixin_29185493的博客 510

统计各排序算法运行的时间

学习内容: 编写 java 程序,随机产生N个数(N>30000),分别使用插入排序、合并排序、冒泡排序对其进行排序,比较各种排序所用的时间。要求统计每个算法的运行时间,输出排序后的前20个数。 源代码: import java.util.Calendar; public class MySort_hw { static int n = 30000; public static void main(String[] args) { int[] A = new

看,好自为之的博客!!! 2278

【OpenClaw企业级智能体实战】第27篇:Skill生态运营——企业私有Skill商店的搭建与审核机制

2026年ClawHavoc供应链攻击事件曝光超1200个恶意Skill渗透公共技能市场,工信部明确要求企业审慎使用第三方技能包并严格审查代码。本文基于真实安全事件与行业实践,完整讲解企业私有Skill商店从0到1搭建方案,覆盖小团队极简GitLab私有仓库、中大型企业Nacos 3.2私有Registry两种主流架构,配套企业级安全审核四步法、静态代码扫描规则、CI/CD自动化审计、数字签名校验与版本生命周期管理。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 499

主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

技术分享 1724

【算法导论】插入排序

/* 《Introduction to Algorithms(second edition)》 chapter2,INSERTION_SORT() author:eaton date:2014-9-14 */ #include #include #include #define MAX 50 typedef struct { int arr[MAX+1]; int l

星之所在 947

解答网友疑问:聊聊 SAP MRP 中追溯需求的技术实现

笔者到 SE37 里一查,果然有这个 Function Module,并且在里面设置断点之后,执行事务码 MD09 之后,设置在该 Function Module 内的断点也触发了,看来 ChatGPT 比较靠谱。因为红色区域的显示,是通过用户在 MD09 的 ALV 界面上双击触发的,因此我们直奔用户输入模块,PROCESS AFTER INPUT,在 check_fcode 的实现体内设置断点。通过这种追溯,企业可以了解需求和供应之间的关系,从而优化生产和采购计划,减少库存积压,提升供应链效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1026

从插入排序一窥时间复杂度的计算方法

为什么需要分析时间复杂度 通常在运行一段代码之前,我们需要预测其需要的资源。虽然有时我们主要关心像内存、网络带宽或者计算机硬件这类资源,但是通常我们想度量的是计算时间。 接下来我们以插入排序算法为切入点一窥时间复杂度的计算方法。 时间复杂度分析 一般来说,算法需要的时间于输入的规模同步增长,所以通常把一个程序的运行时间描述成其输入规模的函数。为此,我们必须先给出术语运行时间和输入规模。 输入规模通...

Time_Limit的博客 1298

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

算法分析入门

算法就是问题的程序化解决方案。它定义了一个良好的计算过程,取一组值作为输入,并产生一组值作为输出。。fill:#333;color:#333;color:#333;fill:none;

weixin_74252067的博客 738

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

算法导论

第一节 算法分析 -Analysis of algorithm 算法分析:是关于计算机程序性能和资源利用的研究 1.算法分析的主要内容是性能,什么比性能更重要呢?当然有,比如正确性、简洁性、可维护性、可扩展性、健壮性、安全性等等 但是如果算法和性能都不重要 为什么要学习呢? 1.性能的好坏直接决定可行性与不可行性。算法能够将不可行变成可行。 2.算法是一种描述程序行为的语言。算法如同...

qq_38390669的博客 465

lec1:算法分析——以插入排序和归并排序为例

本文介绍了算法分析的基础概念,重点讲解了插入排序和归并排序两种算法。插入排序通过逐个元素插入已排序序列实现,时间复杂度在最好情况下为线性O(n),最坏情况下为平方O(n²)。归并排序采用分治策略,递归地将数组分成两半排序后合并,时间复杂度为O(nlogn)。文章通过伪代码和图示详细说明了两种算法的实现过程,并分析了它们的时间复杂度,指出归并排序在大规模数据排序中的效率优势。同时介绍了渐近分析方法和递归树技术,为算法性能比较提供了理论基础。

2403_88112538的博客 479

《算法导论》Ch.2_学习笔记

算法基础>

qq_42943306的博客 828

向下取整符号_【MIT算法导论课 | 学习笔记01】插入排序、渐进符号(1)、归并排序...

一、算法分析的关键是性能(performance)二、实例:插入排序(Insertion Sort)· 输入:一个数列 · 输出:一个数列 ,使得 伪代码(Pseudocode)实现:Inseraction Sort(A[n]) For j ← 2 to n do key ← A[j] i ← j - 1 while i>0 and A[i] > key do ...

weixin_39772652的博客 257

算法导论笔记-Ⅰ.Foundations

写在最前面:本文以及接下来的几篇都是我读《算法导论》时的笔记,边学边写边提交。我为了锻炼英语,看的原版,用英文写标题这种假洋鬼子的情况会经常有,还请见谅 文章目录The Role Of Algorithms in ComputingInsertion sortinput:output:Analyzing algorithmsRAMRAM的常见指令Analysis of insertion sortWorst-case and average-case analysisDesigning algorithms

fr718的博客 412

算法导论第二章

从今天开始会陆续更新关于算法导论的啃书相关文章,先从前往后而且比较常用的章节开始讲起,所以可能会有部分不怎么用的着的章节会跳过。由于第一章没讲什么具体内容,所以选择跳过从第二章开始讲起。

heixiu_heixiuhei的博客 775

算法导论-第2章-算法基础

文章目录第2章 算法基础2.1 插入排序(Insertion sort)循环不变式与插入排序的正确性2.2 分析算法(Analyzing algorithms)插入排序算法时间分析最坏情况与平均情况分析2.3 设计算法2.3.1 分治法2.3.2 分析分治算法 第2章 算法基础 2.1 插入排序(Insertion sort) 输入:nnn个数的序列<a1,a2,⋯ ,an><a_1,a_2,\cdots,a_n><a1​,a2​,⋯,an​> 输出:输入序列的一个排列&

优快云博客 295

第二章 算法基础

分治法中一个常见的思想是递归。分解:将原问题分解为若干子问题,这些子问题都是原问题的规模较小的实例;解决:递归求解这些子问题,当其规模足够小时,可以直接求解;合并:将子问题的解合并成原问题的解。

qq_39249627的博客 1064

《算法导论》读书笔记--第二章 2.2 分析算法

2.2分析算法 分析算法的结果意味着预测算法需要的资源。虽然有时候关心内存、通讯或者计算机硬件,但是通常我们想度量的是时间。 在分析算法之前,要有一个实现技术的模型,包括描述所用资源及其代价的模型。我们假定一种通用的单处理器计算模型—随机访问机(random-access machine,RAM)来作为我们的实现技术,算法可以用计算机程序来实现。在RAM模型中,指令一条接一条执行,并没有并发操...

weixin_34270865的博客 157

算法的基础理论

利用循环不变量来证明算法的正确性 循环不变量(Loop Invariants)是与迭代次数有关的一个语句。它在循环开始前,以及在每次迭代后都为正,特别是在循环结束后仍然为正。 要证明算法的正确性,可以通过证明:对于循环的每次迭代jjj,循环不变量LjL_jLj​都为真。 初始步:在循环的迭代开始前,L1L_1L1​为真。 归纳步:若循环的第jjj次迭代前Lj−1L_{j-1}Lj−1​为真,则在循环的第jjj次迭代后,LjL_jLj​为真。 终止步:当循环终止时,LnL_nLn​为真。 算法的效率评价

Shao_yihao的博客 533

算法导论第二章:算法入门

本章介绍了一个贯穿本书的框架,后续章节的算法设计和分析都是在这个框架中进行的。 首先分析了一下如何用插入排序来解决排序问题,定义了一种“伪代码”来描述算法。在描述了算法后,再证明他能正确的完成任务,并对运行时间进行分析。引入一种记号,侧重于表达运行时间是如何随着待排序的数据项数而增加的。之后还要介绍算法设计中的“分治法”,并利用该方法来设计一个称为合并排序的算法,对合并算法的运行时间进行...

weixin_30950607的博客 125
上一篇: Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid
下一篇: Java中double相乘精度缺失问题
zjs_scallop
博客等级 码龄7年 5粉丝 30原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值