随笔分类 -  算法与数据结构

图算法(三):两种基本图算法的应用实例
摘要:一、隐式图搜索作用在解答树,是一种广度优先遍历的方法。解答树,或者更一般的状态图,在某些问题中规模本身是无限的,但是通常能嗅到如“最简单”,“最短”,“最少”等字眼,这就意味着广度优先遍历。再回忆广度优先遍历的实现,由一个队列保存新发现的节点,并且有这样的距离关系:新发现的节点与源节点的距离=其父节点与源节点的距离+1广度优先遍历的实现: 1 #用字典保存一个图的邻接表形式 2 g = {'A': ['B', 'C'], 3 'B': ['A', 'D', 'E'], 4 ' 阅读全文

posted @ 2013-11-17 22:34 zjgtan 阅读(1487) 评论(0) 推荐(0)

算法与数据结构(三)图算法
摘要:图的搜索技术是图算法领域的核心。1、图的表示 通常采用两种方法表示一个图G=(V, E),即邻接表和邻接矩阵。 邻接表,表示稀疏图,需要的存储空间为O(V+E) 邻接矩阵,表示稠密图,需要的存储空间为O(V^2)2、广度优先搜索 广度优先搜索是Prim最小生成树算法和Dijkstra单源最短... 阅读全文

posted @ 2013-10-25 13:54 zjgtan 阅读(400) 评论(0) 推荐(0)

算法与数据结构(二):排序
摘要:趁着需要面试百度的机会,复习了常用的排序方法。 1、快速排序 平均时间复杂度:O(nlogn),最差情况时间复杂度:O(n^2),即序列以有序的情况 空间复杂度:O(1),不需要开辟额外的空间 实现细节:递归的分而治之, 在每一个递归中,将最后一个数作为比较数mid,pa指示小于的部分,pb指示大于等于mid的部分。 当pa=pb时,比较结束。将序列分割为小于mid、等于mid和大于mid三... 阅读全文

posted @ 2013-10-19 11:38 zjgtan 阅读(259) 评论(0) 推荐(0)

冒泡排序
摘要:性能:最佳时间复杂度O(n),最差时间复杂度O(n^2)下面是改进的冒泡排序算法public void bubbleSort(int arr[]) { boolean didSwap; for(int i = 0, len = arr.length; i < len - 1; i++) { didSwap = false; for(int j = 0; j < len - i - 1; j++) { if(arr[j + 1] < arr[j]) { swap(arr, j, j + 1); ... 阅读全文

posted @ 2013-10-12 23:04 zjgtan 阅读(141) 评论(0) 推荐(0)

内部排序:归并排序
摘要:基本思想:将序列不断的平衡划分,直到最小粒度上(仅有一个元素),不断向上在划分间归并得到排序元素。时间复杂度:O(nlogn) 解释每一层递归都执行n/2次比较(所有的两辆划分间),递归深度为logn关于递归:1、犯了一个错误:mid = (end + start) / 2 mid = (end - start) / 2 + start2、继续划分的条件:start < end3、需要保持一个n的辅助数组,将归并的中间数据copy到辅助数组中,因为在执行归并是两个归并段是不能变的,归并完成后在写回到array中上递归。import java.io.BufferedReader; impo 阅读全文

posted @ 2013-09-26 20:53 zjgtan 阅读(279) 评论(0) 推荐(0)

外部排序:多路归并树
摘要:定义:1、按可用内存大小,将外存上的记录文件分成若干个归并段(segments) 2、依次读入内存并利用有效的外部排序方法进行排序3、将排序后的有序子文件写入外存实现:利用败者树进行k路归并,使得每次归并在k个记录中选出最小记录仅需进行次(二叉树的深度)比较,从而使总的归并时间为。其中,m为初始归并段个数,n为总记录数,每次比较时间。败者树:典型的4路败者树如下图: ----------à 直观的,败者树是一棵完全二叉树,可由数组保持。其中根节点保存一次比较中的冠军;叶节点保存4个归并段的输入流;非叶结点保存一次比较中的败者。难点1:一轮比较选出最小关键记录并调整败者树调整的发起点: 阅读全文

posted @ 2013-09-12 15:11 zjgtan 阅读(7889) 评论(0) 推荐(0)

导航