02 2015 档案

摘要:K-Means 是一种基于距离的排他的聚类划分方法。K-Means 基本原理:给定划分数量 k。创建一个初始划分,从数据集中随机地选择 k 个对象,每个对象初始地代表了一个簇中心(Cluster Centroid)。对于其他对象,计算其与各个簇中心的距离,将它们划入距离最近的簇。采用迭代的重定位技术,尝试通过对象在划分间移动来改进划分。所谓重定位技术,就是当有新的对象加入簇或者已有对象离开簇的时候,重新计算簇的平均值,然后对对象进行重新分配。这个过程不断重复,直到各簇中对象不再变化为止。K-Means 算法最常见的实现方式是使用迭代式精化启发法的 Lloyd's algorithm。 阅读全文
posted @ 2015-02-09 23:06 sangmado 阅读(26533) 评论(3) 推荐(6)
摘要:流网络(Flow Networks)指的是一个有向图 G= (V, E),其中每条边 (u, v) ∈ E 均有一非负容量 c(u, v) ≥ 0。如果 (u, v) ∉ E 则可以规定 c(u, v) = 0。流网络中有两个特殊的顶点:源点 s (source)和汇点 t(sink)。为方便起见,假定每个顶点均处于从源点到汇点的某条路径上,就是说,对每个顶点 v ∈ E,存在一条路径 s --> v --> t。因此,图 G 为连通图,且 |E| ≥ |V| - 1。 阅读全文
posted @ 2015-02-06 03:32 sangmado 阅读(47228) 评论(7) 推荐(4)
摘要:对于全源最短路径问题(All-Pairs Shortest Paths Problem),可以认为是单源最短路径问题的推广,即分别以每个顶点作为源顶点并求其至其它顶点的最短距离。Johnson 算法描述如下:给定图 G = (V, E),增加一个新的顶点 s,使 s 指向图 G 中的所有顶点都建立连接,设新的图为 G’;对图 G’ 中顶点 s 使用 Bellman-Ford 算法计算单源最短路径,得到结果 h[] = {h[0], h[1], .. h[V-1]};对原图 G 中的所有边进行 "re-weight",即对于每个边 (u, v),其新的权值为 w(u, v) + (h[u] - h[v]);移除新增的顶点 s,对每个顶点运行 Dijkstra 算法求得最短路径;Johnson 算法的运行时间为 O(V2logV + VE)。 阅读全文
posted @ 2015-02-02 08:33 sangmado 阅读(26724) 评论(3) 推荐(14)
摘要:Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,其中图 G 允许存在权值为负的边,但不存在权值为负的回路。Floyd-Warshall 算法的运行时间为 Θ(V^3)。Floyd-Warshall 算法的设计基于了如下观察。设带权图 G = (V, E) 中的所有顶点 V = {1, 2, . . . , n},考虑一个顶点子集 {1, 2, . . . , k}。对于任意对顶点 i, j,考虑从顶点 i 到 j 的所有路径的中间顶点都来自该子集 {1, 2, . . . , k},设 p 是该子集中的最短路径。Floyd-Warshall 算法描述了 p 与 i, j 间最短路径及中间顶点集合 {1, 2, . . . , k - 1} 的关系,该关系依赖于 k 是否是路径 p 上的一个中间顶点。 阅读全文
posted @ 2015-02-02 08:32 sangmado 阅读(14060) 评论(6) 推荐(3)
摘要:Dijkstra 算法又称为单源最短路径算法,由计算机科学家 Edsger Dijkstra 于 1956 年构思并于 1959 年发表。其解决的问题是:给定图 G 和源顶点 v,找到从 v 至图中所有顶点的最短路径。Dijkstra 算法的初始实现版本并未使用最小优先队列实现,其时间复杂度为 O(V^2)。Leyzorek et al 在 1957 提供了基于 Fibonacci heap 的最小优先队列实现版本,其时间复杂度为 O(VlogV)。 阅读全文
posted @ 2015-02-02 08:30 sangmado 阅读(42467) 评论(0) 推荐(2)
摘要:Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径的算法。该算法由 Richard Bellman 和 Lester Ford 分别发表于 1958 年和 1956 年。Bellman-Ford 算法和 Dijkstra 算法同为解决单源最短路径的算法。对于带权有向图 G = (V, E),Dijkstra 算法要求图 G 中边的权值均为非负,而 Bellman-Ford 算法能适应一般的情况(即存在负权边的情况)。Bellman-Ford 算法的时间复杂度为 O(V*E),其中 V 为顶点数量,E 为边的数量。 阅读全文
posted @ 2015-02-02 08:29 sangmado 阅读(77664) 评论(6) 推荐(12)