摘要: 目前 FPGA 厂商提供的开发工具多数为闭源的二进制形式,这极大限制了研究人员对 FPGA 后端工具(如布局布线)进行创新,许多研究人员倾向于在理论架构而不是商业架构上评估他们的算法。 FPGA 工具链的组成比较复杂,将硬件描述语言编译到目标 FPGA 二进制的流程可以分为三个阶段:综合、布局布线、 阅读全文
posted @ 2025-02-24 15:27 木杉的园子 阅读(142) 评论(0) 推荐(0)
摘要: FASM 是一种文件格式,用于指定 FPGA 比特流中需要置1或清0的位。FASM 的设计初衷是提供一个中间层,令 FPGA 布局布线工具无需关心实际运行的 FPGA 比特流文件格式而工作。FASM 文件格式具有以下特性: 从文件中删除任意一行都不会影响其有效性(注:这里的“有效性”指的是能正常运作 阅读全文
posted @ 2025-02-24 15:17 木杉的园子 阅读(67) 评论(0) 推荐(0)
摘要: 在图论问题中,判断两个节点是否属于同一连通分量是一个高频任务,例如: 判断网络中两台计算机是否能够通信; 合并不同社交圈以形成更大的群组; 处理动态连通性问题,比如动态增加边、节点的图。 如果直接通过图的遍历(如 BFS 或 DFS)来判断连通性,效率可能不够理想,特别是在需要频繁查询或修改的情况下 阅读全文
posted @ 2025-02-24 15:15 木杉的园子 阅读(170) 评论(0) 推荐(0)
摘要: 在许多算法问题中,我们经常需要对数组的一部分进行操作,比如: 查询一个数组的某个区间的总和、最大值或最小值; 动态更新数组中的某些值,同时保持高效的区间查询; 应对动态区间修改和查询问题,例如批量加值或区间替换。 直接使用暴力遍历显然无法满足高效率的需求,特别是当数组规模较大或操作频繁时。这时,线段 阅读全文
posted @ 2025-02-24 15:14 木杉的园子 阅读(89) 评论(0) 推荐(0)
摘要: 在动态数据结构中,如何在保持查询效率的同时,实现快速的插入和删除操作,是一个核心问题。红黑树(Red-Black Tree)是一种经过优化的二叉搜索树,具有高效的自平衡机制,能在最坏情况下提供 \(O(\log{n})\) 的操作性能。 红黑树因其实现简单、性能稳定而被广泛应用于操作系统、数据库等领 阅读全文
posted @ 2025-02-24 15:10 木杉的园子 阅读(209) 评论(0) 推荐(0)
摘要: 在算法问题中,许多问题都与单调性相关。例如: 寻找数组中某个元素左侧或右侧比它大的元素; 解决栈相关的问题,比如计算有效的括号、接雨水问题; 处理与区间、滑动窗口相关的动态问题。 许多这样的问题如果直接暴力处理,可能会导致 \(O(n^2)\) 的复杂度,这在面对大数据时会变得非常低效。为了提高效率 阅读全文
posted @ 2025-02-24 15:07 木杉的园子 阅读(268) 评论(0) 推荐(0)
摘要: 在算法问题中,如何高效处理数组区间的修改操作是一个常见且重要的话题。比如: 需要在一个数组的多个区间上进行加减操作,最终输出结果; 频繁调整数组部分区间的值,但需要快速恢复整体状态; 处理二维平面或更高维数据的区域更新问题。 通常,我们可以使用暴力遍历的方法,但当数组规模较大、操作次数较多时,暴力方 阅读全文
posted @ 2025-02-24 15:07 木杉的园子 阅读(193) 评论(0) 推荐(0)
摘要: 随着数据规模的增长和存储介质的限制,传统的二叉树结构逐渐显现出其不足:在外存环境下,频繁的 I/O 操作严重影响性能。为了解决这一问题,B-树(Balanced Tree)被发明,用于高效管理外存中的数据结构。 B-树是一种多路平衡搜索树,特别适合大规模数据存储和检索,其高效的节点分裂与合并机制使其 阅读全文
posted @ 2025-02-24 15:05 木杉的园子 阅读(660) 评论(0) 推荐(0)
摘要: 在数据库和文件系统中,B+树是常见的数据结构之一,主要用于索引管理和大规模数据的高效检索。与 B-树类似,B+树也属于多路平衡搜索树,但在存储布局和操作特性上进行了优化,尤其适用于磁盘存储环境。 本文将详细介绍 B+树的特点及优势,帮助读者全面理解这一重要的数据结构。 1. 什么是B+树 B+树是B 阅读全文
posted @ 2025-02-24 15:05 木杉的园子 阅读(85) 评论(0) 推荐(0)
摘要: 在算法竞赛和实际应用中,处理动态数据时经常遇到以下问题: 区间求和:快速求解某个区间的元素总和; 单点更新:快速更新某个元素的值,同时保证区间查询结果的正确性。 如果使用简单的数组实现,区间查询的复杂度为 \(O(n)\),单点更新的复杂度为 \(O(1)\)。而如果选用前缀和数组,查询变成了 \( 阅读全文
posted @ 2025-02-24 15:04 木杉的园子 阅读(97) 评论(0) 推荐(0)
摘要: 在计算机科学中,二叉搜索树(BST)是常用的数据结构,能够高效地支持动态数据的插入、删除和查询。然而,普通的二叉搜索树在数据分布不均的情况下可能退化为链表,从而导致操作效率下降到 \(O(n)\)。为了解决这一问题,1962 年两位苏联科学家 Adelson-Velsky 和 Landis 提出了第 阅读全文
posted @ 2025-02-24 15:04 木杉的园子 阅读(395) 评论(0) 推荐(0)
摘要: 基于一些和式计算的特殊方法,在将递归式转换为和式后,可以简化递归式的求解。 使用和式求解汉诺塔问题 考虑汉诺塔问题的递归关系: \[\begin{align*} T_0 &= 0; \\ T_n &= 2T_{n-1} + 1, n > 0. \end{align*} \]等式两边同时除以 \(2^ 阅读全文
posted @ 2025-02-24 15:02 木杉的园子 阅读(89) 评论(0) 推荐(0)
摘要: 无限微积分由 \(\mathrm{D}f(x) = \lim_{h \to 0} \frac{f(x+h)-f(x)}{h}\) 所定义的微分算子 \(\mathrm{D}\) 的性质,有限微分则是由 \(\Delta f(x) = f(x+h) - f(x)\) 所定义的差分算子 \(\Delta 阅读全文
posted @ 2025-02-24 15:00 木杉的园子 阅读(109) 评论(0) 推荐(0)
摘要: 成功处理和式的关键在于,将一个 \(\sum\) 改变成另一个更简单或者更接近某个目标的 \(\sum\)。通过学习一些基本的变换法则并在实践中练习使用它们,就会容易做到这点。 基本变换法则 设 \(K\) 是任意一个有限整数集合, \(K\) 中元素的和式可以使用分配律、结合律、交换律进行变换: 阅读全文
posted @ 2025-02-24 14:59 木杉的园子 阅读(102) 评论(0) 推荐(0)
摘要: 问题定义:平面上 \(n\) 条直线所界定的区域的最大个数 \(L_n\) 是多少? 基于对前几个 \(n\) 情况的分析,我们可以总结以下规律:第 \(n\) \((n>0)\) 条直线使得区域的个数增加 \(k\) 个,当且仅当它对 \(k\) 个已有区域进行了分裂;而它对 \(k\) 个已有区 阅读全文
posted @ 2025-02-24 14:58 木杉的园子 阅读(70) 评论(0) 推荐(0)
摘要: 问题定义:从围成标有记号 \(1\) 到 \(n\) 的圆圈的 \(n\) 个人开始,每隔一个删去一个人,直到只有一个人幸存下来,记最后幸存者的编号为 \(J_n\)。 我们假设一开始有 \(2n\) 个人,第一轮后剩下的人编号为 \(1,3,5,\dots,2n-1\),而这恰好是游戏从 \(n\ 阅读全文
posted @ 2025-02-24 14:57 木杉的园子 阅读(383) 评论(0) 推荐(0)
摘要: 问题定义:给定一个由 \(n\) 个圆盘组成的塔,这些圆盘按照大小递减的方式套在三根桩柱中的一根上。我们的目的是要将整个塔移动到另一根桩柱上,每次只能移动一个圆盘,且较大的圆盘在移动过程中不能放置在较小的圆盘上面。记最少移动次数为 \(T_n\)。 那么我们如何找出汉诺塔问题的递推式呢?书中给出的做 阅读全文
posted @ 2025-02-24 14:56 木杉的园子 阅读(179) 评论(0) 推荐(0)
摘要: 问题定义:对于一个数列:\(1,1,2,3,5,8,13,21,34,55,89\dots\),从第三项开始,每一项都等于前两项之和,设第 \(n\) 项为 \(F_n\)。 显然,该问题的递归关系为 \[\begin{align*} F_0 &= 1, \\ F_1 &= 1, \\ F_n &= 阅读全文
posted @ 2025-02-24 14:56 木杉的园子 阅读(82) 评论(0) 推荐(0)
摘要: 如果一个正整数 \(p\) 恰好只有两个因子,即 \(1\) 和 \(p\),那么这个数就称为素数,而其他有非平凡因子的数都称为合数。以下四个关系等价。 \(p\) 是素数 \(\forall a\),有 \(p \mid a\) 或 \(\gcd(p,a)=1\) \(\forall a,b\) 阅读全文
posted @ 2025-02-24 14:54 木杉的园子 阅读(130) 评论(0) 推荐(0)
摘要: 我们把与整数 \(a\) 模 \(m\) 同余的整数称作同余数,这些同余数构成的集合记作 \(\bar{a}=\{x \in Z | x \equiv a \pmod m\}\)。所有模 \(m\) 的同余数集合所构成的集合称为模 \(m\) 的剩余类,记作 \(z_m = \{\overline{ 阅读全文
posted @ 2025-02-24 14:49 木杉的园子 阅读(237) 评论(0) 推荐(0)
摘要: 对于一些函数 \(f(n)\),如果很难直接求出它的值,而容易求出其倍数和或约数和 \(g(n)\),那么可以通过莫比乌斯反演简化运算,求得 \(f(n)\) 的值。 莫比乌斯函数由如下等式定义 \[\mu(m) = \left\{\begin{matrix}\begin{align*} 1, \q 阅读全文
posted @ 2025-02-24 14:48 木杉的园子 阅读(104) 评论(0) 推荐(0)
摘要: 我们考虑阶乘 \(n!\) 的素因数分解 \(n! = p_1^{a_1} p_2^{a_2} \cdots p_k^{a_k}\),由于阶乘 \(n!\) 的因数位于 \([1,n]\) 区间内,因此阶乘 \(n!\) 的各个素因数 \(p_i \in [1,n]\)。我们用 \(\varepsi 阅读全文
posted @ 2025-02-24 14:47 木杉的园子 阅读(93) 评论(0) 推荐(0)
摘要: 欧拉函数,即 \(\varphi(m)\),表示的是小于等于 \(m\) 并与 \(m\) 互素的数的个数。欧拉将费马小定理推广到非素数的模,称为欧拉定理,如下所示 \[n^{\varphi(m)} \equiv 1 \pmod m, \ \gcd(n,m)=1 \and n,m \in Z. \] 阅读全文
posted @ 2025-02-24 14:46 木杉的园子 阅读(130) 评论(0) 推荐(0)
摘要: 如果 \(m>0\) 且比值 \(n/m\) 是一个整数,我们就说 \(m\) 整除 \(n\)(或者 n 被 m 整除),记作 \[m \mid n \Leftrightarrow m > 0, \exist k \in Z, n=mk. \]两个整数 \(m\) 和 \(n\) 的最大公因子是能 阅读全文
posted @ 2025-02-24 14:42 木杉的园子 阅读(60) 评论(0) 推荐(0)
摘要: 当两个整数 \(a\) 与 \(b\) 关于整数 \(m\) 的取余运算结果相同,我们称为 \(a\) 关于模 \(m\) 与 \(b\) 同余,记作 \[a \equiv b \pmod m \Leftrightarrow a \bmod m = b \bmod m. \]定理 1:\(a \eq 阅读全文
posted @ 2025-02-24 14:37 木杉的园子 阅读(52) 评论(0) 推荐(0)
摘要: 通常在含有取整的和式中,求封闭形式解的行之有效的技巧是通过引入一个新的变量来规避底或顶。 例 1:求 \(\sum_{0 \leq k \leq n} \lfloor \sqrt{k} \rfloor\)。 令 \(m=\lfloor \sqrt{k} \rfloor\),则 \[\begin{al 阅读全文
posted @ 2025-02-24 14:32 木杉的园子 阅读(66) 评论(0) 推荐(0)
摘要: 我们将约瑟夫问题推广到一般情况,如果有 \(n\) 个人,每隔 \(q\) 个人就淘汰一个人,那么最后幸存者的号码是多少? 我们采用新的编号方式,第一个人不会被淘汰,则编号变为 \(n+1\);第二个人不会被淘汰,则编号变为 \(n+2\);直至第 \(q\) 个人被淘汰。第 \(q+1\) 个人重 阅读全文
posted @ 2025-02-24 14:31 木杉的园子 阅读(43) 评论(0) 推荐(0)
摘要: 当 \(m,n\) 是正整数时,\(n\) 被 \(m\) 除的商是 \(\lfloor n/m \rfloor\),余数记为 \(n \bmod m\),称作 \(n\) 对 \(m\) 取模。取模运算可以扩展到实数域,\(x \bmod y\) 的物理意义是,当 \(x\) 和 \(y\) 是正 阅读全文
posted @ 2025-02-24 14:30 木杉的园子 阅读(250) 评论(0) 推荐(0)
摘要: 整值函数中的底函数和顶函数的定义如下 \(\lfloor x \rfloor\) 为小于或等于 \(x\) 的最大整数; \(\lceil x \rceil\) 为大于或等于 \(x\) 的最小整数。 整值函数拥有以下性质 \(\lceil x \rceil - \lfloor x \rfloor 阅读全文
posted @ 2025-02-24 14:29 木杉的园子 阅读(53) 评论(0) 推荐(0)
摘要: Zeilberger 算法推广了 Gosper 算法,可以机械化地处理所有对 \(k\) 求和的和式。其基本思想是,将要求和的项视为两个变量 \(n\) 和 \(k\) 的一个函数 \(t(n,k)\)。Zeilberger 算法可以总结为四个步骤 置 \(l:=0\)。 令 \(\hat{t} = 阅读全文
posted @ 2025-02-24 10:57 木杉的园子 阅读(361) 评论(0) 推荐(1)
摘要: 在组合意义中,\(\begin{pmatrix} n \\ k \end{pmatrix}\) 代表从具有 \(r\) 个元素的集合中选取 \(k\) 个元素作为子集的方法数,其计算公式为 \[\begin{pmatrix} r \\ k \end{pmatrix} = \begin{align*} 阅读全文
posted @ 2025-02-24 10:54 木杉的园子 阅读(76) 评论(0) 推荐(0)
摘要: 使用普法夫反射定律可以将超几何函数转换为另外的形式,常用的两种变换为 \[\frac{1}{(1-z)^a} F\left(\left.\begin{array}{c}a, b \\c\end{array} \right\rvert\, \frac{-z}{1-z}\right) = F\left( 阅读全文
posted @ 2025-02-24 10:52 木杉的园子 阅读(86) 评论(0) 推荐(0)
摘要: 超几何技术是研究二项式系数之和的系统方法的基础,一般的超几何级数是关于 \(z\) 且带有 \(m+n\) 个参数的幂级数,它用上升的阶乘幂定义如下 \[F\left(\left.\begin{array}{c} a_{1}, \cdots, a_{m} \\ b_{1}, \cdots, b_{n 阅读全文
posted @ 2025-02-24 10:51 木杉的园子 阅读(391) 评论(0) 推荐(0)
摘要: Gosper 算法适用于求和项是超几何项的求和,其一般分为两个步骤。 第一步是将项的比值表示成一个特殊的形式 \[\frac{t(k+1)}{t(k)} = \frac{p(k+1)}{p(k)}\frac{q(k)}{r(k+1)}. \]其中 \(p,q,r\) 是满足以下条件的多项式 \[(k 阅读全文
posted @ 2025-02-24 10:23 木杉的园子 阅读(478) 评论(0) 推荐(0)