算法设计与分析(含刷题)
文章平均质量分 90
StarPrayers.
靡不有初,鲜克有终。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Adam 算法(Adaptive Moment Estimation)
摘要:Adam算法(Adaptive Moment Estimation)是深度学习中广泛使用的优化算法,由Kingma和Ba于2014年提出。它融合了动量法和RMSProp的优点,通过自适应调整每个参数的学习率实现高效训练。算法核心是同时跟踪梯度的一阶矩(均值)和二阶矩(方差),并据此调整学习率:梯度波动大的参数减小学习率,波动小的增大学习率。Adam具有收敛快、自适应性强、鲁棒性好等优点,但也存在可能陷入局部极小值等缺点。适用于大规模数据集、深层网络等场景。文中还给出了数学推导、Python实现示例和框原创 2025-11-06 08:00:00 · 2231 阅读 · 0 评论 -
旅行商问题(TSP)(4)(Lab_test.py)(TSP 项目的测试验证体系)
该文章介绍了一个完整的旅行商问题(TSP)测试方案,主要包含以下内容: 测试框架采用分层验证: 先测试基础类(Point和Route) 再测试两种启发式算法(最近邻和最近插入) 测试用例设计: 简单"5点用例":手动计算预期结果,便于调试 复杂"美国首府用例":验证算法在大规模数据下的表现 核心功能: 结果对比功能:自动比较预期和实际结果 可视化输出:生成路径PDF图 异常处理:文件缺失时的容错机制 测试控制: 通过TEST_NI全局变量一键切换测试算法 使用深拷贝保原创 2025-10-14 10:36:41 · 696 阅读 · 2 评论 -
旅行商问题(TSP)(3)(decorator.py)(TSP 项目的 “时间统计与属性注入” 工具)
本文介绍了TSP项目中用于统计和显示算法运行时间的display_time装饰器。该装饰器在不修改算法函数代码的前提下,实现了运行时间统计、结果打印和属性注入三大功能:通过time.time()计算算法运行时间,保留6位小数;自动为返回的Route对象注入算法名和运行时间属性;打印算法执行结果。装饰器使用@wraps(func)保留原函数元信息,并返回包含Route对象和运行时间的元组,确保与原有代码兼容。这种设计简化了代码结构,避免了重复逻辑,提高了可维护性,同时支持后续可视化展示需求。原创 2025-10-14 09:47:46 · 804 阅读 · 0 评论 -
旅行商问题(TSP)(2)(heuristics.py)(TSP 的两种贪心启发式算法实现)
该系列文章详细讲解了旅行商问题(TSP)的两种贪心启发式算法实现。第一篇介绍TSP问题的点与路径核心类;第二篇重点阐述最近邻算法和最近插入算法,通过代码解析和步骤拆解展示算法实现;第三篇构建测试验证体系;第四篇开发时间统计与属性注入工具。两种算法各具特点:最近邻算法简单快速但易陷入局部最优;最近插入算法通过优化插入位置可获得更优解,但计算量稍大。文章还介绍了装饰器的应用,实现自动时间统计和属性注入,提升代码复用性。原创 2025-10-13 23:03:48 · 833 阅读 · 0 评论 -
旅行商问题(TSP)(1)(Route.py)(TSP 问题中的点与路径核心类)
该系列文章围绕旅行商问题(TSP)展开,分为四部分:1.定义核心类Point和Route,封装点坐标和路径操作;2.实现两种贪心算法(最近邻和最近插入算法);3.构建测试验证体系;4.开发时间统计工具。其中重点介绍了Point类(坐标存储、距离计算等)和Route类(路径管理、可视化等)的实现细节,包括特殊方法如__eq__对环状路径等价性的判断。文章通过Python代码展示了如何为TSP问题构建基础数据结构,为后续算法实现奠定基础,同时强调了测试验证和性能分析的重要性。原创 2025-10-13 20:46:59 · 2040 阅读 · 0 评论 -
回溯法——(2)n皇后问题(C语言讲解)(LeetCode51 N皇后思想)(4皇后棋盘画图举例)(附代码)
n皇后问题是19世纪著名数学家高斯于1850年提出的。问题是:在n×n的棋盘上摆放n个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。原创 2024-05-17 20:22:06 · 5533 阅读 · 0 评论 -
回溯法——(1)装载问题(C语言讲解)
有一批共n个集装箱要装上2艘载重量分别为c1和c1的轮船,其中集装箱i重量为wi,且装载问题要求确定是否有一个合理的装载方案可将这一批集装箱装上这2艘轮船。如果有,找出一种装载方案。原创 2024-04-30 08:57:10 · 4583 阅读 · 0 评论 -
Leetcode509——斐波那契数(C语言)
斐波那契数列是计算机科学中最著名的数列之一,而LeetCode 509题正是以此为基础的一道经典编程题目。在这个问题中,我们需要实现一个函数,计算斐波那契数列的第n项。这一题不仅考验我们对斐波那契数列的理解,还测试了我们编写高效算法的能力。原创 2024-04-01 20:15:24 · 502 阅读 · 0 评论 -
(使用C语言详解)求一个集合的全部子集(leetcode编程笔记)
这个算法的关键在于理解如何使用二进制数来表示和生成子集。每个子集都可以通过改变tag的某一位来得到下一个子集。当tag的某一位被设置为1时,表示对应数组元素被包含在子集中;当该位被设置为0时,表示对应元素不被包含。通过这种方式,我们可以遍历所有可能的子集。原创 2024-03-23 21:30:16 · 3160 阅读 · 1 评论 -
Leetcode70——爬楼梯(斐波那契类型)(C语言)(通过该问题讲解动态规划基本思想)
Fibonacci数列的例子可以得到,动态规划的关键在于解决重叠子问题的重复计算,将原来指数级复杂度的分治算法改进多项式级的计算。在实现过程中,动态规划算法需要存储各子问题的解,所以它的空间复杂度大于其他算法,这是一种空间换时间的策略。原创 2024-03-29 15:34:03 · 2086 阅读 · 0 评论
分享