
算法导论
小小程序猿_
志不强者智不达,言不信者行不果。
展开
-
《算法导论》学习心得(六)—— 计数排序(Java)
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。[1-2原创 2014-11-15 21:13:10 · 618 阅读 · 0 评论 -
Dijkstra算法——《算法导论》学习心得(十三)
这两天在做一个项目,关于北京市出租车的,然后用到了Dijkstra算法,所以这篇文章就先写Dijkstra算法了。在大二下的时候学了数据结构,书里面也讲了Dijkstra算法,但是当时怎么也没理解,结果考试的时候就考了,哎蛋疼!现在用到了,又得硬着头皮去学,结果很快弄明白了,只是在写代码时出了一些很低级的错误,调Bug用了不少时间。最后总结只能说:不是你不会,而是没到你非会不可的地步!在这篇文章里我就用实际的项目给大家讲Dijkstra算法。原创 2014-12-21 19:30:11 · 4258 阅读 · 0 评论 -
《算法导论》学习心得(八)—— 桶排序(JAVA)
桶排序:本身桶排序的概念就太确定,有的人把计数排序也称为桶排序(各个桶中元素的排序采用计数排序),得到数组C后直接从前往后遍历,输出数组值次数组下标,为0就不输出(或者存入原数组,不稳定),不过我认为这种说法不严谨(一个很明显的问题是输出会是双重for循环,不过也有那个意思,叫鸽巢排序也未尝不可),因为桶排序要求输入数据在[0,1)范围内(计数排序要求整数;实际上要么全是整数,要么小数,便于划分桶),先把区间[0,1)划分成n个相同大小的子区间,称为桶,然后将n个输入数分布到各个桶中去。原创 2014-11-21 19:05:16 · 914 阅读 · 0 评论 -
《算法导论》学习心得(十一)—— 队列(JAVA)
队列:先进先出(FIFO)——先进队列的元素先出队列。来源于我们生活中的队列(先排队的先办完事)。原创 2014-12-04 09:51:43 · 527 阅读 · 0 评论 -
《算法导论》学习心得(五)—— 快排(Java)
快排(QuickSort):顾名思义就是很快的排序,达到排序算法效率的紧确界。是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。原创 2014-11-14 18:11:42 · 530 阅读 · 0 评论 -
《算法导论》学习心得(三)—— 归并排序(Java)
源码下载。看书看到第二部分了——排序,排序的算法主要有插入排序,归并排序,冒泡排序,堆排序,快速排序,计数排序,基数排序和桶排序,本文就先讲插入排序,归并排序和冒泡排序。冒泡排序——它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。一种非常简单的排序算法,代码如下:原创 2014-11-07 10:49:26 · 759 阅读 · 0 评论 -
《算法导论》学习心得(九)——栈(JAVA)
哎,上周还是没有坚持写博客,也许可能是因为聚会吧和实习的缘故吧,但这些都不是理由,现在到中科院了,时间就很充分了,以后每周坚持至少写3篇。废话少说,今天开始学基本数据结构,第一讲栈!栈:作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。原创 2014-12-03 19:56:32 · 486 阅读 · 0 评论 -
二叉搜索树——《算法导论》学习心得(十二)
不得不说二叉查找树的插入和删除非常麻烦,可谓是费了九牛二虎之力才把代码写完。支持Insert,Delete,Search,Min,Max,Successor,Predecessor等操作。BST在数据结构中占有很重要的地位,一些高级树结构都是其的变种,例如AVL树、红黑树等,因此理解BST对于后续树结构的学习有很好的作用。原创 2014-12-15 08:57:21 · 705 阅读 · 0 评论 -
《算法导论》学习心得(四)—— 堆排序(Java)
堆排序是一种很常见的排序方法,它的思想是利用数据结构--堆。具体的实现细节: 1. 构建一个最大堆。对于给定的包含有n个元素的数组A[n],构建一个最大堆(最大堆的特性是,某个节点的值最多和其父节点的值一样大。这样,堆中的最大元素存放在根节点中;并且,在以某一个节点为根的子树中,各节点的值都不大于该子树根节点的值)。从最底下的子树开始,调整这个堆结构,使其满足最大堆的特性。当为了满足最大堆特性原创 2014-11-08 09:23:04 · 566 阅读 · 0 评论 -
《算法导论》学习心得(七)—— 基数排序
看了几篇文章,发现基数排序已经有很好的帖子,自认为没有原创 2014-11-17 09:16:44 · 1641 阅读 · 0 评论 -
《算法导论》学习心得(二)—— 矩阵乘法之Strassen算法
在开始之前,请点击下载源码。提起矩阵乘法,你也许会说不就是三次循环就解决问题了吗,这有什么好说的。是啊,三个循环确实是完事了,时间效率是O(n^3),这是我们上第一节线代老师就清清楚楚的告诉我们的,但是他没有告诉你还有比这更好的矩阵乘法,时间效率为O(n^{log_2 7}) = O(n^{2.807}),也许你觉得这没有什么,就提高了0.2几,没啥,但是你想过没有,当N=100,10000的时候呢,Strassen算法和传统方法又有多少差别呢,让我们来看一下Strassen算法和传统方法的效率对比图:原创 2014-10-31 22:23:32 · 5853 阅读 · 0 评论