【Python基础教程】4 . 算法的空间复杂度

在这里插入图片描述

🎈个人主页:豌豆射手^
🎉欢迎 👍点赞✍评论⭐收藏
🤗收录专栏:python基础教程
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!

专栏往期文章:

【Python基础教程】4 . 算法的空间复杂度

  • 一 空间复杂度的概念
    • 1.1 概念
    • 1.2 类比
  • 二 空间复杂度和时间复杂度的区别与联系
    • 2.1 区别与联系
    • 2.2 类比(选看)
  • 三 常见空间复杂度类型 (小白可以不看)
    • 3.1 常见类型
    • 3.2 类比
  • 四 优化算法的空间复杂度的思路 (小白可以不看)
  • 总结

在这里插入图片描述

引言:

在Python编程的世界中,算法无疑占据着举足轻重的地位。算法的效率不仅决定了程序的运行速度,还直接影响着程序所需的存储空间。空间复杂度,作为衡量算法所需额外空间的指标,是我们在设计和优化算法时必须要考虑的因素之一。

空间复杂度是算法性能分析中的一个关键方面,它关注的是算法在执行过程中所使用的额外存储空间的大小。随着数据规模的扩大,算法的空间需求可能会急剧增加,因此,理解并优化空间复杂度对于编写高效、资源友好的Python程序至关重要。

本文将深入探讨Python算法的空间复杂度,从概念到常见类型,再到优化思路,帮助读者全面理解并掌握这一重要概念

一 空间复杂度的概念

1.1 概念

算法的空间复杂度,也称为算法的存储复杂度,是衡量算法在执行过程中所需“额外存储空间大小”的指标。

具体来说,空间复杂度用于分析算法在执行过程中除了输入数据所占据的存储空间外,还需要多少“额外的辅助空间”。

这句话的意思是,当我们讨论一个算法的空间复杂度时,我们主要关心的是算法在运行过程中除了输入数据本身所占用的存储空间外,还需要额外使用多少存储空间

因为输入数据所占用的存储空间是固定的,它是算法处理的对象,其大小是算法无法控制的。因此,将输入数据的存储空间纳入空间复杂度的计算中是没有意义的,因为它不会因算法的不同而改变

而额外的辅助空间则是算法为了完成其计算任务而需要额外申请的存储空间

举个例子,假设我们有一个简单的排序算法,它接受一个包含n个整数的数组作为输入。这个数组本身所占用的存储空间是固定的,取决于数组的大小和整数的大小。

然而,在排序过程中,算法可能需要额外的存储空间来存储中间结果、临时变量或者用于比较和交换的额外数组。这些额外的存储空间就是我们所说的“额外的辅助空间”。

空间复杂度就是用来衡量这种额外辅助空间的大小。它可以帮助我们了解算法在运行过程中对内存资源的需求情况,从而在设计算法时做出更好的权衡和选择。对于某些应用场景,特别是内存资源有限的环境,优化空间复杂度就显得尤为重要。

这里的辅助空间可以包括系统为算法开辟的变量存储空间、数组、队列、栈等数据结构所需的额外空间,以及递归调用过程中函数栈帧的消耗等。

需要注意的是,算法的空间复杂度不是一个具体的内存大小,而是一个关于内存使用如何随输入数据规模变化抽象描述

它通常使用大O表示法(Big O notation)来表示,这是一种描述函数渐近行为的数学符号。例如,如果算法的空间复杂度是O(n),那么意味着随着输入数据规模n的增长,算法所需的额外存储空间也会线性增长

需要注意的是,空间复杂度是一个上限估计,它并不表示算法在实际运行中一定会使用这么多空间,而是表示在最坏情况下,算法的空间需求不会超过这个上限

因此,算法的空间复杂度不是一个具体的内存大小数值,而是一个关于内存使用增长趋势的抽象描述。它帮助我们了解算法在不同规模输入数据下的空间需求情况,从而在设计算法时做出更好的权衡和选择。

例如,如果一个算法需要额外使用一个固定大小的变量来辅助计算,则其空间复杂度为O(1);

如果算法需要创建一个与输入数据规模n成比例的数组来存储中间结果,则其空间复杂度为O(n)。

在评估算法性能时,空间复杂度是一个重要的考虑因素。

尽管现代计算机的内存容量已经足够大,可以容纳许多大型数据结构和算法,但在处理超大规模数据时,或者在设计内存受限的应用场景(如嵌入式系统)时,空间复杂度就显得尤为重要。

优化算法的空间复杂度可以减少内存消耗,提高算法的执行效率,甚至在某些情况下,空间复杂度的优化是算法能否成功运行的关键。

因此,在设计和分析算法时,除了关注时间复杂度外,还需要充分考虑空间复杂度的影响,力求在时间和空间上取得平衡,以实现最优的算法性能。

1.2 类比

为了更好地理解算法的空间复杂度,我们可以将其类比为现实生活中的空间需求问题。

假设你正在准备搬家,你需要打包所有的物品。在这个过程中,你不仅要考虑如何将物品装进箱子里(这可以类比为算法的执行过程),还要考虑需要多少箱子来装这些物品(这就可以类比为算法的空间复杂度)。

  1. 固定大小的箱子:如果你只需要一个固定大小的箱子就能装下所有物品,那么这就像是空间复杂度为O(1)的算法。无论你的物品有多少,你都只需要一个箱子,因此空间需求是固定的。

  2. 与物品数量成比例的箱子:如果你的物品很多,并且每个物品都需要一个单独的箱子来装,那么你需要的箱子数量就会随着物品数量的增加而增加。这就像是空间复杂度为O(n)的算法,其中n代表物品的数量(或算法的输入规模)。

  3. 多层嵌套箱子:假设有些物品需要被放进小箱子,而这些小箱子又需要被放进中箱子,中箱子再放进大箱子。这就像是空间复杂度更高的算法,比如O(n^2)或更高。你不仅需要为每个物品提供空间,还需要为这些箱子之间的嵌套关系提供额外的空间。

  4. 优化空间使用:在打包过程中,你可能会尝试优化空间使用,比如把轻的、小的物品放在大箱子的缝隙里,或者把能叠放的物品叠放在一起。这就类似于在算法中优化空间复杂度,比如通过使用更紧凑的数据结构,减少不必要的空间占用,或者复用已有的空间来减少整体的空间需求。

通过这个搬家打包的类比,我们可以更容易地理解算法空间复杂度的概念:它衡量的是算法在执行过程中所需额外空间的大小和增长趋势

就像搬家时我们关心需要多少箱子来装物品一样,在编写算法时,我们也需要关注算法的空间复杂度,以确保在有限的内存资源下能够有效地执行算法。

二 空间复杂度和时间复杂度的区别与联系

2.1 区别与联系

空间复杂度和时间复杂度在算法分析中各自扮演着重要的角色,它们之间既存在区别,也有一定的联系。

首先,空间复杂度主要关注的是算法执行过程中所需额外占用的存储空间大小

这包括算法运行过程中创建的所有变量、数据结构以及动态分配的内存。

而时间复杂度则衡量的是算法执行所需的时间长短,即算法的运行速度

它主要关注算法中语句执行的次数,以及这些执行次数如何随输入数据规模的增长而变化。

其次,空间复杂度和时间复杂度在优化算法时各自有不同的侧重点

优化空间复杂度主要是为了减少算法所需的额外存储空间,这在内存资源有限的环境中尤为重要。

而优化时间复杂度则主要是为了提高算法的执行速度,减少算法运行所需的时间。

然而,空间复杂度和时间复杂度之间并非完全独立,它们之间存在一定的联系。在某些情况下,降低空间复杂度可能会导致时间复杂度的增加,反之亦然。

这主要是因为算法的设计和执行往往涉及到资源之间的权衡

首先,考虑降低空间复杂度的情况。当算法尝试减少所需的额外存储空间时,它可能需要采用更复杂的逻辑或更多的计算步骤来完成相同的任务

这是因为一些数据结构或算法优化策略,如使用更紧凑的数据表示或共享存储空间,可能会增加计算的难度或引入额外的计算开销。因此,虽然空间复杂度得到了降低,但时间复杂度却可能因此而增加。

另一方面,当算法尝试降低时间复杂度时,即减少执行时间,它可能需要使用更多的存储空间来支持更高效的计算

例如,通过使用哈希表或缓存机制来加速查找操作,虽然可以显著减少查找时间,但这些数据结构本身需要占用额外的存储空间。因此,降低时间复杂度可能会导致空间复杂度的增加。

总的来说,空间复杂度和时间复杂度是评估算法性能的两个重要方面,它们各自关注不同的资源使用情况,但在算法优化中又需要相互权衡。在实际应用中,我们需要根据具体需求和资源限制来选择合适的算法,以达到最佳的性能表现。

2.2 类比(选看)

让我们用一个现实生活中的例子来类比空间复杂度和时间复杂度。

假设你正在组织一场大型聚会,需要准备各种食物和饮料。在这个场景下,我们可以将准备聚会的过程类比为算法的执行过程,而空间复杂度和时间复杂度则分别对应于你在这个过程中所需的空间(如厨房面积、储物空间等)和时间(如准备食物所需的总时长)。

空间复杂度

  • 类比于算法执行所需的额外存储空间,准备聚会所需的空间复杂度可以看作是你为存放食材、厨具和餐具等物品所需的额外空间。
  • 如果你打算准备很多不同的菜肴和饮料,那么你需要更多的储物空间来放置食材和饮料,这就像算法中需要更多的额外空间来存储变量和数据结构。
  • 另一方面,如果你选择简单的菜肴和饮料,所需的空间就会相对较少,就像算法中使用了较少额外空间的优化策略。

时间复杂度

  • 类比于算法执行所需的时间,准备聚会所需的时间复杂度可以看作是你从开始准备到聚会结束所需的总时间。
  • 如果你选择复杂的菜肴,需要花费更多时间来烹饪和准备,这就好比算法中执行了更多步骤,导致时间复杂度增加。
  • 相反,如果你选择简单易做的菜肴,准备时间就会减少,就像算法中通过优化减少了执行步骤,降低了时间复杂度。

联系与区别

  • 联系:在准备聚会的过程中,你通常会面临空间和时间上的权衡。例如,你可能希望准备更多的菜肴来满足客人的口味,但这会增加你的空间复杂度(需要更多储物空间)。同时,更复杂的菜肴也会增加你的时间复杂度(需要更多准备时间)。因此,你需要根据聚会的规模和资源限制来做出权衡。
  • 区别:空间复杂度和时间复杂度关注的是不同的资源使用方面。空间复杂度主要关注存储和布局的需求,而时间复杂度则关注执行步骤的数量和速度。在准备聚会的过程中,你可以通过合理安排食材和厨具的存放来优化空间复杂度,同时也可以通过选择简单快速的菜肴来优化时间复杂度。

通过这个例子,我们可以更好地理解空间复杂度和时间复杂度在现实世界中的类比和它们之间的联系与区别。无论是在准备聚会还是设计算法时,我们都需要综合考虑空间和时间资源的使用情况,以找到最佳的解决方案。

三 常见空间复杂度类型 (小白可以不看)

3.1 常见类型

常见的空间复杂度类型主要包括以下几种:

  1. 常量空间复杂度(O(1))

    • 当算法所需的空间大小是固定的,与输入数据的规模无关时,其空间复杂度记作O(1)。这意味着无论输入多少数据,算法所使用的额外空间都是固定的。例如,算法中仅使用了一些固定的变量或常量,没有使用到与输入数据规模成比例的数组或数据结构。
  2. 线性空间复杂度(O(n))

    • 当算法使用的额外空间与输入数据的规模n成正比时,其空间复杂度为O(n)。这通常意味着算法使用了一个与输入数据大小相等的数组或集合来存储数据。例如,当算法需要遍历一个列表或数组并对每个元素进行某种操作时,可能需要一个额外的数组来存储中间结果或状态。
  3. 二维空间复杂度(O(n^2))

    • 当算法使用的是一个二维数组或类似的数据结构,且该数据结构的长和宽都与输入数据规模n成正比时,其空间复杂度为O(n^2)。这种空间复杂度通常出现在需要对二维数据进行处理或存储的算法中,如矩阵运算或动态规划中的某些问题。
  4. 递归空间复杂度

    • 对于使用递归的算法,其空间复杂度与递归调用的深度有关。在递归过程中,每次函数调用都会在栈上分配一定的空间来保存函数的局部变量和返回地址。如果递归调用的层数过多,可能会导致栈溢出的问题。递归空间复杂度的具体形式取决于递归的结构和递归调用的次数。在某些情况下,递归空间复杂度可能与线性空间复杂度相同,即O(n)。

需要注意的是,空间复杂度的计算通常只考虑算法在执行过程中额外使用的空间,而不包括输入数据本身所占用的空间。这是因为输入数据的大小通常是固定的或是由问题本身决定的,无法通过算法设计来改变。

此外,虽然空间复杂度是评估算法性能的一个重要指标,但在实际应用中,通常更关注算法的时间复杂度。因为即使算法的空间复杂度较低,如果其执行时间过长,也无法满足实际应用的需求。因此,在算法设计和优化过程中,需要综合考虑空间复杂度和时间复杂度,并找到它们之间的平衡点。

3.2 类比

现实中的例子可以帮助我们更好地理解常见的空间复杂度类型。以下是一个简单的类比:

假设你正在整理一堆杂乱的书籍。书籍的数量相当于算法中的输入数据规模。你需要找到一个合适的存储方式,以便能够快速找到任何一本需要的书。这个过程可以类比为算法执行过程中对空间的使用。

  1. 常量空间复杂度(O(1)

    • 类比:你有一个固定大小的书架,无论你有多少本书,你总是将这些书放在这个书架上。即使书籍数量增加,你也不会增加书架的大小。这就像算法中使用固定数量的变量或常量,无论输入数据规模如何变化,所需的空间都是固定的。
  2. 线性空间复杂度(O(n))

    • 类比:你根据书籍的数量购买了一个相应大小的书架。如果书籍数量增加,你也会购买更大的书架来容纳所有书籍。这就像算法中使用了一个与输入数据规模成比例的数组或数据结构来存储数据。
  3. 二维空间复杂度(O(n^2))

    • 类比:假设你不仅仅整理书籍,还要为每本书制作一个详细的索引卡片,并将这些卡片放在一个二维的卡片盒中。卡片盒的行数和列数都与书籍的数量成正比。这类似于算法中使用二维数组或矩阵来存储数据,其空间需求与输入数据的平方成正比。
  4. 递归空间复杂度

    • 类比:想象你采用了一种递归的方式来整理书籍,即每次整理一部分书籍,然后将剩下的书籍交给另一个人去整理,如此递归进行。每次递归调用都会在某种程度上“占用”一些空间(例如,告诉下一个人需要整理哪些书籍的信息)。递归的深度类似于书架的层数或者整理步骤的嵌套程度,它会影响整体所需的空间。

通过这些类比,我们可以理解到不同的空间复杂度类型对应于不同规模和结构的存储需求。在实际情况中,我们需要根据书籍的数量、大小以及查找的需求来选择合适的整理方式(即算法),以便在有限的空间内高效地管理这些书籍。同样,在算法设计中,我们也需要根据问题的特性和资源限制来选择合适的空间复杂度类型。

四 优化算法的空间复杂度的思路 (小白可以不看)

优化算法的空间复杂度是一个重要的目标,尤其是在处理大规模数据或资源受限的环境中。以下是一些常见的优化算法空间复杂度的思路:

  1. 数据结构选择

    • 选择合适的数据结构可以显著减少空间的使用。例如,使用稀疏矩阵代替普通矩阵,或者使用哈希表代替数组来存储键值对。
    • 考虑使用更紧凑的数据表示,例如位运算或位字段来存储布尔值或小范围的整数。
  2. 避免不必要的存储

    • 在算法执行过程中,及时释放不再需要的空间,避免不必要的存储开销。
    • 重复使用已经分配的空间,而不是每次都创建新的空间。
  3. 原地算法

    • 设计原地算法,即算法在执行过程中不需要额外的存储空间(除了输入数据本身)。这样的算法通过修改输入数据本身来得到结果,从而避免额外的空间开销。
  4. 迭代代替递归

    • 递归算法通常会占用较多的栈空间,因为每次函数调用都会在栈上保存状态。如果可能,可以将递归算法转化为迭代算法,以减少空间复杂度。
  5. 空间复用

    • 在某些情况下,可以通过精心设计的算法来复用存储空间,例如使用滚动数组来模拟多个数组的行为,但只使用一个数组的空间。
  6. 优化数据结构操作

    • 对于复杂的数据结构(如树、图等),优化其操作(如插入、删除、查找等)以减少空间的使用。例如,使用平衡树来保持树的深度较小,从而减少递归或存储所需的空间。
  7. 利用数据特性

    • 如果输入数据具有某些特性(如有序性、稀疏性等),可以利用这些特性来减少空间复杂度。例如,对于有序数据,可以使用二分查找等高效算法来减少空间使用。
  8. 压缩存储

    • 如果允许一定的误差或近似解,可以使用压缩存储技术来减少空间复杂度。例如,使用浮点数近似表示实数,或使用有损压缩算法来存储数据。

需要注意的是,优化空间复杂度可能会以牺牲时间复杂度为代价。因此,在实际应用中,需要综合考虑空间和时间复杂度之间的权衡,并根据具体问题的需求来选择合适的优化策略。同时,还需要注意算法的正确性和稳定性,避免因为优化而引入新的错误或不稳定因素。

总结

通过本文的介绍,我们深入了解了Python算法的空间复杂度的概念、类型及优化思路。

空间复杂度作为算法性能的重要评价指标,对于编写高效、资源友好的程序具有重要意义。

我们学习了如何区分空间复杂度和时间复杂度,并通过类比的方式加深了对两者关系的理解。

同时,我们还探讨了常见的空间复杂度类型,包括常量空间复杂度、线性空间复杂度等,并提供了相应的现实生活中的类比案例。

在优化算法的空间复杂度方面,我们讨论了选择合适的数据结构、避免不必要的存储、使用原地算法等策略。这些策略可以帮助我们在保持算法效率的同时,减少程序所需的存储空间。

总的来说,掌握空间复杂度的概念和方法对于提升Python编程水平至关重要。

通过本文的学习,相信读者已经对空间复杂度有了更加深入的理解,并能够在实际编程中灵活运用相关知识,编写出更加高效、优雅的Python程序。

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

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

相关文章

最短路-Floyd Dijkstrea

Floyd算法 一种求解“多源最短路”问题的算法 在Floyd算法中,图一般用邻接矩阵存储,边权可正可负(但不允许负环),利用动态规划的思想,逐步求解出任意两点之间的最短距离 int d[N][N],初始为无穷 d[i][j…

拌合楼管理软件开发(十三) 对接耀华XK3190-A9地磅(实战篇)

前言: 实战开整 目前而言对于整个拌合楼管理软件开发,因为公司对这个项目还处于讨论中,包括个人对其中的商业逻辑也存在一些质疑,都是在做一些技术上的储备.很早就写好了串口与地磅对接获取代码,也大概知道真个逻辑,这次刚好跟库区沟通,远程连接到磅房电脑,开始实操一下. 一、地…

【C++】反向迭代器

一、前言 在前面对vector等容器的学习中,我们学会了如何去使用正向迭代器并模拟实现 但是我们没有去模拟实现反向迭代器,这篇文章中我们就来了解反向迭代器的底层并实现它,把之前的坑给填上。 二、反向迭代器 反向迭代器的底层设计十分精妙…

python统计分析——灵敏度、特异度和ROC曲线

参考资料:python统计分析【托马斯】 1、灵敏度和特异度 灵敏度:也叫作效能。被检验正确识别出来的阳性结果(病人中有疾病且检验结果是阳性的概率)。 特异度:被检验正确识别出来的阴性结果(病人健康且检验结…

大模型融合方法-DARE

LLM在SFT之后会产生大量的冗余参数(delta参数),阿里团队提出DARE方法来消除delta参数,并将其合并到PRE模型中,从而实现多源模型能力的吸收。 DARE无需GPU重新训练,其思路非常简单,就跟dropout类似: m t ∼…

针对pycharm打开新项目需要重新下载tensorflow的问题解决

目录 一、前提 二、原因 三、解决办法 一、前提 下载包之前,已经打开了,某个项目。 比如:我先打开了下面这个项目: 然后在terminal使用pip命令下载: 如果是这种情况,你下载的这个包一般都只能用在这一个…

自动驾驶轨迹规划之时空语义走廊(一)

欢迎大家关注我的B站: 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.摘要 2.系统架构 3.MPDM 4.时空语义走廊 ​4.1 种子生成 4.2 具有语义边界的cube inflation ​4.3 立方体松弛 本文解析了丁文超老师…

如何计算KST指标,昂首资本一个公式计算

在上一篇文章中,Anzo Capital昂首资本和各位投资者一起了解了KST指标,今天我们继续分享如何计算KST指标。 首先投资者可以在时间范围9、12、18和24分析变化率值。 前三个值(时间帧9、12、18)用EMA 26平滑,最后一个值用EMA 39平滑。 然后&…

从0开始搭建基于VUE的前端项目

准备与版本 安装nodejs(v20.11.1)安装vue脚手架(vue/cli 5.0.8) ,参考(https://cli.vuejs.org/zh/)vue版本(2.7.16),vue2的最后一个版本 初始化项目 创建一个git项目(可以去gitee/github上创建&#xff…

数据分析之POWER Piovt透视表分析

将几个数据表之间进行关联 生成数据透视表 超级透视表这里的字段包含子字段 这三个月份在前面的解决办法 1.选中这三个月份,鼠标可移动的时候移动到后面 2.在原数据进行修改 添加列获取月份,借助month的函数双击日期 选择月份这列----按列排序-----选择月…

搜索与图论——Dijkstra算法求最短路

最短路算法 稠密图与稀疏图 n为点数,m为边数。m远小于n的平方为稀疏图,m接近n的平方为稠密图。 稀疏图用邻接表存,稠密图用邻接矩阵存 朴素版dijkstra时间复杂度为O(n^2),对于稠密图可以ac,但遇到稀疏图时会TLE。 dijkstra函数实…

Linux权限管理

文章目录 linux权限管理1.Linux权限的概念2.Linux权限管理2.1 文件访问者的分类(人)2.2 文件类型和访问权限(事物属性)2.2.1 文件类型2.2.2 基本权限 2.3文件权限值的表示方法2.3.1 字符表示方法2.3.2 八进制数值表示方法 2.4 文件…

CV领域 交叉注意力(Cross Attention)中QKV的含义理解

交叉注意力公式: 注意力的输入: (1)KV:图像的全局特征 (2)Q:告诉attention需要关注哪些重要特征 公式计算过程理解: (1):Q和K相乘…

后疫情时代CS保研沉思录暨2023年个人保研经验贴

个人情况 正如古话所说,最适合你的才是最好的。因此这里先贴上个人基本情况,用作参考。 如果你的个人情况与我相近,则有更强的参考作用。如果情况相差较大,也可以姑且引为例子来研究。 学校层次:中流至末流211 专业…

C之易错注意点转义字符,sizeof,scanf,printf

目录 前言 一:转义字符 1.转义字符顾名思义就是转换原来意思的字符 2.常见的转义字符 1.特殊\b 2. 特殊\ddd和\xdd 3.转义字符常错点----计算字符串长度 注意 : 如果出现\890,\921这些的不是属于\ddd类型的,,不是一个字符…

把本地文件上传到HDFS上操作步骤

因为条件有限,我这里以虚拟机centos为例 实验条件:我在虚拟机上创建了三台节点,部署了hadoop,把笔记本上的数据上传到hdfs中 数据打包上传到虚拟机节点上 采用的是rz命令,可以帮我们上传数据 没有的话可以使用命令安装…

那个男人开发了一个多账号浏览器

核心价值1:实现了一个浏览器同时登录多个账号,标签页之间信息不共享核心价值2:聚焦于账号管理,所有需要登录多账号都用这个浏览器减轻了找入口的烦恼核心价值3:赏心悦目核心价值4:悬浮功能核心价值5:PC和手机模式一键切换核心价值6:不同于浏览…

Redis 全景图(1)--- 关于 Redis 的6大模块

这是我第一次尝试以长文的形式写一篇Redis的总结文章。这篇文章我想写很久了,只是一直碍于我对Redis的掌握没有那么的好,因此迟迟未动笔。这几天,我一直在看各种不同类型的Redis文章,通过阅读这些文章,引发了我对于Red…

DolphinScheduler on k8s 云原生部署实践

文章目录 前言利用Kubernetes技术云原生平台初始化迁移基于Argo CD添加GitOpsDolphinScheduler 在 k8s 上的服务自愈可观测性集成服务网格云原生工作流调度从HDFS升级到S3文件技术总结 前言 DolphinScheduler 的高效云原生部署模式,比原始部署模式节省了95%以上的人…

【论文通读】AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation

AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation 前言AbstractMotivationFrameworkConversable AgentsConversation Programming ApplicationA1: Math Problem SolvingA2: Retrieval-Augmented Code Generation and Question AnsweringA3: Decision…