03 2017 档案
摘要:众所周知,归并排序的时间复杂度是O(N*lgN) 归并排序的时间复杂度推导书上网上一抓一把,但是多数证明都是基于N=2k这个假设来证明的,下面我给出一般情况的证明。 先上归并排序代码: 根据代码可以看出,时间消耗主要在我标红的3个地方,可以得出: 我们知道每一个整数都可以表示为2i+k的形式,如1=
阅读全文
摘要:定义 给定两个字符串s1和s2,两者的编辑距离定义为将s1转换为s2的最小编辑操作数(等价于将s2转换为s1的最小编辑操作数)。 编辑操作有3种:插入一个字符、删除一个字符、替换一个字符。 例如:cat和cbt的编辑距离是1(将a替换为b);cat到ca的编辑距离是1(删除t);ct到cat的编辑距
阅读全文
摘要:二分查找是一个非常常用且简洁的查找算法,相信很多人也知道它的时间复杂度是logN,但是我看网上的大多数博客给出的所谓推导过程都十分不严谨,于是我花了些时间自己写了推导过程。 首先上二分查找的代码: 下面是推导过程: 假设数据的规模为N(即每次调用时的high-low),程序执行的比较次数表示为C(N
阅读全文
摘要:最近买了本《算法 第4版》打算看看算法,本来抱着割草的心理想快速过完第一章的基础知识然后去看红黑树神马的,结果居然被第一章的算法分析里一个小问题卡住了半天时间。决定记录一下。 问题描述 问题灰常简单,可以简单描述为:请问下面代码当n=100的时候,最终count等于多少(即最内层的for循环执行了多
阅读全文
摘要:概述 先来回顾一下java中的等待/通知机制 我们有时会遇到这样的场景:线程A执行到某个点的时候,因为某个条件condition不满足,需要线程A暂停;等到线程B修改了条件condition,使condition满足了线程A的要求时,A再继续执行。 自旋实现的等待通知 最简单的实现方法就是将cond
阅读全文