- 博客(340)
- 收藏
- 关注
原创 dijstra模板
path=[-1]*len(graph) #path[node2]=node1:到node2的最短路路径(从起点到node的最短路)中,其前一个节点是node1。dist=[float("inf")]*len(graph) #dist[node]:从起点到node的最短路距离。# 最短距离: [inf, 4, 6, 0, 5, 7, 5, 8]# 前驱路径: [-1, 3, 1, -1, 1, 4, 3, 5]path[3]=-1 #-1:表示路径不存在。pq=[(0,3)] #(距离,节点)
2025-06-17 01:20:35
166
原创 【代码坏味道】无用物Dispensables
提取变量提取方法重命名方法引入断言内联类合并继承结构封装字段封装集合提取方法移动方法移除设置方法隐藏方法删除参数内联类折叠继承结构。
2025-05-31 18:55:28
1003
原创 【代码坏味道】变更阻碍者Change Preventers
当你修改一个类的时候,发现这个类里很多不相关的方法都要改,就说明这个类的职责太杂了!🧠 举个例子:你加一个产品类型,却要修改同一个类中用于查找、显示、下单的多个方法。你要加个新功能或改个逻辑,结果需要同时改好几个类里的一小部分,像打霰弹枪一样“到处改”。🧠 举个例子:想改个价格逻辑,结果 Product 类、Cart 类、Order 类都要动。当你给某个类添加一个子类时,发现另一个相关的类也必须添加对应的子类,两个继承结构就像“并排走路”。Animal->CatDog同时->只要新增Fish。
2025-05-31 17:08:00
426
原创 【代码坏味道】面对对象的泛滥者Object-Orientation Abusers
如果你写了很长的或if-else结构,很容易出问题。每加一种判断条件,就要改很多地方,难维护。有些类里的变量,只在特定情况下有值,大多数时候是空的。这些就是“临时字段”。你写了一个子类,它继承了父类,但只用了父类的一部分功能,很多继承的方法根本没用上,甚至要手动重写。你发现两个类做的事一模一样,但方法名不一样。坏味道表现怎么办Switch 语句写很多 case 分支用“子类”或“策略模式”代替临时字段变量只偶尔才用拆到新类里,或用空对象拒绝继承子类没用多少父类的东西。
2025-05-31 16:50:47
881
原创 【代码坏味道】膨胀类 Bloaters
一个函数(方法)写得太长了,比如超过了10 行代码,就要开始警惕了。一个类(类似于一块代码模块)里面包含太多变量、方法、代码行。就是你过度使用 int、string 这些基本类型,而不愿意封装成对象。电话号码用 string,金额用 float,而不是专门建个或Money类。用常量1, 2, 3来表示权限等级,而不是定义角色类。如果一个方法需要传超过 3~4 个参数,那就太多了。如果你在多个地方看到总是成组出现的变量。
2025-05-31 16:04:32
701
原创 【二维区域重叠判断】简易画图程序设计说明
本文介绍了一个简易画图程序PbrushSystem的设计与实现。程序包含一个100×100的方格画布,提供三个核心功能:绘制矩形(drawRectangle)、擦除区域(eraseArea)和查询最小覆盖面积(queryArea)。其中,绘制矩形需检查边界和重叠,擦除区域会删除所有重叠矩形,最小覆盖面积计算所有矩形的最小包围矩形面积。程序通过Python类实现,采用列表存储矩形信息,并在操作时进行边界和重叠检测。示例展示了初始化、绘制、擦除和查询功能的使用场景及正确输出。
2025-05-29 09:15:33
11
原创 【内存桶的利用】【二维字典嵌套堆】【难】选择最匹配内存部署虚拟机
本文讨论了云计算中的虚拟机部署调度问题。给定一组物理服务器(内存初始容量数组capacities)和虚拟机请求数组requests,需要按规则为每个请求分配服务器:优先选择可用内存最小且编号最小的服务器,若无满足条件的则返回-1。文章通过示例说明规则,并提供了基于堆和桶排序的Python实现方案,将服务器按内存分组管理以提高调度效率。算法首先将服务器按内存容量分组存储,处理请求时遍历可能的容量组,从满足条件的组中选择合适服务器,更新剩余容量后重新分组。该方法有效解决了大规模服务器场景下的快速调度问题。
2025-05-28 22:37:21
15
原创 【引入时限桶】【逐秒更新桶(含移位)】【通过时限和消息块计算最小需求】【难难】弹性扩缩容调度系统
本文设计了一个弹性扩缩容调度系统(ScalingSys),用于处理生产者-消费者模型中的消息队列,确保每条消息在5秒内完成处理。系统通过5个时限桶(1-5秒)动态跟踪消息量,新消息到达时优先处理历史消息并清除1秒桶内的过期消息,再将新消息放入5秒桶。根据各桶累积消息量,结合机器处理能力,计算所需最小机器数,公式为 max(ceil(累计消息 / (capability × 剩余时限)))。系统实时监控负载,动态调整机器数量,以满足SLA要求并最小化资源消耗。
2025-05-28 15:37:42
14
原创 【二分check函数】志愿者配送最短时间优化
摘要: 该问题要求在志愿者并行配送且限制条件下,优化社区蔬菜配送的最短完成时间。关键点包括:每位志愿者只能负责连续社区,目标是最小化最大配送时长(即各志愿者任务时长的最大值)。采用二分查找+贪心验证的算法:通过二分确定时间上限,贪心检查在该上限内能否用不超过给定志愿者人数完成配送。算法时间复杂度为O(n log sum),适用于大规模数据。示例表明,该方法能有效找到最优解。
2025-05-26 14:41:09
7
原创 【非常规层序数组建树】【迭代逐层处理】【难】最少计算周期(表达式计算调度)
题目要求计算给定二叉树表达式在coreCount个CPU核心下完成运算的最少时间周期。每个运算符节点需等待两个子节点计算完成后才能执行,每次周期可并行调度不超过coreCount个可计算节点。解法核心包括:建树:通过非传统层序遍历数组建立父子关系,并标记可计算节点属性(子节点均为操作数);拓扑调度:每次选取可计算节点逆序处理,模拟并行计算,更新父节点的可计算状态;周期统计:每轮处理最多coreCount个节点,累计周期数直至根节点完成。
2025-05-22 23:45:15
14
原创 【基于临界表的dfs路径搜索+路径过滤判断】【难】寻找最优和谐程序组
本文介绍了如何寻找计算机系统中的最优和谐程序组,即在满足互斥约束条件下选择程序数量最多且总运行时间最小的组合。问题转化为在无向图中寻找最大独立集并优化总运行时间。输入包括程序运行时间数组和互斥对列表,输出为最优组合的运行时间之和。示例展示了具体计算过程,并提供了基于DFS的回溯解法,通过枚举所有可能子集并进行剪枝优化来解决问题。该算法适用于最多20个程序的小规模场景,通过排序筛选出符合条件的最优解。
2025-05-21 10:20:18
15
原创 【基于访问先后索引顺序的缓存pop=>提高缓存命中】【难】最少数据库访问次数(模拟缓存机制)
本文摘要:题目要求模拟一个使用FIFO缓存机制的数据访问过程,统计最少需要访问数据库的次数。缓存规则为:命中缓存时不访问数据库,未命中时需访问数据库并将数据加载到缓存(若缓存已满则按FIFO策略移除旧数据)。输入包括缓存大小和访问序列,输出数据库访问次数。示例演示了当缓存大小为2时,对序列[1,2,3,1,2,3]的访问过程,共需4次数据库访问。解题关键在于正确实现FIFO缓存替换策略,可使用队列或有序字典来维护缓存内容,统计未命中次数即为所求答案。
2025-05-20 16:49:54
8
原创 【while递归】【难】解析TLV码流中的非嵌套内容
本文提出两种Python解法,用于解析TLV(Tag-Length-Value)码流中的非嵌套内容。TLV格式包含2字节Tag(判断嵌套类型)、4字节Length和可变长度Value。解法通过递归处理嵌套结构:当Tag最高位为0时输出字符串内容,为1时递归解析嵌套TLV。两种解法均将十六进制流按字节分割,使用递归遍历不同层级的节点,并按"level:content"格式收集非嵌套节点的字符串值。解法1采用外部列表收集结果,解法2通过递归函数返回结果列表。两种方法都能正确处理多层嵌套结构,
2025-05-20 16:48:32
15
原创 DPPO并行近端策略优化算法详解
有 N_WORKER 位冒险者(Worker 线程)在打怪刷经验;3)导师教完新技能(更新PPO),再敲钟让冒险者继续刷怪。2)村长看到经验积累够多了,就敲钟通知导师(更新线程)。1)他们把经验都交给村长(数据队列)。
2025-05-14 01:40:58
839
原创 【BFS最短步数】零售店到仓库的最小距离和
这篇摘要描述了一个零售网络布局问题:在二维矩阵中,零售店(1)需要找到最近的仓库(0)并计算最小距离总和,障碍物(-1)不可通行。使用多源BFS从所有仓库出发,在扩展过程中更新零售店的最短距离。无法到达的零售店不计入总和,若无有效零售店或仓库则返回0。示例展示了具体计算过程,并提供了BFS解法的Python代码框架,通过遍历矩阵对每个零售店进行BFS搜索,累加最短距离得到结果。
2025-05-12 19:52:21
8
原创 【邻接矩阵+dijkstra】计算两个路由器之间的最小时延
摘要:题目要求计算网络中两个路由器之间的最小通信时延,给定路由器数量、连接关系和时延数据。这是一个加权无向图的最短路径问题,可使用Dijkstra算法解决。输入包括路由器数量、连接列表和源/目标路由器编号,输出最小时延或-1(若不连通)。示例展示了典型输入输出情况,Python实现采用邻接表存储图结构,优先队列优化Dijkstra算法,时间复杂度为O(E + VlogV)。关键点包括图的构建、距离初始化和松弛操作处理。
2025-05-12 18:10:06
6
原创 【区间合并+转化上下车计数问题】【难】统计恰好一台服务器空闲的时段
本文摘要:题目要求统计服务器任务运行期间,恰好仅有一台服务器空闲的时间段。给定服务器数量和任务列表(每个任务包含开始时间、结束时间和服务器编号),需合并连续时段并返回升序排列的结果。通过分类合并任务、标记时间节点事件及计数当前忙碌服务器数量,可以高效识别满足条件的时间段。算法关键步骤包括任务分类、时段合并、事件标记和忙碌服务器计数,最终处理连续区间合并问题。Python实现展示了如何通过扫描线思想解决该问题,时间复杂度为O(n log n)。
2025-05-12 17:03:20
13
原创 【vis多维属性】【bitmap二进制+位运算=累计状态更新】【BFS最短步数】【难】最大发电关灯数
该题要求在限定时间内,小E从工位出发,尽可能多地关闭灯,最终到达门口。由于灯数量最多为11,采用状态压缩bitmap+BFS方法,用二进制位表示已关灯状态,结合位置和步数进行广度优先搜索,记录最大关灯数。若无法到达门口,返回-1。代码通过队列维护状态,使用集合避免重复访问,最终输出结果。
2025-05-10 19:06:51
6
原创 【组合问题/背包问题+剪枝优化】【难】K-P 分解
摘要: K-P分解问题要求将正整数N分解为K个正整数的P次方之和,优先选择因子和最大的方案,若相同则取降序字典序最大的分解。输入为N、K、P,输出满足条件的分解序列(降序)或无解时返回空列表。示例展示了不同输入下的最优解选择过程。提供了两种Python实现方案:组合解法(DFS+剪枝)和背包解法(回溯),重点优化了候选值处理和1的特殊情况。问题涉及数论与组合优化,适用于算法设计与数学建模场景。
2025-05-08 20:42:28
10
原创 【BFS最短步数】行李箱密码解锁问题
摘要:题目要求计算从初始4位素数密码转换到目标密码的最少操作次数,每次只能改变一位数字且新密码必须是素数。解决方案采用广度优先搜索(BFS),预先生成所有可能的素数密码,并寻找最短路径转换。示例展示了具体转换步骤,如"0023"到"0059"需2次操作。代码实现了素数判断和BFS搜索,未找到路径时返回-1。
2025-05-08 15:34:16
5
原创 【DFS搜索全部路径】【难】最佳路径规则
摘要:本文提出一个基于有向图的最佳路径查找问题。给定一系列带权有向边表示的连接关系和若干查询,要求针对每个查询返回从起点到终点跳数最少且权重最小的路径总权重(无法到达则返回-1)。解法采用深度优先搜索遍历所有可能路径,按跳数和权重排序后返回最优结果。示例展示了该算法在简单和复杂场景下的正确输出。时间复杂度取决于图的规模和查询数量,适用于中等规模输入(边和查询数≤500)。
2025-05-08 11:41:14
11
原创 【字节数前缀和标记索引】【递归处理字节流】基于栈的虚拟机指令解析器
指令OpBody长度说明PUSH0xC0014 字节(非负整数)将 Body 中的数字压栈POP0xC0020 字节弹出栈顶数字并丢弃(若栈空则忽略)ADD0xC0114 字节(非负整数)弹出数字 A(为空则 A=0),将 A + B(Body)压栈SUB0xC0124 字节(非负整数)弹出数字 A(为空则 A=0),将 A - B(Body)压栈JGT0xC0212 字节(偏移地址)弹出 A 和 B(为空则为 0),若 A >= B,跳转到给定偏移地址的指令处执行。
2025-05-07 17:05:32
7
原创 【从根节点索引出发,递归建树】【难难】表达式转二叉运算树并先序遍历输出
本文介绍了一种将表达式转换为二叉运算树并先序遍历输出的方法。表达式由变量、加减运算符和括号组成,需按照运算优先级构建二叉树结构。算法首先去除外层括号,然后从右到左寻找根节点位置,递归构建左右子树,最终输出先序遍历结果。示例展示了表达式"x+(a+pi-xn)+eps"被转换为二叉树后的先序遍历序列为["+", "+", "x", "-", "+", "a", "
2025-05-07 10:57:17
8
原创 【基于数组维护时间顺序】【基于字典快速查询索引位置】【难】分页内存管理中的页置换统计
本文介绍了分页内存管理中的页置换统计方法。系统将虚拟内存划分为固定大小的页,物理内存划分为页框。当访问的页不在内存时触发缺页中断,需要执行页置换。置换策略为:从按访问时间排序的前windowSize个候选页中,选择访问次数最少且最久未访问的页进行置换。输入包括页框数、候选窗口大小和访问序列,输出为总置换次数。文末提供了Python实现,通过维护缓存状态(访问次数和时间)来模拟置换过程,并以两个示例详细说明了置换决策过程(分别发生4次和2次置换)。
2025-05-06 19:37:43
11
原创 【快速区别设计思想】一个电商场景串联23种设计模式:创建型、结构型和行为型
在电商平台中,设计模式可以帮助解决各种架构、行为和交互问题。下面我们对每种设计模式进行总结,表达它们在电商场景中解决的具体问题,并简要描述它们如何解决这些问题。在电商系统中,通过这些设计模式的应用,我们可以有效地解耦系统各个组件,确保代码的灵活性、扩展性和可维护性。每种设计模式都有其独特的作用,帮助我们应对各种复杂的业务需求和变化。
2025-05-05 23:31:07
1243
原创 访问者模式(Visitor Pattern)
✅ 将操作封装到独立的访问者类中,避免修改原有类结构,符合开闭原则。✅ 适用于需要在一个不常变化的对象结构上,动态增加新操作的场景。如果你对访问者模式有其他问题或想了解更多细节,欢迎继续提问!
2025-05-05 22:34:22
948
原创 模块方法模式(Module Method Pattern)
✅ 将系统中的不同功能封装为模块,每个模块具有独立的职责。通过调用模块的公开方法来完成相应的操作,提升系统的可扩展性和可维护性。如果你对这个模式或代码有疑问,或想了解更复杂的用例,随时告诉我!
2025-05-05 22:25:53
859
原创 策略模式(Strategy Pattern)
✅ 将每种行为或算法封装成独立的策略类,客户端通过选择不同的策略来改变行为。✅ 适用于需要在运行时动态改变算法或行为的场景。如果你有任何问题或需要进一步的解释,随时告诉我!
2025-05-05 22:17:50
1477
原创 解释器模式(Interpreter Pattern)
解释器模式定义了一种语言的文法表示,并提供一个解释器,用来解释这些文法在具体上下文中的含义。应用场景示例语言处理计算器、编译器、解析器条件判断动态生成复杂的条件判断数据转换配置文件解析(XML/JSON)图形界面操作UI 控件解析和渲染解释器模式✅语法 -> 规则 -> 解析✅命令 -> 表达式 -> 计算让你能够通过抽象表达式来逐步解析并执行语言规则。是否希望我用更复杂的语法或者实际的业务场景(比如配置文件解析)来展示解释器模式的应用?我可以帮你继续拓展!
2025-05-05 18:46:00
696
原创 命令模式(Command Pattern)
命令模式将“请求的发出者”与“执行者”解耦,把请求封装成一个命令对象,实现“命令的记录、撤销、队列化”。应用场景示例图形软件操作画图、撤销、重做宏命令执行Photoshop 动作、键盘宏事务/批量处理数据库操作、文件系统命令队列命令排队或延时执行网络请求、打印任务队列✅命令是“请求的对象化”让你像操作对象一样存储、传递、组合、撤销操作。
2025-05-05 18:29:48
830
原创 责任链模式(Chain of Responsibility Pattern)
责任链模式允许多个对象都有机会处理请求,但只会有一个真正处理,请求沿着链条传递,直到被处理为止。场景示例审批流程请假、报销审批请求过滤器链Web中间件、安全校验事件处理链UI 组件冒泡传播事件日志责任链按等级处理日志输出责任链模式:一条线传到底,谁能处理谁来管✅ 让请求在链上流转,链上节点按职责处理,解耦调用逻辑!是否要我改成你熟悉的例子(比如 API 请求验证 → 授权 → 路由分发)形式?我可以马上重构给你看~或者导出为图/流程表?需要哪种形式继续?
2025-05-05 15:01:34
376
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人