字符串编辑距离的简单实现 字符串编辑距离应该是动态规划中的代表问题了: 给定两个字符串 a a a 与 b b b,求解将 a a a 编辑至 b b b 的操作步数(距离),编辑包含以下两种操作: 删除某一字符增加某一字符 (这里我们不允许变更某一字符,注意一下) 求解方法则是根据子问题的结果"递推"出原问题的结果: 设字符串 a a a 的长度为 m m m, 字
Gram-Schmidt 正交化的简单实现 Gram-Schmidt(格拉姆-施密特) 正交化可以正交化一组给定的向量,使这些向量两两垂直,这里列出一份简单的实现(Lua): -- vector addfunction add(a, b)if a and b and #a == #b thenlocal ret = {}for i = 1, #a dotable.insert(ret,
矩阵求逆的简单实现 矩阵求逆有很多种方法,使用伴随矩阵可能是相对易于编码的方式,在此简单列一下实现(Lua): -- matrix store is table in row order-- e.g. 2 x 2 matrix is stored as table { m11, m12, m21, m22 }-- determinant 2 with scalar elementsf
扩展欧几里得算法的简单实现 扩展欧几里得算法是欧几里得算法(辗转相除法)的扩展,欧几里得算法可以用于求解两个自然数(记为 a a a 和 b b b)的最大公约数,而扩展欧几里得算法不仅可以求出 a a a 和 b b b 的最大公约数,还能同时计算出两个整数 x x x 和 y y y, 使它们满足等式(等式中的 g c d ( a , b ) gcd(a, b) gcd(
snipMate.vim 为 Vim 实现了一些 TextMate 的片段(补全)特性,片段就是使用一个 关键字后加 <tab> 键来插入一些常用的文本。 例如,在 C 文件中使用默认安装的 snipMate.vim,如果在插入模式下输入 `for<tab>`, 它将展开为典型的 C 循环: > for (i = 0; i < count; i++) { }