#

#算法

16篇文章

算法题-24点

题目 从 1~13 任取四个数字,通过+,-,* ,/和() 来计算 24 点 其实这个是算法分析里面提到过的一个标准做法,使用的方式是逆波兰表达式,也就是后缀表达式 首先把全部运算情况的逆波兰表达式穷举出来,采用逆波兰表达式是因为不用考虑操作符的优先级. 24 点的逆波兰表达式总共有如下 4 种情况. 其中 abc…

算法题-螺旋化

原题如下 Your task, is to create a NxN spiral with a given . For example, spiral with size 5 should look like this: and with the size 10: Return value should…

实时协作算法基本类型

本文范围 实时协同编辑让多个站点维护同一共享文档的副本,并允许用户在本地副本上产生编辑。本文将插入、删除等编辑请求称为用户操作,将字符、段落等被操作的文档内容称为文档元素;在内部数据结构中被标识和排序的文档元素统称为操作对象。网络异步传播时,不同站点可能基于不同文档状态产生并发操作。 操作转换(OT…

实时协作-yjs基本理解4-Ytext

Yjs 中的 Y.Text 是一种 CRDT(Conflict-free replicated data types),用于处理分布式环境中的实时协作文本编辑。Y.Text 允许多个用户同时在文本任意位置插入和删除,无需处理冲突或数据不一致。 Y.Text 的实现涉及两个概念: 操作的唯一标识符: 在 Yjs…

实时协作-yjs基本理解3-操作日志

在 Yjs 中,操作日志(Operation Log)记录对数据的修改,包括插入字符和删除字符。每个操作包含操作类型(插入或删除)、位置、内容和唯一标识符(用户 ID 与时间戳)。操作日志可生成差异(delta),并发送给其他副本以更新其状态。 收到新操作后,Yjs…

实时协作-yjs基本理解2-向量时钟

向量时钟(Vector Clock)是分布式系统中记录和比较事件发生顺序的数据结构。每个节点维护一个向量时钟,其中每个元素对应一个系统节点的逻辑时钟值。逻辑时钟值是非负整数,表示节点已发生的事件数量。 在 Yjs 中,每个用户或客户端可以视为一个节点。向量时钟用于追踪各节点的操作顺序。每个 Yjs…

实时协作-yjs基本理解

Yjs 是开源 JavaScript 库,实现基于 CRDT(Conflict-free Replicated Data Type)的共享数据类型。多个用户可以在没有中心协调者的条件下并发编辑共享数据。 Yjs 的基本原理可概括为: 数据结构:Yjs 提供多种 CRDT 数据结构,如用于协作文本编辑的 Y.Text…

实时协作-CRDT基本理解(2)

CRDT 实现还需要处理并发操作和网络延迟。LSEQ tree 是协作编辑中常见的一类 CRDT,但其数据结构较复杂。这里使用简化的列表 CRDT…

实时协作-CRDT基本理解

CRDT(Conflict-free Replicated Data Types)通过合并策略和操作转换,使多个端的协作状态最终保持一致。以下用一个简化的文本编辑器示例说明并发插入的处理方式。 假设端 A 和端 B 同时编辑同一段文本,执行以下操作: 端 A 在光标位置插入字符 ‘X’,生成一个插入操作。 同时,端 B…

算法题-数组列表中的最大距离

题目 给定 m 个数组,每个数组都已经按照升序排好序了。现在你需要从两个不同的数组中选择两个整数(每个数组选一个)并且计算它们的距离。两个整数 a 和 b 之间的距离定义为它们差的绝对值 |a-b| 。你的任务就是去找到最大距离 代码

启发式方法论

启发式(Heuristic)是在信息不完备或精确计算成本不可接受时,依据经验规则寻找可行解的方法。它不保证数学最优,而是在给定时间内获得满足要求的结果。 词源 这个词来自希腊语 heuriskein(εὑρίσκειν),意思是发现、找到。“尤里卡”(Eureka…

回溯算法:组合、N 皇后与数独

回溯算法(Backtracking)通过递归枚举选择;当前选择无法满足约束时,撤销最后一次状态修改并尝试其他选择。 最近练习 LeetCode 的组合求和(39)、组合(77)、N 皇后(51)和数独(3…