Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >算法基础-函数渐近

算法基础-函数渐近

作者头像
DearXuan
发布于 2022-01-25 06:16:07
发布于 2022-01-25 06:16:07
66900
代码可运行
举报
运行总次数:0
代码可运行

渐近等价

考虑函数: f(x)=x²+4x

当x→∞时,该函数可以看作x平方与它的高阶无穷小o(x²)之和,即

于是我们称f(x)和x²是渐近等价的。用符号表示为

更一般地,如果存在两个函数f(x)和g(x),使得

你也可以用极限的方法来判断两个函数是否渐近等价

我们可以轻而易举地得到一个结论:f(x)总是跟自己渐近等价

渐近上界

若对于函数 f(n),g(n),存在c和k,使得

即从k开始,f(n)永远无法超过cg(n),则称g(n)为f(n)的渐近上界,写作

注意O(g(n))表示的是一个集合,它代表了所有以g(n)为渐近上界的函数,此处的等于号是用于指出f(n)是所有以g(n)为渐近上界的函数里的一元

下面的图片可以帮助你更好的理解f(n)与g(n)的关系

若选取 c=5 ,则当x>1时,f(n)<5g(n)

同样的,我们也可以轻易得到一个结论,f(x)总是自己的渐近上界

渐近时间复杂度

设有下面一段函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(int i=1;i<=n;i++){
    for(int j=1;j<=i;j++){
        swap(i,j);
    }
}

外循环共执行了n次,内循环共执行了i次,所以总共执行次数为

如果我们把代码改成如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(int i=1;i<=n;i++){
    for(int j=1;j<=i;j++){
        execute1(i,j);
        execute2(i,j);
        execute3(i,j);
        execute4(i,j);
    }
}

那么此时算法执行命令的总次数就翻了4倍

随着n的逐渐增大,这两个算法所用时间的增长规模是相似的,并且我们并不需要特别高的精度

因此我们可以用算法执行时间 t(n) 的渐近上界 f(n) 来表示一个算法的效率

在渐近时间复杂度中,我们只关心执行时间的增长规模,而不关心具体数字,显然以下两个函数的规模是一致的

因此我们需要对渐近时间复杂度进行化简

函数推导

f(n)=O(g(n))Λg(n)=O(h(n))→f(n)=O(h(n))

根据定义,我们得到

合并,得到

命题得证

f(x)~g(x)→O(f(x))=O(g(x))

我们设 h(x) = O(f(x)),由渐近等价得定义得

由无穷小定义可得,对于任意 ε>0,总存在N,使得下列不等式成立

取 ε=1,便得到

替换掉f(x),得到

命题得证

其它结论

通过上面两个结论,再利用其它高等数学知识,我们便可以推出下面的结论

因此,在计算渐近时间复杂度时,若出现多项式,我们可以遵守以下准则

  1. 只保留最高阶的项
  2. 最高阶的项系数为1

例如: O(4n³+2n²+9)=O(n³)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go语言的编译优化技巧
编译优化是指在编译过程中,通过各种技术手段,提高生成代码的执行效率和资源利用效率。Go语言的编译器在编译过程中,会自动进行一些基本的优化,但通过合理的代码设计和编译参数设置,我们可以进一步提升程序的性能。
数字扫地僧
2024/07/02
2990
Android性能优化相关的10个经典面试题
这些问题和答案可以帮助你准备Android性能优化相关的面试。记得在实际面试中,除了理论知识,也要展示你的实际编码能力和问题解决技巧。
AntDream
2024/09/29
2040
Android性能优化相关的10个经典面试题
【深入浅出C#】章节10: 最佳实践和性能优化:内存管理和资源释放
C#对象池示例代码: 以下是一个简单的C#对象池示例,用于管理字符串对象。注意,这只是一个示例,实际应用中可以根据需要自定义更复杂的对象池。
喵叔
2023/09/11
1.5K0
ELK 性能优化实践
近一年内对公司的 ELK 日志系统做过性能优化,也对 SkyWalking 使用的 ES 存储进行过性能优化,在此做一些总结。本篇主要是讲 ES 在 ELK 架构中作为日志存储时的性能优化方案。
kunge
2021/01/13
1.6K0
大型网站背后的高性能系统架构设计
CDN 的本质仍然是一个缓存,而且将数据缓存在离用户最近的地方,使用户已最快速度获取数据,即所谓网络访问第一跳。
李红
2019/05/29
1.3K0
浅析Java编程优化技巧
TIOBE 6月榜单中,Java较上次稳定不变,在编写Java程序时,优化代码以获得更好的性能和可维护性是非常重要的。本文将探讨一些关键的Java编程优化技巧,并通过案例来说明如何应用这些技巧来提升程序的性能。
小明爱吃火锅
2024/07/04
1960
性能最佳实践
最佳实践(Best Practices)是指在特定领域或特定任务中,被广泛认可并被认为是最有效、最高效、最安全的方法或做法。它们是基于经验、实践和研究得出的,旨在提供一种可靠的指导,以帮助人们在特定情境下取得良好的结果。
FunTester
2023/09/10
2480
性能最佳实践
Java编程的精髓:深入理解JVM和性能优化
Java是一种广泛使用的高级编程语言,其强大的跨平台性和丰富的生态系统使其成为企业应用程序和大规模系统的首选。然而,要真正掌握Java编程,理解Java虚拟机(JVM)和性能优化是至关重要的。本文将深入研究Java编程的精髓,重点关注JVM的工作原理和如何优化Java应用程序的性能。
IT_陈寒
2023/12/13
2150
Java编程的精髓:深入理解JVM和性能优化
像.NET大牛一样提升C#应用性能
引言 在当今快速发展的世界中,缓慢的应用程序会导致用户沮丧并错失商业机会。无论你正在开发Web API、桌面应用程序还是企业系统,优化性能对于可扩展性、响应速度和效率至关重要。
郑子铭
2025/04/10
1650
像.NET大牛一样提升C#应用性能
ASP.NET Core 性能优化最佳实践
本文提供了 ASP.NET Core 的性能最佳实践指南。 译文原文地址:https://docs.microsoft.com/en-us/aspnet/core/performance/perfor
newbe36524
2020/09/14
2.6K0
ASP.NET Core 性能优化最佳实践
鸿蒙APP的性能优化
鸿蒙(HarmonyOS)应用的性能优化是确保应用流畅运行、减少资源消耗和提升用户体验的关键步骤。以下是一些针对鸿蒙 APP 的性能优化策略和技巧,涵盖了 UI 渲染、内存管理、分布式任务调度、网络请求等方面。
数字孪生开发者
2025/02/20
1980
鸿蒙APP的性能优化
Java虚拟机(JVM):内存模型、垃圾回收、性能调优与最佳实践
Java虚拟机(JVM)是Java应用程序的运行环境,它具有独特的内存管理机制和垃圾回收策略,同时提供了一系列参数供开发人员调优。本文将深入探讨JVM内存模型、垃圾回收算法、垃圾回收器类型以及性能调优的最佳实践,帮助您更好地理解和优化Java应用程序。
疯狂的KK
2023/09/25
3.1K0
Java虚拟机(JVM):内存模型、垃圾回收、性能调优与最佳实践
聊聊性能测试中的性能调优
性能调优是性能测试体系的重要环节,是指通过科学的性能测试发现系统性能瓶颈,并进行针对性优化,从而提升系统性能的过程。
漫谈测试
2024/10/21
2251
聊聊性能测试中的性能调优
Go语言编程优化技巧
Go语言(又称Golang)自从2007年发布以来,已经成为了云计算、微服务、分布式系统等领域的热门编程语言。Go语言的并发模型和高效的垃圾回收机制使其在性能上具有天然的优势。然而,即使是一门高性能的语言,也需要一些优化技巧来进一步提升程序的执行效率。本文将详细介绍Go语言编程的优化技巧,并通过案例来说明如何应用这些技巧,希望大家能够从本文中了解到为什么在TIOBE 6月榜单中Go 的排名呢能从 8 升至 7。
小明爱吃火锅
2024/07/04
1770
大厂的性能调优策略
面对日渐复杂的系统,制定合理的性能测试,可以提前发现性能瓶颈,然后有针对性地制定调优策略。即:
JavaEdge
2025/01/12
2640
后端性能优化的实践与经验分享
在当今的互联网环境中,后端性能优化是确保卓越用户体验的关键。一个快速响应的网站或应用程序不仅能提升用户满意度,还能直接影响业务的转化率和品牌形象。以下是四个关键的后端性能优化领域:数据库优化、缓存策略、服务器配置优化和代码优化。
Jimaks
2024/05/28
3020
高性能代码如何编写?
在Java中,Arrays.sort() 方法使用了一种改进的快速排序算法,通常情况下具有很好的性能。
终有链响
2024/07/29
1240
高性能代码如何编写?
性能优化那些事儿(2)
『不管项目大小,一旦上线,或多或少都会遇到性能问题』性能问题就像是魔咒一般藏绕着我们。 性能优化应该什么时候开始 有些性能问题是随着时间的积累慢慢产生的,比如系统一开始数据量很小的时候,没有什么问题,等到数据积累到一定程度,问题就暴露出来了;有些问题是由于访问量的过大造成的,比如系统平时没问题,一到搞活动时就挂;也有些问题是遗留系统经过太多人去维护修改,导致各种坏代码味道性能问题仿佛到处存在。性能问题就如同一颗定时炸弹,只要数据量访问量一上来,或者各个团队在开发迭代中没有注重性能的意识,早晚会炸。既然迟早会
ThoughtWorks
2022/03/04
2850
如何优化 Java 程序的性能?
总之,优化 Java 程序的性能需要综合考虑各个方面的因素,并根据具体场景进行调整和优化。
程序员阿伟
2024/12/09
1300
【深入浅出C#】章节10: 最佳实践和性能优化:编码规范和代码风格
编码规范和代码风格之所以重要,是因为它们直接影响到软件开发的质量、可维护性、可读性和协作效率。编码规范和代码风格是编程中的关键要素,它们有助于编写高质量、可维护和易读的代码,提高团队协作效率,减少错误,降低维护成本,从而推动软件开发的成功和可持续性。
喵叔
2023/09/04
9990
相关推荐
Go语言的编译优化技巧
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验