Fork me on GitHub

  2014年4月12日
摘要: 算法导论读书笔记(8)目录计数排序计数排序的简单Java实现基数排序基数排序的简单Java实现桶排序计数排序计数排序 假设 n 个输入元素中的每一个都是介于0到 k 之间的整数,此处 k 为某个整数。当 k = O ( n )时,计数排序的运行时间为 Θ ( n )。计数排序的基本思想就是对每一个输入元素 x ,确定出小于 x 的元素个数。有了这一信息,就可以把 x 直接放到它在最终输出数组上的位置上。COUNTING-SORT(A, B, k)1 let C[0 .. k] be a new array2 for i = 0 to k3 C[i] = 04 for j = 1... 阅读全文
posted @ 2014-04-12 18:54 sungoshawk 阅读(804) 评论(0) 推荐(0) 编辑
摘要: 算法导论读书笔记(2)目录分治法归并排序分治法分析归并排序算法的分析练习2.3-22.3-42.3-52.3-7思考题在归并排序中对小数组采用插入排序逆序对脚注分治法算法设计的方法有很多。插入排序 使用的是 增量 (incremental)方法:在排好子数组 A [ 1 .. j - 1 ]后,将元素 A [ j ]插入,形成排好序的子数组 A [ 1 .. j ]。此外,有很多算法在结构上是 递归 的:为了解决一个给定的问题,算法要一次或多次地递归调用其自身来解决相关子问题。这些算法采用的是 分治策略 (divide-and-conquer):将原问题划分成 n 个规模较小而结构与原问题相似 阅读全文
posted @ 2014-04-12 18:53 sungoshawk 阅读(1865) 评论(0) 推荐(2) 编辑
摘要: 算法导论读书笔记(3) 目录 渐近符号 Θ 记号 O 符号 Ω 记号 o 记号 ω 记号 函数间的比较 渐近符号 当输入规模大到使运行时间只和增长的量级有关时,就是在研究算法的 渐近 效率。就是说,从极限角度看,我们只关心算法运行时间如何随着输入规模的无限增长而增长。 表示算法的渐近运行时间的记号是 阅读全文
posted @ 2014-04-12 18:53 sungoshawk 阅读(1171) 评论(1) 推荐(0) 编辑
摘要: 算法导论读书笔记(4)目录最大子数组问题分治法解决最大子数组问题最大子数组问题的简单Java实现最大子数组问题分析最大子数组问题假设你要投资挥发性化学品公司。就像这家公司生产的化学品那样,该公司的股价也相当的不稳定,而且你一次只能买入一股并在之后的某个时间点卖出。为了弥补这种限制,你可以知道未来几天的股价。你的目标就是最大化你的收益。下图显示的是公司17天之内的股价。当然,你会想要在最低点买入,在最高点卖出。但不幸的是,上图中的最低点发生在最高点之后。又或者换一种策略:找出最高点和最低点,从最高点向左找之前的最低点,从最低点向右找之后的最高点,分别找出这两种情况的最大收益,然后取值大的那个序对 阅读全文
posted @ 2014-04-12 18:53 sungoshawk 阅读(1087) 评论(0) 推荐(0) 编辑
摘要: 算法导论读书笔记(5)目录堆保持堆的性质建堆堆排序算法堆结构和堆排序算法的简单Java实现练习6.2-26.2-5堆(二叉) 堆 数据结构是一种数据结构,它可以被视为一棵完全二叉树。树中每个结点与数组中存放该结点值的那个元素对应。树的每一层都是填满的,最后一层从左子树开始填。表示堆的数组 A 是一个具有两个属性的对象: A.length 是数组中元素的个数, A.heap-size 是存放在 A 中的堆元素个数。此处有 A.heap-size = A [ i ]。即某个结点的值至多和其父结点一样大。这样,堆中的最大元素就存放在根结点中。最小堆的组织方式刚好相反,最小堆特性是指除了根以外的每个结 阅读全文
posted @ 2014-04-12 18:53 sungoshawk 阅读(1332) 评论(0) 推荐(0) 编辑
摘要: 算法导论读书笔记(6)目录优先级队列练习6.5-76.5-8优先级队列堆的一个很常见的应用:作为高效的 优先级队列 (priority queue)。队列也有两种:最大优先级队列和最小优先级队列。优先级队列 是一种用来维护由一组元素构成的集合 S 的数据结构,这一组元素中的每一个都有一个关键字 ke... 阅读全文
posted @ 2014-04-12 18:53 sungoshawk 阅读(821) 评论(2) 推荐(0) 编辑
摘要: 算法导论读书笔记(7)目录快速排序快速排序的简单Java实现快速排序的性能最坏情况划分最佳情况划分快速排序的随机化版本比较排序快速排序快速排序是一种原地排序算法,对包含 n 个数的输入数组,最坏情况运行时间为 Θ ( n2 )。虽然这个最坏情况运行时间比较差,但快速排序通常是用于排序的最佳的实用选择。这是因为其平均性能相当好:期望的运行时间为 Θ ( n lg n ),且 Θ ( n lg n )记号中隐含的常数因子很小。像合并排序一样,快速排序也是基于分治模式的。下面是对一个子数组 A [ p .. r ]排序的分治过程的三个步骤:分解:数组 A [ p .. r ]被划分成两个(可能为空) 阅读全文
posted @ 2014-04-12 18:53 sungoshawk 阅读(2241) 评论(0) 推荐(0) 编辑
摘要: 算法导论读书笔记(1)目录算法插入排序循环不变式与插入算法的正确性算法分析插入排序算法的分析练习2.1-22.1-32.1-42.2-2算法所谓 算法 (algorithm)就是定义良好的计算过程,它取一个或一组值作为 输入 ,并产生出一个或一组值作为 输出 。亦即,算法就是一系列的计算步骤,用来将... 阅读全文
posted @ 2014-04-12 18:52 sungoshawk 阅读(2709) 评论(1) 推荐(3) 编辑
  2014年3月8日
摘要: 使用Maven构建RichFaces 4.x项目目录开始之前第一步 - 创建Maven项目第二布 - 添加依赖文件第三步 - 配置RichFaces第四步 - 创建显示页面开始之前本文将简要介绍一下如何在Maven项目中引入RichFaces 4.x。部分内容参考自RichFaces的官方文档。以下... 阅读全文
posted @ 2014-03-08 20:58 sungoshawk 阅读(1775) 评论(0) 推荐(0) 编辑
  2012年11月24日
摘要: 部分习题:exercise 2.73a)对求导过程来说,数字和变量的表示形式对任何“类型标志”(例如+)都是一致的,没有必要实现不同的表示方式。b) 1 (define (install-deriv-sum-package) 2 ;internal procedure 3 (define (addend s) (cadr s)) 4 (define (augend s) (caddr s)) 5 (define (make-sum a1 a2) 6 (cond ((=number? a1 0) a2) 7 ((=number? a2 0) a1) 8 ... 阅读全文
posted @ 2012-11-24 20:07 sungoshawk 阅读(236) 评论(0) 推荐(0) 编辑
  2012年11月13日
摘要: 基本过程:1 (eq? <symbol1> <symbol2>) ;判断连个符号是否相同2 (cadr <list>) => (car (cdr <list>))3 (number? <num>)4 (symbol? <sym>)范例:霍夫曼编码树定长编码(fixed-length codes):采用同样数目的二进制位表示消息中的每个字符。变长编码(variable-length codes):采用不同数目的二进制位表示不同字符。前缀码(prefix code):每个字符的完整编码都不是另一字符的开始一段。霍夫曼编码 阅读全文
posted @ 2012-11-13 13:35 sungoshawk 阅读(214) 评论(0) 推荐(0) 编辑
  2012年11月11日
摘要: 设计原则:约定的界面(conventional interfaces)。范例:“流结构”化的 sum-odd-squares 和 even-fibs 1 (define (filter predicate sequence) 2 (cond ((null? sequence) '()) 3 ((predicate (car sequence)) 4 (cons (car sequence) 5 (filter predicate (cdr sequence)))) 6 (else (filter... 阅读全文
posted @ 2012-11-11 00:55 sungoshawk 阅读(392) 评论(0) 推荐(0) 编辑
  2012年11月9日
摘要: 闭包:通过闭包组合起数据对象得到的结果本身还可以通过同样的操作再进行组合。 (In general, an operation for combining data objects ststisfies the closure property if the results of combining things with that operation can themselves be combined using the same operation.)序列(sequence):如图所示,序列由一个序对(pair)的链表(list)表示。每个序对的 car 部分对应于这个链中的条目, c. 阅读全文
posted @ 2012-11-09 23:33 sungoshawk 阅读(290) 评论(0) 推荐(0) 编辑
  2012年11月3日
摘要: 基本过程:1 (cons n d)2 (car x)3 (cdr x)部分习题:exercise 2.11 (define (make-rat n d)2 (let ((g (gcd n d)))3 (if (negative? (* n d))4 (cons (- (abs (/ n g))) (abs (/ d g)))5 (cons (abs (/ n g)) (abs (/ d g))))))exercise 2.2 1 (define (average x y) 2 (/ (+ x y) 2)) 3 (d... 阅读全文
posted @ 2012-11-03 23:09 sungoshawk 阅读(220) 评论(0) 推荐(0) 编辑
  2012年11月2日
摘要: 特殊形式(special form):1 (lambda (<formal-parameters>) <body>)2 (let ((<var1> <exp1>)3 ...4 (<varn> <expn>))5 <body>)等价形式: 1 (define (plus4 x) (+ x 4)) 2 等价于 3 (define plus4 (lambda (x) (+ x 4))) 4 5 (let ((<var1> <exp1>) 6 ... 7 (<varn> <ex 阅读全文
posted @ 2012-11-02 00:23 sungoshawk 阅读(278) 评论(0) 推荐(0) 编辑