
精通数据结构系列
文章平均质量分 79
foreach_break
专注web、分布式、数据库、数据处理。
展开
-
最小生成树-克鲁斯卡尔算法(kruskal's algorithm)实现
克鲁斯卡尔算法是一种贪心算法,因为它每一步都挑选当前最轻的边而并不知道全局路径的情况. 算法最关键的一个步骤是要判断要加入mst的顶点是否会形成回路,我们可以利用并查集的技术来做。并查集的具体实现可参考:快速并查集下面是对算法的一个简单描述: 这是一个非常简单易懂的算法,它面向边而不是顶点,所以在算法开始的时候,它要先找出所有的crossing edges,而为了高效的找到最轻边,用一个优先队列原创 2015-04-21 12:05:11 · 3814 阅读 · 0 评论 -
大文件,5亿整数,怎么排?
大文件,大小4663M,5亿个数,文件中的数据随机,怎么排?原创 2015-06-15 06:14:04 · 5206 阅读 · 7 评论 -
你好,树
嗯,如果你是抱着看生态文章的态度进来,那只能说你被我坑了.原创 2015-05-12 14:10:25 · 2364 阅读 · 0 评论 -
最小生成树-普利姆算法eager实现
在普利姆算法的lazy实现中,参考:普利姆算法的lazy实现 我们现在来考虑这样一个问题: 我们将所有的边都加入了优先队列,但事实上,我们真的需要所有的边吗?我们再回到普利姆算法的lazy实现,看一下这个问题: 当顺着顶点0的邻接表考察顶点7时,边7-2和边7-1被加入了优先队列Q.然而,当我们开始对顶点2进行考察时: 边2-3是最轻边,我们显然不需要对边7-2和边7-1进行再次考原创 2015-04-21 23:20:11 · 1881 阅读 · 0 评论 -
我们为什么需要Map-Reduce?
在讨论我们是否真的需要Map-Reduce这一分布式计算技术之前,我们先面对一个问题,这可以为我们讨论这个问题提供一个直观的背景。问题我们先从最直接和直观的方式出发,来尝试解决这个问题: 先伪一下这个问题:SELECT COUNT(DISTINCT surname) FROM big_name_file我们用一个指针来关联这个文件.接着考察每一行的数据,解析出里面的姓氏,这里我们可能需要一个姓氏原创 2015-04-26 04:11:16 · 3028 阅读 · 0 评论 -
由最小生成树(MST)到并查集(UF)
背景最小生成树(Minimum Spanning Tree)的算法中,克鲁斯卡尔算法(Kruskal‘s algorithm)是一种常用算法.在克鲁斯卡尔算法中的一个关键问题是如何判断图中的两个点是否形成环(cycle),那么一种高效的判断方式就是使用并查集技术(Union-Find).代码package com.beifeng.haoran.util;/** *原创 2015-04-20 00:00:16 · 1423 阅读 · 1 评论 -
索引式优先队列(indexed priority queue)
为了达到O(ElogV)的效率,需要对普利姆算法进行eager实现。 如果我们用java来做,jdk当中的priorityQueue并不能满足我们的要求。 因为我们需要进行一个对索引元素降key的操作(decrease-key)./** * 将索引所关联的key降到newKey * * @param index 索引 * @param newKey 新的k原创 2015-04-21 11:31:36 · 2588 阅读 · 0 评论 -
最小生成树-普利姆算法lazy实现
lazy普利姆算法的步骤: 1.从源点s出发,遍历它的邻接表s.Adj,将所有邻接的边(crossing edges)加入优先队列Q; 2.从Q出队最轻边,将此边加入MST. 3.考察此边的两个端点,对两个端点重复第1步.例子: 从顶点0开始,遍历它的邻接表:边0-7、0-2、0-4、0-6会被加入优先队列Q. 顶点0的邻接表搜索完毕后,边0-7是最轻边,所以它会出队,并加入M原创 2015-04-21 22:11:16 · 2271 阅读 · 0 评论 -
说说最小生成树(Minimum Spanning Tree)
minimum spanning tree(MST) 最小生成树是连通无向带权图的一个子图,要求 能够连接图中的所有顶点、无环、路径的权重和为所有路径中最小的.graph-cut 对图的一个切割或者叫切断,会使图分离成为两个不相连的顶点集. 它基于树的两个基本属性: 为树的任意两个节点间添加一条边,会在树中形成一个环. 删去树中的一条边,会将原树分离成两棵不相连的树.cros原创 2015-04-20 14:24:15 · 5209 阅读 · 0 评论 -
单源最短路径-迪杰斯特拉算法(Dijkstra's algorithm)
Dijkstra’s algorithm迪杰斯特拉算法是目前已知的解决单源最短路径问题的最快算法. 单源(single source)最短路径,就是从一个源点出发,考察它到任意顶点所经过的边的权重之和为最小的路径.迪杰斯特拉算法不能处理权值为负数或为零的边,因为本质上它是一种贪心算法,出现了负数意味着它可能会舍弃一条正确的边,而选择一个长边和一个负数边,因为长边和负数边的权值之和可能小于那条正原创 2015-04-22 06:22:02 · 1547 阅读 · 0 评论 -
外部排序,杀鸡焉用牛刀?
天下武功,唯快不破,冰冻三尺,一日之寒?原创 2015-06-15 06:17:52 · 3346 阅读 · 1 评论