随笔分类 -  算法数据结构整理篇

每一篇都要保证质量。
摘要:1、阿里某个笔试题,两个字符串text,query,找到text中包含的最长的query的字串:public static String subStr(String text, String query) { if (text != null && query != null) { ... 阅读全文
posted @ 2014-08-30 18:24 楠楠IT 阅读(264) 评论(0) 推荐(0)
摘要:算法分析的一般步骤:1、文字描述:如果一个算法文字描述不清楚,就说明思路不清楚,也不可能写好。prim算法是实现图的最小生成树。既然是图,就假设包含n个顶点,m条边。prim算法是从顶点出发的,其算法时间复杂度与顶点数目有关系。(注意:prim算法适合稠密图,其时间复杂度为O(n^2),其时间复杂度与边得数目无关,而kruskal算法的时间复杂度为O(eloge)跟边的数目有关,适合稀疏图。)算法思路:从某个顶点开始,假设v0,此时v0属于最小生成树结点中的一个元素,该集合假设u,剩下的V-v0为待判定的点,此时选取u中的顶点到V-v0中顶点的一个路径最小的边,并且将其中非u中的顶点加入到u中 阅读全文
posted @ 2013-11-27 19:30 楠楠IT 阅读(21637) 评论(0) 推荐(0)
摘要:算法时间复杂度分析很重要,我们要优化代码,让计算机轻松一点。算法分析,在n个随即数中查找某个数字,最好的情况是第一个数字就是,此时时间复杂度为O(1),若最后一个数字才是我们要找的,那么时间复杂度 是O(n),这是最坏的情况。而平均运行时间是从概率的角度看,若数字在每一个位置都可能出现,则平均查找次数为n/2次。平均运行时间是所有情况中最有意义的,因为它是期望的运行时间。可现实中,平均运行时间很难通过分析得到,一般都是通过运行一定数量的实验数据后估算而来的。而最坏运行时间是一种保证,那就是运行时间不会再坏了。在应用中,这是最重要的需求,通常,除非特别指定,我们提到的运行时间都是最坏情况下的运行 阅读全文
posted @ 2013-11-19 11:28 楠楠IT 阅读(317) 评论(0) 推荐(0)
摘要:上代码,本文用了三种方法实现,时间复杂度不一样,空间复杂度都是o(1):public class ArrayKMove { /** * 问题:数组的向左k平移,k小于数组长度 * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ArrayKMove kmove = new ArrayKMove(); kmove.methodOne(); kmove.methodTwo()... 阅读全文
posted @ 2013-10-20 09:14 楠楠IT 阅读(3620) 评论(0) 推荐(0)