welcome.md
线段树
线段树是一种常用于维护区间信息的数据结构。 线段树可以在 的时间复杂度内执行诸如单点更新、区间更新和区间查询(区间和、区间最大值、区间最小值)等操作。 ...
一致性哈希
一致性哈希是一种常用于分布式系统的技术,用于将数据分布到不同的服务器/服务/数据中心。它可以确保: 数据 -> 节点映射是使用哈希函数计算的,数据 将被发送到第一个哈希值 的节点 当添加/删除节点时,只有部分数据需要重新映射,大多数数据不会受到影响。 与传统的哈希映射相比,一致性哈希可以实现更均衡的数据分布 方法论以下是一致性哈希工作原理的简要图示。 一致性哈希尝试执行以下操作: ...
系统设计基础
CAP定理CAP定理,或称为Brewer定理,指出分布式数据库系统只能保证三个特性中的两个:一致性、可用性和分区容忍性。系统优先考虑可用性而非一致性,可能会响应可能过时的数据。 Partition Tolerance在CAP理论中,Partition Tolerance(分区容忍性)是指系统在发生网络分区故障的时候,仍然能够对外提供服务的能力。 所谓网络分区故障,是指系统中的节点被分成两部分,...
二叉树主题
遍历关于二叉树遍历有很多有趣的主题,比如BST的中序遍历是一个有序序列。我们可能还想知道如何进行层次遍历(使用队列),这是进行广度优先搜索(BFS)的基础。在下面的每个部分中,我们将讨论这些主题。 前序遍历前序遍历将按照根节点 -> 左子节点 -> 右子节点的顺序访问。 中序遍历中序遍历将按照左子节点 -> 根节点 -> 右子节点的顺序访问。BST的中序遍历将返回一个有序数...
二进制快速幂
二进制快速幂二进制快速幂(简称BE)是一种可以加速幂运算计算的技术。对于朴素的幂运算 ,时间复杂度是 ,而使用二进制快速幂,时间复杂度降为 。让我们从一个例子开始, 假设 是一个32位整数,这意味着最多我们只需要计算32次,并检查 是否包含在内。 123456789101112131415161718public int fastPower(int a, int exp) { if (e...
KV Cache
KV Cache在LLM推理时,在attention层中计算attention score时,需要计算query和key的点积,然后进行softmax归一化,最后与value进行加权求和。由于自回归的特性,每次生成一个token都需要和之前的所有token进行attention计算,这个时候就需要将之前的key和value进行缓存,以便下一次计算时直接使用。是一种用来加速推理的技术。 但是KV ...
耐心排序
耐心排序来自维基百科:耐心排序是计算机科学中的一种排序算法,它使用纸牌游戏”耐心”的规则按值对元素列表进行排序。游戏的目标是形成尽可能少的牌堆。耐心排序可用于解决最长递增序列(LIS)问题。 我们可以跳过证明,详细证明请参考文档。我们只需要知道牌堆数等于最长递增序列的长度。 int lengthOfLIS(int[] nums) { int[] top = new int[n...
二分查找模板
二分查找二分查找可用于在有序序列中搜索或确定元素或枢轴。这里我们有三种使用二分查找的场景。 在唯一元素数组中查找元素1234567891011int basic_binary_search(int[] arr, int target) { int left = 0; int right = n; while(left <= right) { int mid ...