数据结构与算法
奔跑的追梦人
移动研发工程师, 目前专注于Android端开发
展开
-
递归实现归并排序(基本排序算法)
归并排序也是一种很有名的排序算法,分而治之的思想。但与同样是分治的快排相比,归并更侧重于“合”,“分”其实是很简单的。比较重要的一点是归并排序的递归出口问题,当下标left>=right时就不需要再递归了。归并排序的不太好的一点是空间复杂度有点儿高。前一段百度实习生招聘,有一个算法设计就是对merge函数进行优化,把空间复杂度降为O(1),有好的处理方式请留言。最常规的实现方式:原创 2012-05-28 17:25:36 · 698 阅读 · 0 评论 -
有关快速排序的几点思考
快速排序曾被评为20世纪十大算法之一,最很多情况来说都是名副其实的最快的排序算法。其实思路并不难,但在具体的代码实现时会有很多细节容易出错。也有一些细节如果不加注意会使排序效率意外降低。 大致思路是:从待排序数组中选出一个值(一般是随即选的),对数组进行分割,把小于轴值的放在左侧,大于轴值的放在右侧。然后分别对左侧数组和右侧数组继续进行排序(递归进行)。一直进行下去,最后可以得原创 2012-05-28 17:12:16 · 810 阅读 · 0 评论 -
桶式排序和基数排序
很多排序算法时间复杂度都是O(n2),也有部分排序算法时间复杂度是O(nlogn)。而桶式排序却能实现O(n)的时间复杂度。但它也有自己的不足,首先是空间复杂度比较高,需要的额外开销大。其次,局限性也很明显。待排序的元素都要在一定的范围内等等。桶式排序是一种分配排序。分配排序的特定是不需要进行关键码的比较,但前提是要知道待排序列的一些具体情况。同时排序有两个数组的空间开销,一个存放待排序数原创 2012-06-02 12:39:08 · 4513 阅读 · 0 评论 -
三种插入排序的分析(直接插入-二分插入-Shell排序)
众多排序算法中,有三种插入排序比较常用。最简单的直接插入,优化后的二分插入排序,以及Shell排序。直接插入最好理解,时间代价:最坏是O(n2),最好是O(n),平均是O(n2)。空间代价是O(1)。二分插入总的移动次数并没有减少,减少的是比较次数。在数组已经有序时,再插入新的元素,使用二分插入比较好。shell排序也是一种插入排序,但它不是相邻的进行插入,而是分组进行,不断缩小组内相原创 2012-06-02 12:30:47 · 727 阅读 · 0 评论 -
最小生成树 Prime算法
问题背景:对于一个图,它的所有生成树中必有一个“边的权值最小”的生成树,我们把它称为最小生成树。概念很抽象,换做实际问题:有十个城市,各个城市之间距离或远或近。需要建设一个道路网,把十个城市连接在一起,要求道路网的道路长度最小。各个城市的连接可以抽象为一个图,本质上即是求该图的一个最小生成树。每一个图可能有多个生成树,但最小生成树 所有边的权值之和是最小的。 Prime原创 2015-08-10 09:22:51 · 5560 阅读 · 2 评论 -
图算法 最短路径 Dijkstra算法
问题背景简介: 最短路径问题是图算法中一个典型和常用的应用问题。例如,某一地区内有N个城市,给定了这N个城市间两两之间的距离,求解城市A 和 B之间的最短距离。 抽象为数学模型:每个城市抽象为一个顶点(结点),两城市间如果有道路相通,道路抽象为边。问题即转化为求图中 两结点之间 边的权值最小的那条路径。 单源最短路径:从一个源点(Source)到其他原创 2015-08-11 16:42:03 · 2690 阅读 · 0 评论 -
动态规划 基础总结
共享之前的一次技术分享资料,主要是动态规划算法的讲解,比较基础。原创 2015-08-05 17:40:00 · 880 阅读 · 0 评论