
算法导论
skywalkerVVV
牛逼的背后都是傻逼的坚持
展开
-
算法导论第2章(2) merge 排序
合并排序 (merge sort)Merge排序的思想合并排序是“分治法”的一个例子,它的主要思想就是:分解问题到若干个更小规模的问题,解决这些小规模问题,然后把小规模的问题合并,得到大规模问题的解。合并排序也是这样子的:分解:将n个元素的排序分解为两个n/2个元素的排序解决:用合并排序法对这两个子序列进行递归的排序合并:将两个排好序的子序列进行合并得到排序结构 合原创 2013-01-25 12:52:22 · 3541 阅读 · 0 评论 -
算法导论第2章(3) 二分查找 binary search
二分查找(分治法)。二分查找也是一种分治法的实现,每一次查找将数据分为两个部分,问题规模都减小一半。这样查找的时间复杂度为logN。因为其实查找过程建立了一棵有N个节点的二叉树,查找次数是这棵树的高度 logN+1,所以复杂度是O(logN)。Java实现的二分查找查找基类/** * 查找基类 * @author junjun * */public class原创 2013-01-27 15:42:24 · 4271 阅读 · 0 评论 -
算法导论第2章(4) 分治法的应用 找逆序对 (习题2-4)
第二章习题2-4 逆序对的概念:数组s[0...N]中如果ij就表示有一个逆序对问题:对任意一个数组求其逆序对。可以使用分治法:对于一个数组S将其分为2个部分S1和S2,求S1和S2的逆序对个数,再求S1和S2合并后逆序对的个数:这个过程与merge排序的过程是一样的,可以使用merge排序来求得:例如下面是java实现:package com.junjun.algor原创 2013-01-27 17:50:44 · 3265 阅读 · 0 评论 -
那些年,我们一起学过的算法。
毕业了,工作了,java了,web开发了,JSF了,spring了, ibatis 了,lucene了,......,两年了, 那些年我们一起学过的算法, 都忘了。 每个星期完成两个算法,一年就可以完成104个算法 每个星期完成两篇新概念英语 一年就可以读104篇英文文章。 希望明年的今天,我可以是那个37.78 算法导论第一章:对算法复杂度的原创 2013-01-25 12:49:05 · 1462 阅读 · 2 评论 -
算法导论第一章:牛逼的算法使用傻逼的计算机也能得到牛逼的结果。
牛逼的算法有多重要假设计算机A每秒执行10亿条指令,计算机B每秒执行1000万条指令。一个人使用计算机A和插入排序算法 算法复杂度为O(2n2)另一个人使用计算机B和合并排序(merge sort),复杂度为(50nlogn) 假设 要对一百万个数进行排序。计算机A使用的时间是2*106*2 /109=2000秒计算机B使用的时间是 50 * 106*log106/10原创 2013-01-22 18:46:08 · 1821 阅读 · 0 评论 -
算法导论第2章(1):插入排序,算法分析
排序基类public abstract class Sort{ public static final int INCREMENT = 0; //升序 public static final int DECREMENT = 0; //降序 /** * 排序过程 * @param s 带排数列 * @param incOrDec 控制升序还是降序原创 2013-01-22 19:03:22 · 1958 阅读 · 0 评论 -
算法导论第3章
符号当 f( n) = (g(n)) ,表示当n>n0时候,存在c0 ,c1 c0 g(n) f(n) c1g(n).O符号当 f( n) = O(g(n)) ,表示当n>n0时候,存在c1 , f(n) c1 g(n). 用来表示f(n)的上界W符号当 f( n) = W(g(n)) ,表示当n>n0时候,存在c0 c0g(n) f(n) .用来表示f(原创 2013-02-25 15:39:02 · 591 阅读 · 0 评论