- 博客(24)
- 收藏
- 关注
原创 链表和数组
Python中数组(list)和链表的实现区别显著:list基于连续内存块,支持O(1)随机访问但插入/删除可能需搬移元素;链表需自定义节点类,插入/删除高效但访问需遍历。主要差异:1. 数组擅长随机访问(O(1)),链表在头尾操作更优(O(1));2. 数组空间局部性好但偶发扩容成本高,链表无扩容但内存分散;3. Python的collections.deque可作为高效链表替代。实际选择需根据具体操作频率权衡时间复杂度与空间开销。
2025-10-11 21:47:04
498
原创 Python容器内存三要素
list是一个特殊情况,它本身并不将所有对象连续存储,而是存储指向各个Python对象的引用,这些引用本身存储在连续内存中。所有在代码中创建的对象,例如list、dict、MyClass实例,都是在运行时由解释器从堆内存中动态申请的。在Python中,随机访问指的是通过索引直接获取容器中任意位置元素的能力,这个操作的时间是恒定的,与容器的大小无关。list的连续性体现在引用数组上,而str和tuple的连续性体现在它们的数据本身。连续内存指的是对象将其数据元素一个接一个地存储在一块完整的内存区域中。
2025-10-10 21:31:08
884
原创 常见排序算法
本文介绍了6种经典排序算法及其Python实现:1)冒泡排序(最好O(n),最坏O(n²)),适合小数据;2)选择排序(固定O(n²)),适合交换少的场景;3)插入排序(最好O(n)),适合近乎有序的数据;4)快速排序(平均O(nlogn)),适合大规模数据;5)归并排序(稳定O(nlogn)),需要额外空间;6)堆排序(原地O(nlogn)),保证最坏性能。每种算法都给出了代码实现、时间/空间复杂度分析及适用场景,涵盖从基础教学到工程应用的不同需求。
2025-10-04 23:34:31
597
原创 python评估算法性能
算法复杂度与性能评估摘要 本文系统介绍了算法性能评估的核心指标与方法。时间复杂度分析着重大O表示法,从最优的O(1)到最差的O(n!),通过代码示例展示了不同复杂度算法的特征。空间复杂度则关注内存使用增长趋势,包括常数、线性、平方和对数空间需求。实践部分提供了Python测评工具:timeit模块精确测量执行时间,memory_profiler分析内存占用,并通过线性搜索与二分搜索的对比实验,演示了完整性能评估流程。结果表明,随着数据规模增大,O(logn)的二分搜索显著优于O(n)的线性搜索(万级数据时快
2025-10-03 23:35:57
679
原创 python的高阶函数
本文介绍了Python中的高阶函数概念及其常见应用。高阶函数是指能够接收函数作为参数或返回函数作为结果的函数,体现了Python函数作为一等公民的特性。主要内容包括:1)map函数对可迭代对象每个元素应用指定函数;2)filter函数根据条件过滤元素;3)reduce函数进行累积计算;4)sorted函数自定义排序规则;5)如何自定义高阶函数(接收函数参数或返回函数)。此外还展示了装饰器作为高阶函数的应用实例。掌握这些高阶函数技巧有助于编写更优雅高效的Python代码。
2025-09-24 23:15:25
600
1
原创 python基本程序要素
Python编程基础摘要:Python程序由变量、数据类型、运算符、控制流、函数、数据结构等核心要素构成。变量作为数据容器无需声明类型,支持字符串、整数、浮点数等基本数据类型。运算符包括算术、比较和逻辑运算。控制流通过if条件语句和for/while循环实现流程控制。函数使用def定义,支持参数传递和返回值。列表和字典是常用的数据结构,分别存储有序集合和键值对。输入输出通过input()和print()实现,注释用#或三引号编写。最后通过一个猜数字游戏示例,展示了这些要素的综合应用。
2025-09-23 23:51:11
764
1
原创 python语言中的常用容器(集合)
Python内置容器包括列表(可变有序)、元组(不可变有序)、集合(可变无序去重)和字典(可变键值对)。collections模块扩展了这些功能,提供了命名元组(增强可读性)、双端队列(高效两端操作)、计数器(元素统计)和默认字典(自动初始化)。NumPy数组则支持高效数值计算和向量化操作,具有广播机制和丰富数学函数,适用于科学计算。这些容器和工具各有特点,满足不同场景需求,是Python编程的重要基础。
2025-09-21 14:22:10
3094
1
原创 灰狼优化算法GWO
本文介绍了灰狼优化算法(GWO),这是一种受灰狼社会等级和捕猎行为启发的元启发式优化算法。算法通过模拟alpha、beta、delta和omega四种狼的社会层级,以及包围、追捕和攻击三个主要狩猎步骤进行优化。实验表明,GWO在29个测试函数和工程设计问题上优于PSO、GSA等算法。文章详细阐述了GWO的数学模型、算法流程,并提供了Python实现方案,测试了Sphere、Rastrigin等函数的优化效果。结果显示GWO具有较好的全局搜索能力和收敛性,适用于复杂优化问题。
2025-09-20 21:34:40
1547
原创 元启发式算法分类
最近讲了很多元启发式算法,但是没有一个目录或者指南,无法为每个算法归类,今天写一篇类似综述的文章,为这些算法分一下类。元启发式算法可分为三大类:进化算法(evolutionary)、基于物理算法(physics-based)和 SI 算法(依次讲解一下。
2025-09-19 17:05:07
2601
原创 遗传算法(GA)
摘要:遗传算法是一种模仿自然进化过程的启发式优化算法,通过编码将问题解转化为染色体,利用选择、交叉和变异等遗传操作逐代优化种群。以TSP问题为例,Python实现展示了算法的核心流程:初始化种群后,计算适应度(路径距离倒数),通过轮盘赌选择父代,采用顺序交叉和交换变异生成子代,最终收敛到近似最优解。实验结果表明该算法能有效求解组合优化问题,收敛曲线和路径可视化验证了其优化能力。
2025-09-18 15:12:39
598
原创 人工蜂群算法(ABC)
人工蜂群算法(ABC)是一种模拟蜜蜂觅食行为的群体智能优化算法。该算法包含三种蜂群角色:侦察蜂负责随机探索新解,雇佣蜂维护现有解并吸引跟随蜂,跟随蜂通过轮盘赌选择优质解进行局部搜索。算法流程包括初始化、雇佣蜂阶段、跟随蜂阶段和侦察蜂阶段,通过贪婪选择机制不断优化解的质量。实验采用Rastrigin测试函数验证算法性能,结果表明ABC能有效寻找全局最优解。算法创新性地结合了随机探索、局部搜索和最优解保留机制,在函数优化等领域具有良好应用价值。
2025-09-17 14:12:54
1491
原创 蚁群算法(ACO)
蚁群算法(ACO)是一种模拟蚂蚁觅食行为的智能优化算法,通过信息素正反馈机制寻找最优解。算法核心流程包括:1)蚂蚁根据信息素浓度和启发式信息随机选择路径;2)完成路径后更新信息素(优质路径增强,所有路径挥发);3)迭代优化直到收敛。本文以TSP问题为例,详细阐述了算法原理,并提供了Python实现代码,展示了5个城市路径优化的具体过程。实验结果表明,该算法能有效收敛到较优解,收敛曲线验证了算法的有效性。
2025-09-14 13:25:10
2939
原创 粒子群算法PSO
粒子群算法(PSO)是一种基于群体智能的优化算法,模拟鸟群觅食行为,通过个体间信息共享寻找最优解。算法中,每个粒子(代表一只鸟)根据当前位置、个体历史最优和全局最优来更新速度和位置。本文以二维Ackley函数最小化问题为例,使用Python实现了PSO算法,设置20个粒子在[-5,5]范围内进行30次迭代搜索。实验结果显示PSO能有效找到接近理论最优解(0,0)的位置,并提供了可视化动画展示粒子群的搜索过程。该算法简单高效,适用于各类优化问题。
2025-09-13 16:29:50
1414
原创 变邻域下降算法VND
变邻域下降(VND)是一种局部搜索元启发式算法,通过系统切换不同邻域结构来避免陷入局部最优解。该算法在TSP问题中应用了交换、插入和2-opt三种邻域操作,从简单到复杂依次尝试。实验结果显示,VND能有效改进初始解的质量,但相比全局搜索算法更耗时。算法流程包括:生成初始解、在多个邻域中寻找最佳改进解、不断迭代直到无法改进为止。测试案例使用15个随机生成的城市,验证了VND在路径优化问题中的有效性。
2025-09-11 14:41:30
550
原创 变邻域搜索算法(VNS)附python
变邻域搜索(VNS)是一种元启发式算法,通过系统改变邻域结构来避免局部最优。其核心包含多个邻域结构(如交换、2-opt等)、局部搜索和扰动机制,在搜索中交替使用不同邻域。文中以TSP问题为例,展示了VNS的实现流程:首先生成初始解,然后通过扰动(如随机交换)和局部搜索(2-opt)迭代优化,最终输出最优路径。实验结果表明,VNS能有效跳出局部最优,收敛到质量更高的解。该方法通过分层搜索策略,兼顾了探索和开发的平衡。
2025-09-10 20:10:33
801
原创 大邻域搜索算法(LNS)
大邻域搜索(LNS)是一种用于求解近似最优解的元启发式算法。它的核心思想是迭代地对当前解进行“破坏”和“修复”:首先随机移除当前解的一部分(破坏),然后在被破坏的解的基础上,重新以更优的方式填充被移除的部分(修复),从而有可能找到一个更好的新解。所谓破坏,除了可以瞎破坏,随机破坏外,我们更多可以有指向性的破坏,移除掉解中影响整体表现的部分,再将这些部分重新有引导性地组合,即是所谓修复。想象一下你在玩一个拼图游戏:传统局部搜索(小邻域):就像每次只尝试交换相邻的两块拼图。
2025-09-09 16:10:56
1755
原创 禁忌搜索算法(python、C++代码)
禁忌搜索是一种启发式优化算法,通过允许暂时接受较差解来跳出局部最优。其核心在于使用禁忌表避免重复搜索,并通过藐视准则保留优质解。文章以TSP问题为例,展示了禁忌搜索的实现:随机生成初始路径,通过交换城市生成邻域解,利用禁忌表控制搜索方向,最终找到最优路径。实验结果表明,禁忌表长度和邻域策略对算法效果至关重要。该算法相比模拟退火更智能,但需要合理设置参数以避免过早收敛。可视化展示了算法收敛过程和最优路径结果。
2025-09-07 22:40:09
935
原创 A*与Dijkstra在二维网格化空间中实现代码(python)
填一下前面的坑,将这类算法的经典代码放上来。本文代码均已测试,没有bug。想要了解两种算法原理的读者可以参考。
2025-09-06 16:17:07
462
原创 模拟退火算法(附python,C++代码)
什么是退火?在冶金中,为了消除金属内部的应力,使其变得更坚韧,工匠会先将金属加热到极高的温度(原子处于高能、无序状态),然后缓慢地降温(冷却)。在这个缓慢的降温过程中,原子有足够的时间找到能量更低的稳定排列状态,最终形成结构完整的晶体。很难懂对吧,其实,在我看来也可以类比做铸剑或者造其他铁器的过程。铸剑肯定是拿通红的铁块甚至液体熔铁开始。这时候温度高,所以铁具有可塑性,可以被打造成任何样子。我们逐步往🗡剑的形状去敲击的时候,肯定会出现敲错的地方,但好在温度高,我们依然可以将它回正。
2025-09-05 13:45:37
1101
原创 爬山算法(附python、C++代码)
爬山算法只适用于在一个大的搜索策略内部的局部搜索阶段使用,其本身的准确性一般,经常会找不到最优解,甚至离最优解较远,所以不建议直接使用。作为局部搜索模块融合进其他算法或者可以尝试改造后的爬山算法,例如随机重启爬山法(Random Restart):通过多次随机初始化避免陷入局部最优,或者使用增加退火机制的爬山算法等等。%201。
2025-09-04 15:22:30
489
原创 寻路算法——A*与Dijkstra(广度优先搜索、贪心算法)
本文大量图片来自网站,阅读完本文后,再移步至该网站看带动画版对比讲解。代码版本之后再出,本文不涉及代码,只是讲解原理。两种算法均为最经典的寻路算法,有很强的适应性和可塑性,对于不同领域的特殊问题稍作改造均能发挥其价值。两种算法各有优劣,且听我娓娓道来。开始之前我们需要明白几个概念。第一点对于寻路算法来说,我们一般会将地图中的重要节点标出来,我们的目的是找到“最好的”。那么如何找到节点?对于部分情形来说,节点是天然就有的。
2025-09-03 14:43:21
1873
原创 启发式算法——开篇
本文介绍了启发式算法的基本概念及其应用场景。启发式算法是一种基于经验的近似问题解决方法,适用于计算复杂度高或难以精确求解的问题(如经典的旅行商问题)。文章通过对比求导方法和启发式算法,说明后者在解决复杂优化问题时的优势,特别是当问题规模庞大时,能在合理时间内找到相对最优解。文中以贪心算法为例,解释了启发式算法的核心思想(局部最优逼近全局解)及其局限性(易陷入局部最优陷阱)。最后指出启发式算法本质上是一种"科学遍历"方法,具有迭代性、适应性和近似性特点。
2025-09-02 16:40:25
1055
原创 装箱问题的多层树搜索算法
《三维装箱问题的多层树搜索算法》摘要 刘胜等提出了一种基于多层树搜索的三维装箱优化算法。该算法将复杂装箱问题分解为四个层级:箱→片→条→层→实体,逐层优化空间利用率。核心思想包括:1)采用四叉树生成x/y/z三种片结构;2)通过一维背包算法组合最优条;3)利用深度优先搜索构建最佳层;4)三叉树搜索生成最终实体布局。算法严格遵循摆放方向约束和完全支撑约束,通过分层递进式搜索替代启发式方法,在保持结构规整性的同时实现空间最大化利用。实验表明,该方法在解决带约束的三维装箱问题上具有显著优势。
2025-09-01 18:12:55
1081
原创 2D 矩形布局问题的天际线启发式算法
该算法来源于欧洲运筹学杂志(European Journal of Operational Research),发表于2011年,论文标题为A skyline heuristic for the 2D rectangular packing and strip packing problems。提出了一种使用天际线表示填料的二维矩形堆积问题(2DRP)的贪心算法;在简单的禁忌搜索方法中使用这种启发式方法。
2025-08-31 18:19:32
1474
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅