自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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关注的人

提示
确定要删除当前文章?
取消 删除