算法
常规 非常规算法实现
XNB's Not a Beginner
[算法 | 现代C++ | 数据结构实现 | 有趣的Coding魔法]
展开
-
【LCA模板】(最近公共祖先)
【代码】LCA(最近公共祖先)原创 2023-12-16 18:50:27 · 392 阅读 · 1 评论 -
【二叉树的中序线索化】
【代码】【二叉树的中序线索化】原创 2024-03-19 19:40:55 · 129 阅读 · 0 评论 -
【Codeforces Round #406 (Div. 1) B. Legacy】(线段树 | 优化建图)
【代码】【Codeforces Round #406 (Div. 1) B. Legacy】(线段树 | 优化建图)原创 2024-03-19 19:40:10 · 210 阅读 · 0 评论 -
【HDU: Tunnel Warface】(线段树 | 连续区间计数 | 树上二分)
题目大意: 有N个连通地道,接下来有M个操作,* R -> 修复最近依次被炸毁的地道。* 数据范围:N, M <= 50000。* Q k -> 查询包括k的最长地道。* D x -> 炸掉x号地道。原创 2024-03-19 19:37:39 · 239 阅读 · 0 评论 -
【线段树的可持久化】(主席树 | 历史记录 | 版本回溯)
【代码】【线段树的可持久化】(主席树 | 历史记录 | 版本回溯)原创 2024-03-19 19:35:42 · 243 阅读 · 0 评论 -
【物理排序】(最小交换环 | 大体量表排序 | 泛型算法)
在表排序的过程中,实际上是不需要移动那些原始数据的,要移动的只是指向他们位置的那些指针。不移动元素本身,而只移动元素本身的排序方法,我们称之为“间接排序});++i)交换环:N个数字的排列由若干个独立的环组成。原创 2024-03-10 16:16:39 · 392 阅读 · 0 评论 -
【函数缓存 | 记忆化技术】(类型萃取 | 延迟计算 | hash | 计算优化 | 函数式编程 | 模板元编程)
这样,当相同的查询再次发生时,可以直接从缓存中获取结果,而无需再次访问数据库。这样,当相同的请求再次发生时,可以直接返回缓存中的结果,避免了不必要的网络延迟和开销。模板类,然后通过特化这个模板类,将返回类型和参数类型作为模板参数,从而能够获取函数的类型、返回值和参数的个数。,我们可以以一种统一的方式处理这些不同类型的函数对象,而无需针对每种类型编写特定的代码。,可以将之前计算过的结果缓存起来,以便在需要时快速重用,从而提高渲染速度和游戏性能。因此,可以使用记忆化来缓存推理结果,从而加速模型的响应速度。原创 2024-03-09 16:46:28 · 1245 阅读 · 0 评论 -
【线段树的简单封装】
【代码】【线段树的简单封装】原创 2024-03-07 19:40:16 · 426 阅读 · 0 评论 -
【算法随笔:HDU 3333 Turing tree】(线段树 | 离线 | 离散化 | 贪心)
near[i] < x, 意味着原数组最近一次出现value of a[i]不在该区间[x, y)内,也就意味着a[i]是区间中第一个出现的元素。每个区间可能有重叠,这时需要采用贪心思路和区间合并的思路,对区间左端点排序,依照次序依次处理询问区间。题目很简单,给出长度为N的数组,Q次询问,每次给出区间。枚举每个询问区间[x, y),对于a[i], 如果有。value of a[i]最后出现的下标。只需在更新过程中,同时维护当前时刻,预处理, 记录每个a[i]对应的。last[a[i]]有越界风险。原创 2024-03-05 16:29:20 · 584 阅读 · 1 评论 -
【算法随笔:luogu P3029 Cow Lineup S 】(双指针 | hash | 离散化 | 尺取 | 双端队列)
现有N头牛排成一排,这些牛其中包含,每个牛有现在要给这些牛拍一张照片,需要照片中,且。原创 2024-03-04 21:42:39 · 510 阅读 · 0 评论 -
【算法随笔:线段树 Segment tree】(多操作 | leetcode例题)
分析线段树,并且一般在算法题中出现。线段树线段树具有,当然动态树也可以,改天更新线段树处理非常强大,很少有别的数据结构能与之媲美线段树进阶操作还有等,这些扩展持续学习中,改日更新DSA模板(静态数组、侵入式)线段树经典应用。原创 2024-03-04 21:08:37 · 848 阅读 · 1 评论 -
【树状数组 | 简单实现】(单点修改 | 区间查询)
【代码】【树状数组 | 简单实现】(单点修改 | 区间查询)原创 2024-03-03 18:28:21 · 416 阅读 · 1 评论 -
【算法随笔 Luogu: P1878 舞蹈课】(优先队列 | 断链重连 | 链式)
typedef struct {//定义一对节点int diff;//每一对的水平差距int first;//第一个人的编号//第二个人的编号} node;//记录每个人是否出队(是否有效)//只有label为假,即还没有出队时访问prev和next才有意义//动态记录每个人的前驱//动态记录每个人的后继int N {};//每个人的水平//一共有多少对//组成的每一对的第一个和第二个人i < N;原创 2024-03-03 14:24:22 · 589 阅读 · 1 评论 -
【算法随笔:leetcode 49 异位字符串分组】(C++ | hash | 字符串算法)
字符串 s1, s2 | -sorting->的思路,异构字符串的定义指出,两个字符串只要包含。可以按任意顺序返回结果列表。给你一个字符串数组,请你将。然后扔进hashset中。最简单的思路,把每个。字符串s1', s2'同种且同数目的小写字母。原创 2024-02-28 20:13:31 · 499 阅读 · 1 评论 -
【巩固算法基础:二叉树遍历序列重建】(xx序 + 中序)
就以infix-order和prefix-order举例,尝试还原后序遍历序列吧,其他情况都是类似的。代码分别如下:写的比较规范,可作为模板使用,仅作为参考。原创 2024-02-28 19:58:26 · 666 阅读 · 1 评论 -
【日常实现STL : partial_sort】
然后遍历range:[middle, last),在后面搜索比* first更小的元素,置为更合适的heap-top,然后shift-down(调用adjust_heap, 实质上为shift-down + push_heap), 然后调整range:[first, middle]再次成为max-heap。最终将整个容器中top-k构成的元素集合在range:[first, middle)中构成的max-heap进行排序(调用pop_heap)原创 2024-02-27 23:26:00 · 506 阅读 · 1 评论 -
【算法随笔: 76 最小覆盖子串】(leetcode | hash | 变长滑动窗口 | 预处理优化)
最小覆盖子串 "BANC" 包含来自字符串 t 的。所有字符的子串,则返回空字符串。原创 2024-02-26 23:53:15 · 552 阅读 · 1 评论 -
【回顾算法基础:反转链表】(就地算法 | 穿针引线 | 递归 or 迭代)
stl中的::std::reverse(forwardIt first, forwardIt last, ...), 对list的特化版本的实现思路,就类似上述算法(当然list内部是双向环形链表,同时节点的分配和维护是allocator和forwardit,会复杂很多。给定待反转的链表范围(用下标表示:[first, last),一个左闭右开区间)总的来说,一般遇到的链表反转就两种情况:部分反转和整个反转。思路是让下一个节点指向当前节点。先给出链表节点定义吧。原创 2024-02-25 19:17:14 · 649 阅读 · 1 评论 -
【400行 手搓trie树】(ModernCpp | KMP & AC后缀机 | 模糊匹配 | 词频分析 | 相似度分析 | 串排序 ...)
这里Node是一个嵌套在class trie定义内的struct类型,表示trie树上的节点。原创 2024-02-24 22:18:43 · 1284 阅读 · 1 评论 -
【leetcode 127.单词接龙】(单源无权最短路 | 数学建模 | BFS | 双向BFS | A-Star)
是一个字符串转换序列相邻两个字符串只相差一个字符,并且除了first_word,其他字符串必须出现在指定字符串集合words当中。求最短字符串转换序列示例:5一个最短转换序列是 "hit" -> "hot" -> "dot" -> "dog" -> "cog", 返回它的长度 5。就是一个隐式单源无权最短路问题,朴素的BFS就能解决。(有很多类似的题目,比如基因突变序列,信息输送验证一类的)但是这题的新意在于数学建模(hash、虚拟节点)和算法优化(bidirDFS、A-Star)。原创 2024-02-20 17:20:42 · 453 阅读 · 2 评论 -
【聊聊K路归并】
【代码】【聊聊K路合并】原创 2024-02-19 22:05:56 · 477 阅读 · 1 评论 -
【编译期枚举反射】
【代码】【编译期枚举反射】原创 2024-02-19 08:32:43 · 393 阅读 · 1 评论 -
【链表 快速排序】
链表不适合写快速排序,但是也可以写。原创 2024-02-19 07:33:32 · 425 阅读 · 1 评论 -
【链表 归并排序】(C++ OOP | templateADP | 递归)
代码不长,值得注意的点很多。已经做了测试,可以拷下来在本地跑一下。原创 2024-02-18 14:52:42 · 457 阅读 · 1 评论 -
【就像回字有四种写法,LCA也有六种求法】(最近公共祖先求解)
都加了注释,可以当算法模板使用,注意思考每种方法的适用场景。原创 2024-02-17 16:42:19 · 580 阅读 · 2 评论 -
【中缀表达式求值】(异常处理 | Stack | 支持单目运算 | 支持位运算)
opposite 相反数。操作数和运算符的相对位置有误。~ not 按位取反。原创 2024-02-17 00:04:30 · 885 阅读 · 2 评论 -
【四叉树】(boolean矩阵划分树 | 多路树 | RAII | 深拷贝)
【代码】【四叉树】(boolean矩阵划分树 | 多路树 | RAII | 深拷贝)原创 2024-02-16 06:16:25 · 500 阅读 · 2 评论 -
【算法随笔 : LeetCode 22. 括号序列生成】( dfs | Stack | 合理剪枝 | 卡特兰数)
首先估计可能结果集的大小,原问题可以划归为(二元的)合法出栈序列问题,所以理论上界为卡特兰数(自行搜索)然后是状态剪纸,通过记录当前状态下的左花括号,和右花括号的数目,来限制下一步的决策空间,达到剪枝效果。代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。这是一道非常非常经典的潜在剪枝的dfs问题,下面是题解。先看暴力枚举(标准的深搜回溯),然后再进一步优化。这里的dfs有两种策略。原创 2024-02-15 23:31:42 · 455 阅读 · 1 评论 -
【算法随笔:NYOJ-嵌套矩形】(Dp on DAG | DAG 最长路 | 记忆化搜索 | 字典序排序)
矩形X(a,b)可以嵌套在矩形Y(c,d)中,当且仅当 a<c,b<d,或者b<c,a<d。选出尽可能多的矩形排成一行,使得除了最后一个之外,每一个矩形都可以嵌套在下一个矩形内。输出这一排矩形,如果有多个矩形序列满足要求,按照字典序的顺序输出。有n个矩形,每个矩形可以用两个整数a、b描述,表示它的长和宽。这是一个很经典,也很有意思的问题,下面是ac代码。原创 2024-02-15 20:11:38 · 393 阅读 · 1 评论 -
【leetcode 61. 旋转链表】(快慢指针 | 穿针引线 | 数学 )
旋转链表,将链表每个节点向右移动。题目:给你一个链表的头节点。原创 2024-02-15 01:06:12 · 376 阅读 · 2 评论 -
【维护中位数的工具类 MedianHolder】(对顶堆 | templateADT | 批处理)
【代码】【中位数维护的工具类 MedianHolder】(对顶堆 | templateADT | 形参包 初始化列表扩展)原创 2024-02-15 00:18:51 · 541 阅读 · 1 评论 -
【LRU Cache】(Least recently used | template ADT| list + double hash)
【代码】【LRU Cache】(Least recently used | template ADT| list + double hash)原创 2024-02-14 20:12:24 · 357 阅读 · 1 评论 -
【LFU Cache】(least frequency usage | ADT | min-heap + double hashtable)
模拟CPU根据主存地址,向高速缓冲的读操作。包含90%的写操作,和10%的读操作。以及DMA或主存向缓冲的写操作。最终计算命中率和读写总次数。原创 2024-02-14 00:32:07 · 509 阅读 · 1 评论 -
[FIFO Cache实现】( List + hashtable | template | LRU )
【代码】【LRU Cache实现】( List + hashtable | template | LRU )原创 2024-02-11 20:34:46 · 558 阅读 · 1 评论 -
【leetcode 212 单词搜索 II】(trie字典树 | 树上dfs | 前缀匹配 | 剪枝)
if(!原创 2024-02-14 03:23:16 · 359 阅读 · 1 评论 -
【红黑树】(仿STL map | 暂时只写了插入)
【代码】【红黑树】(仿STL map | 暂时只写了插入)原创 2024-02-13 02:17:13 · 575 阅读 · 2 评论 -
【箱排序】( 链表实现 )
【代码】【箱排序】( 链表实现 )原创 2024-02-09 02:12:40 · 376 阅读 · 1 评论 -
【简单文本相似度分析】( LCS | Trie | DP | 词频统计 | hash | 单词分割 )
回溯 收集lcs对应的下标,因为递归,所以求出来逆序的,输出的时候用range for配合管道运算符和concept std::views::reverse可以正常还原LCS。单词分割:string文本 -> istringstream送入缓冲->vector< string > split words单词序列。SAME_AS LHS RHS为强枚举类型 enum state : char { ... } 定义状态空间标记用的。matrix是一个template type。原创 2024-02-07 23:39:00 · 382 阅读 · 1 评论 -
【TRIE字典树实现:400行】(模糊匹配 | AC自动机 | 多模式匹配 | 串排序 | 词频计数 | 相似度分析 | RAII模式 | 前缀比较 )
取代传统的pair< return_type, bool > 检索返回类型。范围库相关标准设施在代码简化的重要作用。中智能指针所有权的转交。使得代码较大程度复用。原创 2024-02-08 00:23:10 · 1548 阅读 · 2 评论 -
【Network POJ-3417】 (DFS | TARJAN| LCA | 树上差分)
给定无根树,N个节点,N-1条树边,和M条“附加边”;删除一条树边和一条附加边使图不再连通,求总方案数;原创 2023-12-16 20:28:05 · 444 阅读 · 1 评论