welcome.md
树状数组
树状数组,也称为二进制索引树,是一种支持单点更新和区间查询的数据结构。在大多数情况下,我们可以用它来查询区间和、区间乘积或其他满足以下条件的操作: 结合律: 具有逆运算,我们可以通过 和 推断出 它基于这样一个假设:任何前缀 都可以分解为最多 个区间,这些区间的信息是已知的。 从上图可以看出,每个位置 控制的区间的右边界是 。在树状数组中, 被分配控制长度为 的区间。这里, ...
线段树
线段树是一种常用于维护区间信息的数据结构。 线段树可以在 的时间复杂度内执行诸如单点更新、区间更新和区间查询(区间和、区间最大值、区间最小值)等操作。 ...
一致性哈希
一致性哈希是一种常用于分布式系统的技术,用于将数据分布到不同的服务器/服务/数据中心。它可以确保: 数据 -> 节点映射是使用哈希函数计算的,数据 将被发送到第一个哈希值 的节点 当添加/删除节点时,只有部分数据需要重新映射,大多数数据不会受到影响。 与传统的哈希映射相比,一致性哈希可以实现更均衡的数据分布 方法论以下是一致性哈希工作原理的简要图示。 一致性哈希尝试执行以下操作: ...
系统设计基础
CAP定理CAP定理,或称为Brewer定理,指出分布式数据库系统只能保证三个特性中的两个:一致性、可用性和分区容忍性。系统优先考虑可用性而非一致性,可能会响应可能过时的数据。 Partition Tolerance在CAP理论中,Partition Tolerance(分区容忍性)是指系统在发生网络分区故障的时候,仍然能够对外提供服务的能力。 所谓网络分区故障,是指系统中的节点被分成两部分,...
二叉树主题

前/中/后序遍历不是三个算法,是同一个递归框架里”打印根”那一行放在哪。递归一行搞定;迭代用栈,是在手动模拟系统调用栈。BFS 换成队列就是层序。记住这个,二叉树遍历题不会再混。

...
二进制快速幂
二进制快速幂二进制快速幂(简称BE)是一种可以加速幂运算计算的技术。对于朴素的幂运算 ,时间复杂度是 ,而使用二进制快速幂,时间复杂度降为 。让我们从一个例子开始, 假设 是一个32位整数,这意味着最多我们只需要计算32次,并检查 是否包含在内。 12345678910111213def fast_power(a, exp): if exp == 0: return 1 ...
KV Cache
KV Cache在LLM推理时,在attention层中计算attention score时,需要计算query和key的点积,然后进行softmax归一化,最后与value进行加权求和。由于自回归的特性,每次生成一个token都需要和之前的所有token进行attention计算,这个时候就需要将之前的key和value进行缓存,以便下一次计算时直接使用。是一种用来加速推理的技术。 但是KV ...
耐心排序
耐心排序来自维基百科:耐心排序是计算机科学中的一种排序算法,它使用纸牌游戏”耐心”的规则按值对元素列表进行排序。游戏的目标是形成尽可能少的牌堆。耐心排序可用于解决最长递增序列(LIS)问题。 我们可以跳过证明,详细证明请参考文档。我们只需要知道牌堆数等于最长递增序列的长度。 1234567891011121314151617181920212223242526def length_of_lis...
二分查找模板

二分查找写错,99% 是因为没把循环不变量 (loop invariant) 想清楚。锁死一个半开区间 [lo, hi) 的模板,>=><=< 四种边界全用同一份代码。

...