- 博客(351)
- 收藏
- 关注
原创 Dilworth定理证明
本文摘要:文章系统介绍了偏序集的基本概念,包括链、反链、链覆盖、反链覆盖等,并重点证明了Dilworth定理和Mirsky定理。Dilworth定理表明最长反链长度等于最小链覆盖数,通过归纳法分两种情况证明;Mirsky定理作为对偶形式,证明最长链长度等于最小反链覆盖数。两个定理揭示了偏序集中链与反链的深刻对偶关系,为组合数学中偏序结构研究提供了重要工具。
2025-08-07 11:43:05
225
原创 离散数学--等价类、偏序集
本文摘要: 等价关系与划分:定义了集合上的等价关系(自反、对称、传递性),等价类的概念,并证明等价类构成集合的划分。等价关系的三个等价条件(aRb、[a]=[b]、[a]∩[b]≠∅)相互推导成立。 偏序集与格:介绍偏序关系(自反、反对称、传递)及其相关概念(全序、良序、覆盖关系)。通过哈斯图表示偏序集,讨论极大/极小元、上下界及格的判定条件(任意元素对存在最小上界和最大下界)。 拓扑排序:阐述如何从偏序关系构造兼容的全序关系,利用有限偏序集必有极小元的引理,简述拓扑排序的算法思想。
2025-08-06 15:30:47
537
原创 离散数学--二元关系及其性质、闭包
本文系统介绍了二元关系的基本概念、性质、表示方法及闭包运算。主要内容包括:1)二元关系的定义与集合表示;2)关系的6种基本性质(自反性、对称性、传递性等)及其判定方法;3)关系的矩阵表示和有向图表示;4)关系的自反闭包、对称闭包和传递闭包的概念与构造方法,重点证明了传递闭包等于连通关系,并给出了有限集上传递闭包的计算原理。文章通过严谨的数学定义和证明,结合实例说明了关系理论在离散数学中的核心地位和应用价值。
2025-08-05 17:19:13
947
原创 leetcode_11 盛最多水的容器
摘要:本文探讨了LeetCode中“盛最多水的容器”问题,给出了三种解法。暴力法枚举所有左右端点,时间复杂度O(n²)。单调数组法优化左端点枚举,但仍是O(n²)。最优解法采用双指针+贪心策略,从两端向中间移动较小高度的指针,时间复杂度O(n)。通过数学证明该策略的正确性,确保能找到最大面积。三种方法代码实现简洁,双指针法效率最高。
2025-08-04 20:12:25
1006
原创 C++ sort比较规则需要满足严格弱序
C++排序中的严格弱序规则:自定义比较函数时,必须满足非自反性(a<a为假)、传递性(a<b且b<c则a<c)和不可比传递性等严格弱序条件。常见的错误是在比较函数中未正确处理相等情况,导致违反非自反性。例如当两个默认值(fi=-1)比较时都返回true,就会引发未定义行为。解决方法是通过确保对等值情况返回false来满足严格弱序要求。
2025-08-01 11:33:03
720
原创 leetcode_560 和为K的子数组
本文探讨了和为k的子数组个数问题。提供了两种解法:1)暴力枚举法,通过固定子串起点并累加计算和,时间复杂度较高但能通过测试;2)前缀和优化法,将问题转化为类似两数之和的问题,利用哈希表存储前缀和出现次数,将时间复杂度优化至O(n)。特别强调了需要正确处理前缀和初始值pre[0]。前缀和解法通过在遍历时维护当前累加和,并查询哈希表中满足cur-k的前缀和出现次数,有效提升了算法效率。
2025-07-27 10:06:03
131
原创 leetcode_122 买卖股票的最佳时机II
本文讨论了股票买卖问题,要求通过多次买入和卖出股票获得最大利润。提供了三种解法:暴力递归、动态规划和贪心算法。暴力递归通过深度优先搜索枚举所有可能操作,但效率较低。动态规划通过状态转移方程(持有/不持有股票的最大收益)优化了时间复杂度至O(n)。最简洁的贪心算法则利用连续上升区间性质,将问题转化为相邻天数的正差价累加,时间复杂度同样为O(n)但代码更简洁。三种方法从不同角度解决了该问题,其中贪心算法最优美高效。
2025-07-25 18:07:53
971
原创 算法分析--时间复杂度
本文介绍了算法复杂度记号和问题分类。复杂度分析使用大O、Ω、Θ表示上下界和确界,小o、ω表示严格关系。P问题可在多项式时间解决;NP问题可在多项式时间验证;NPC问题是NP中最难且可互相归约的问题;NP-hard问题比NPC更广,但不一定属于NP。内容参考了矩阵客和时间复杂度相关文章。
2025-07-20 17:45:53
546
原创 leetcode_121 买卖股票的最佳时期
本文探讨了股票买卖问题的最优解法,要求在给定股价序列中通过一次买入卖出操作获得最大利润。介绍了四种解法:1)暴力枚举法(O(n²));2)贪心算法,通过维护历史最低价优化到O(n);3)动态规划法,状态转移方程与贪心类似;4)差分转换法,将问题转化为最大子数组和问题。其中贪心算法是最优解法,时间复杂度O(n),空间复杂度O(1)。后两种方法虽理论可行,但实际执行效率与贪心算法相当。
2025-07-19 21:04:31
855
原创 leetcode_53 最大子数组和
本文探讨了求解最大子数组和的四种方法:暴力枚举(O(n²))、动态规划(O(n))、贪心算法和分治策略。动态规划通过状态转移方程优化空间至O(1);贪心算法采用"抛弃负收益"策略;分治法则将问题分解为左右子区间处理,需维护区间和、左右端点极值等参数,时间复杂度为O(nlogn)。其中动态规划和贪心解法最为高效,空间复杂度均为O(1),体现了不同算法思想在解决同一问题时的多样性与优化思路。
2025-07-19 18:13:29
827
原创 华为OD 特异双端队列
摘要:题目描述了一种只能在头部弹出、但可以从两端插入的双端队列操作问题。要求通过最少次数的排序调整,使按1到n的顺序依次弹出元素。初始解法直接排序队列,优化后利用插入的有序性,通过维护队列的最小期望值和当前最大插入值来判断是否需要排序。最终解法进一步简化,仅用三个变量(期望值、最大插入值、是否有序)来跟踪队列状态,无需实际维护队列内容,显著优化了空间复杂度。
2025-07-15 17:21:46
431
原创 leetcode_20 有效的括号
本文介绍了判断括号序列有效性的算法。关键在于利用栈结构匹配括号对,并通过哈希表优化判断逻辑。文章提出两种解法:栈存储左括号本身或对应的右括号,处理时先检查字符串长度是否为偶数,再遍历匹配括号。两种方法均需确保栈最终为空,否则序列无效。参考来源提供了详细思路。
2025-07-15 08:51:16
315
原创 华为OD 消消乐游戏
摘要:本文讨论了一个字符串消除游戏的算法实现。游戏规则是相邻相同字母可消除,直到无法消除为止。文章比较了两种解法:栈的应用和双指针法。栈解法通过比较栈顶元素与当前元素实现高效消除,而双指针法需处理重复消除问题。样例分析表明栈解法更简洁高效,最终只需输出剩余字符串长度。
2025-07-14 17:39:12
708
原创 华为OD 处理器
本文实现了一个处理器亲和性调度算法,根据任务需求数量和可用处理器编号输出符合优先级的处理器组合。 算法首先将处理器分为两组(0-3和4-7),然后根据任务申请数量num(1/2/4/8)确定优先级规则: num=1时优先级顺序:剩余4个>2个>3个>1个 num=2时优先级顺序:剩余2个>4个>3个 num=4时必须剩余4个 num=8时需要全部8个处理器可用 使用回溯法生成满足条件的处理器组合,对两组处理器分别计算优先级,输出优先级高的组合。若优先级相同,则输出两组中的所有可
2025-07-13 23:36:48
551
原创 CS144 lab2 tcp_receiver
本文摘要: 实验实现了TCP接收端功能,重点解决32位序列号与64位绝对序列号的转换问题。实验包含两部分:接收并重组数据流(Reassembler),以及发送确认号和窗口大小(ackno和window size)。主要挑战在于处理32位序列号空间的回绕(wrap around)问题,以及SYN/FIN标志对序列号的影响。通过建立绝对序列号、流索引和TCP序列号之间的转换关系,解决了索引空间差异问题。实验还处理了TCP连接建立和终止时的序列号管理,以及窗口大小限制等细节。最终实现了能够正确处理数据重组和反馈确
2025-07-11 16:31:52
835
原创 leetcode 226 翻转二叉树
题目要求翻转一棵二叉树并返回根节点。通过递归方法实现:先翻转二叉树的左右子树,再将左右子树交换位置。对于空节点直接返回,否则递归处理左右子树后交换它们的引用。该解法简洁高效,时间复杂度为O(n),空间复杂度为O(h),其中n是节点数,h是树的高度。
2025-07-10 10:17:44
223
原创 leetcode_27 移除元素
本文介绍了两种双指针解法来移除数组中指定值val的元素。第一种同向双指针法使用快慢指针,将非val元素前移,时间复杂度O(n)。第二种相向双指针法通过左右指针交换元素,避免了重复赋值问题。两种方法都不需要额外空间,原地修改数组并返回新长度。代码示例展示了两种解法的具体实现,适用于需要在原数组上高效处理元素移除的场景。
2025-07-10 10:00:42
297
原创 华为OD 数字游戏
题目要求判断是否存在连续子数组的和能整除给定整数m。两种主要解法:动态规划和前缀和结合哈希表。动态规划解法时间复杂度为O(nm),空间复杂度可优化至O(m)。前缀和结合哈希表利用同余性质将问题转化为寻找相同模值,时间复杂度降至O(n),空间复杂度为O(m)。最优解法采用前缀和与哈希表,效率更高,适用于大规模数据。
2025-07-08 16:41:34
772
原创 华为OD 最小循环子数组
本文提出了一种利用KMP算法中的next数组性质来检测数组是否由子数组循环拼接而成的解法。通过计算数组的最长公共前后缀,如果满足next[n] % (n - next[n]) = 0的条件,则说明数组可以表示为某个子数组的多次重复。算法时间复杂度为O(n),空间复杂度为O(n),能够高效地找到最小重复子数组。代码实现展示了如何计算next数组并验证循环条件,最终输出最小重复子数组。该方法简洁高效,适用于类似问题的求解。
2025-06-18 17:19:20
703
原创 leetcode_213 打家劫舍 II
本文解决了环形房屋的打家劫舍问题(首尾不相邻)。通过分析环形序列的对称性,发现最优解序列在不同起点具有等价性。因此将问题转化为两个线性序列:去掉首元素和去掉尾元素,分别用打家劫舍I的方法求解。最终结果为这两个子问题的最大值。实现时用动态规划分别计算两个子序列的最大收益,时间复杂度O(n),空间复杂度O(n)。这种方法巧妙地将环形问题分解为两个线性问题,保证了正确性和高效性。
2025-06-18 16:29:50
800
原创 leetcode_3583 统计特殊三元组
文章摘要: 本文探讨了在给定数组中统计满足特定条件的三元组$(i,j,k)$的方法,要求$i<j<k$且$2a[j]=a[i]=a[k]$。提出了三种解法: 枚举中间元素:通过维护前缀和后缀哈希表,计算每个中间元素对应的有效三元组数量。 枚举右边元素:动态维护两个哈希表,分别记录单元素和二元组出现次数,遍历时直接统计符合条件的三元组。 二分查找:预处理元素位置,利用二分法快速确定左右边界,计算有效组合数。 代码实现均以C++为例,时间复杂度优化至$O(n)$或$O(n\log n)$,适用于大规
2025-06-17 16:52:51
342
原创 leetcode_455 分饼干
摘要:该题目要求将饼干分配给小朋友,确保每个小朋友只能获得不小于其胃口值的饼干。解题采用排序+贪心策略,先对饼干和胃口排序,然后用小饼干优先满足胃口小的小朋友。若无法满足则跳过,最终统计能满足的小朋友数量。时间复杂度为排序的O(n log n)。
2025-06-17 16:39:29
171
原创 CS144 lab0: warmup
本文是Lab 0的网络编程实验报告,主要包含三部分内容:环境配置、网络命令实践和字节流实现。首先详细记录了Ubuntu环境下的开发工具安装和g++-13配置过程,包括源设置和版本切换。其次展示了使用telnet和netcat进行HTTP通信和本地网络测试的实践步骤。最后实现了一个内存中的可靠字节流类(ByteStream),支持有限容量的数据读写、EOF处理和缓冲区管理,代码中包含了详细的注释说明其关键功能实现。整个实验涵盖从基础网络配置到实际编程实现的完整流程。
2025-06-14 23:47:23
452
空空如也
模板实现bitset
2023-04-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人