![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Mr.zhao's-blog
这个作者很懒,什么都没留下…
展开
-
最长公共子序列问题,证明及优化后代码(证明主要摘自《算法导论》)
一、证明看了leetcode上很多相关的题解,主要思路都是动态规划(dp),但都没有给出所用递推公式的数学证明,我一直没能理解为什么那么做能求出正确的答案,为此查了手头上能找到的大部分相关的算法资料,最后终于在算法导论是找到了相关的数学证明。首先是对递推公式的证明,如下:注:(文中图片都截取自《算法导论》第三版)其中Xi是序列X的从0到i的前缀,定义如下:对于定理15.1中(2):因为Z是X和Y的LCS,所以Z中每个字母都同时在X和Y中,且顺序不变。如果Zk!== Xm,且Zk在X中一原创 2020-12-15 16:21:58 · 1034 阅读 · 2 评论 -
几种常见排序算法的实现及运行时间对比
// 冒泡排序function popSort(arr) { if (arr.length < 2) return arr; let n = arr.length; while (n > 1) { let exchanged = false; for (let i = 0; i < n - 1; i++) { if (arr[i] > arr[i + 1]) { exc.原创 2020-12-09 00:53:25 · 1214 阅读 · 0 评论 -
解算法题的一些基本技巧
### 解题的流程1. 理解题意2. 思考所有可能的解法,以及对应的时间空间复杂度3. 选择想到的最优解法编写代码4. 写测试用例### 写代码的流程1. 想清楚代码的初始状态,递推公式/遍历要执行的操作,终止条件2. 编写初始化,循环遍历代码3. 处理边界值4. 返回结果### 常用的一些思想0. 使用哈希表降低各种查找,存在判断的时间消耗(空间换时间)1. 升维,例如跳表或cpu缓存的设计 (空间换时间)2. 递归(分治),尽量使用迭代来替换递归3. 双指针4. 快慢指原创 2020-12-07 22:20:30 · 282 阅读 · 2 评论