- 博客(17)
- 收藏
- 关注
原创 初等算法
经过6年,我终于写完了《初等算法》一书。这本书完全免费,可以从这里下载电子版:[url]https://github.com/liuxinyu95/AlgoXY/releases/download/v0.618033/elementary-algorithms-zh-cn.pdf[/url]Why算法书籍汗牛充栋,《算法导论》,《计算机程序设计艺术》,《计算机程序的构造和解释》……...
2014-07-22 20:46:36
248
原创 初等查找算法
这一章包含如下内容:- 扫描查找- 分治查找- 二维Saddleback search- 字符串查找 -KMP -BM- 解的查找 DFS BFS Greedy DP详细内容见链接中的PDFhttps://dl.dropboxusercontent.com/u/52705490/search-en.pdf...
2014-06-08 07:47:56
138
原创 一堂有趣的计算机课
昨天讨论了一些Computing at school的内容。受到Richard Bird在Pearls of functional algorithm design一书中Saddleback search一章的启示,我这里抛砖引玉,给出一个我心目中的中学计算机课的例子。教师:同学们,早上好。想必你们都吃过了营养丰富的早餐。现在该补充一些维生素了。同学们每人都会得到一串葡萄和几个...
2013-07-25 13:27:25
628
原创 Quick sort V.S. Merge sort
终于写完了这一章本章全面地涉及了quick sort和merge sort的方方面面。同其他章节一样,即覆盖传统的imperative算法,也覆盖functional(函数式)算法。首先展示的是著名的只有2行的Haskell快速排序算法。之后,针对Partition给出了一些小的改进。并且用两种方法严格证明了快速排序的平均性能。此后,我给出了各种著名的工程方法:2路partitio...
2013-04-09 14:48:26
171
原创 POJ 1061青蛙的约会题解
POJ 1061青蛙的约会题解网上似乎有不少此题的解法。我这个post和其他人的相比主要时想说下面几点。1. 给出一个试图不死记硬背公式的思路;2. 谈谈暴力解为什么看起来这么诱人,却无法通过;3. 一些细节及对此题的评价(个人观点)原题请参考poj: http://poj.org/problem?id=1061我认为ACM/ICPC应该给人思维的快乐,甚至带有...
2013-02-28 13:06:14
903
1
原创 从吃葡萄到世界杯——选择排序的进化
和插入排序一样,选择排序通常被认为是一种hello world式的排序。通常被用来作为例子向初学者讲解多层循环。它有着特别直观的结构,但是性能却是O(N^2)的。在这一章中,我将向读者展示,选择排序也可以不断进化:既有简单的改进(诸如cock-tail排序),也有从本质上改进数据结构(使用tournament knock out和heap sort),从而最终使得基于选择的排序方法也达到比...
2013-02-10 17:25:11
82
原创 AlgoXY, Why another algorithm book ?
相信一定有人问?我们有这么多经典优秀的算法书: - TAOCP: Donald E. Knuth, The art of computer programming; - CLRS: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein. ``Introduction to Algorithms...
2013-01-08 13:47:06
120
原创 List
单向链表是几乎所有函数式编程语言的环境的基石。它的重要性,就如同数组对于imperative编程语言的重要性一样。(有读者可能会质疑:lambda才是函数式编程中最最基础的;作者认为lambda对于函数式编程,如同汇编语言对于imperative一样,是计算模型的基础表达方式。)经过两个月的持续写作,关于单向链表的内容终于脱稿了。尽管List非常重要,但是作者并不打算把它作为AlgoXY一...
2013-01-05 13:16:52
81
原创 Sequence
经过了14个月锱珠积累,这一章终于脱稿了。这一章具有里程碑式的意义。这一章写好后,所有的基本数据结构,从易到难:二叉树,红黑树,AVL树,Trie,Patricia, Suffix tree,B-tree,binary heap,Leftist Heap, Skew Heap, 二项式heap,斐波纳契Heap,队列,序列就全部给出了函数式实现。我们面前已经没有任何基本数据...
2012-10-10 15:50:26
99
原创 Natural merge sort
通常我们见到的merge sort的思路是典型的分而治之divide and conquer策略:1. 如果待排序序列为空,或者只有1个元素,结束2. 否则,将序列一分为二,将两个子序列分别merge sort,再将两个排好的子序列merge我们也可以从另外一个角度出发,序列中存在一些已经排好的片段,我们可以把这些排好的片段merge起来,不断重复直到序列排好(只含有一个排好的片段...
2012-07-11 13:20:09
369
原创 谁主张、谁举证 ACM crashing balloon / zoj 1003
题目详情可以参考这里:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3ZOJ上的判定标准是:b不服,站出来质疑;如果a能举证说:你瞧,存在一种合理的解释,a = a[1]*a[2]*…*a[n], b = b[1]*b[2]*…*b[m]; 其中 2...
2012-07-03 18:15:52
114
原创 队列,并非想象的那样简单
经过近两年的时间,我终于写完了这一章。正如我在Algoxy第一章描述的,Queue并非想象的那样简单。尤其是提供一个纯函数式的队列,并且满足常数时间的头部和尾部操作并不容易。本章中,我们给出几种不同的队列的纯函数式实现。当然,用常见的imperative语言实现队列很容易,尤其是使用双向链表。但是这是一个overkill的解法,我们先用单向链表实现一个头部尾部都是常数时间的队列...
2012-07-03 18:08:44
82
原创 二项式堆、斐波纳契(Fibonacci)堆和Pairing堆
通常的数据结构和算法教科书介绍的堆,实际上是用数组隐式表达的二叉树堆(binary heap by implicit array),如果将概念扩展为多叉树或者森林,就会得到更多有趣的堆。本章介绍的3种堆,就是其中很有代表性的数据结构。其中二项式堆把合并的速度提高到了O(lg N)的量级,如果把二项式堆的某些操作延迟进行,就得到了Fibonacci堆,Fibonacci堆的各项指标除了pop...
2012-02-21 14:36:45
372
原创 AVL tree,比红黑树更朴素
AVL树发明于上世纪60年代,比红黑树早了近十年。上一章里,我展示了用pattern matching实现的红黑树。本章我展示同样策略实现的AVL tree。相比于传统的基于旋转的解法,这一解法再次展示了简单一致的特点。本章内容如下: - 简单介绍;给出AVL树的高度与节点数的证明; - 类比红黑树的思路; - 解: - pattern matching...
2011-08-15 15:34:54
158
原创 红黑树,并非想象中的那么复杂
红黑树是非常popular的一种self-adjusted的平衡二叉排序树。通常他给我们的印象是很复杂,有很多case,要小心的旋转。有人说,曾将在某公司的面试时,被要求实现红黑树。他觉得这很没有道理,几乎很少有人能在不参考教科书的情况下,记清楚那么多的case。在这一章里,我将向你展示目前我所见过的最简洁的红黑树实现。简洁到什么程度呢?我打赌你看过后能轻松通过上面的面试——Wow...
2011-06-02 14:48:09
300
原创 为什么要学习算法和数据结构
这篇是AlgoXY的Preface或者说是Introduction.经常有程序员询问:“算法有用么?”,“我工作以来从来没有用过任何算法”,“硬件越来越快,不用算法我的程序也能工作吧?”。”STL提供了那么多算法和数据结构,我能调用就可以了,不用管他们的实现了吧?“本文给出两个趣题,第一道题目展示算法的威力,第二道题目展示数据结构的威力。第一道题目是在一组ID中,找出最小的...
2011-04-22 17:17:30
140
原创 排序二叉树, 数据结构中的hello world
今年把两年前写的这篇文章重写了一遍。作为AlgoXY的第一章。重写后,不要求读者懂任何一门特定的编程语言。全部算法提供了两种描述: 伪代码描述和数学函数描述。有些地方给出了C++, Python, Haskell的代码片段,但是读者可以完全不懂这些具体的编程语言。这一章主要希望说,BST实际上可以认为是数据结构这个世界中的 Hello world内容。有些读者可能认为...
2011-04-19 18:24:01
118
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人