Kruskal算法用于计算一个图的最小生成树。这个算法的步骤如下:
按照边的权重从小到达进行排序
依次将每条边增加到最小生成树中,除非这条边会造成回路
实现思路
第一个步骤需要对边进行排序,排序方法在之前的章节中已经介绍了很多,可以使用优先级队列进行实现,也可以使用归并排序进行实现,这里采用归并排序。
第二个步骤需要判断是否会造...
分类:
其他好文 时间:
2014-06-22 21:43:31
阅读次数:
204
题目链接:http://poj.org/problem?id=2823
题目大意:给出一组数,一个固定大小的窗口在这个数组上滑动,要求出每次滑动该窗口内的最大值和最小值。
这就是典型的单调队列,单调队列的作用就在此。单调队列的队首为区间内的最值,但是整个队列不用保持单调。
用两个队列分别处理最大值和最小值,在此说明一下最大值;
往队列中添加值num时,从队尾开始扫,直到遇到一个小于num的...
在正式编写最小生成树的算法之前,还需要做一些准备工作。具体的工作就是建立一些基础对象。
边
首先需要建立边的对象。现在的边要增加权重信息,一条边需要记录两个端点以及这条边的权重,因此边类的轮廓如下:
public class Edge implements Comparable {
public Edge(int v, int w, double we...
分类:
其他好文 时间:
2014-06-22 20:45:50
阅读次数:
147
选择排序的基本思想:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动...
分类:
编程语言 时间:
2014-06-22 18:18:19
阅读次数:
188
使用线段树预处理,可以使得查询RMQ时间效率在O(lgn)。
线段树是记录某范围内的最小值。
标准的线段树应用。
Geeks上只有两道线段树的题目了,而且没有讲到pushUp和pushDown操作,只是线段树的入门了。
参考:http://www.geeksforgeeks.org/segment-tree-set-1-range-minimum-query/
我修改了一下他的程序,使用...
分类:
其他好文 时间:
2014-06-22 18:08:05
阅读次数:
217
最小点覆盖=最大匹配
Machine Schedule
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5350 Accepted Submission(s): 2650
Problem Descript...
分类:
其他好文 时间:
2014-06-21 21:31:39
阅读次数:
190
Prim算法用于计算最小生成树。Prim算法分为两种,一种是懒汉式,一种是饿汉式。
懒汉式Prim
懒汉式Prim算法步骤如下:
首先将顶点0加入到MST中
从MST与未访问顶点之间边中选出最短的边,在满足MST的前提下,将这条边加入到MST
代码
import java.util.LinkedList;
import jav...
分类:
其他好文 时间:
2014-06-21 20:37:01
阅读次数:
289
目前已经介绍了Kruskal和Prim算法,他们的复杂度一个是E logE一个是E logV,那么有没有复杂度为E的算法呢?理论上是可能的,但是目前还没有发现该算法。下图是最小生成树算法的发展过程。
从图中可以看到复杂度越來越接近E。
最小生成树的应用
欧几里德最小生成树
问题描述:给定一系列点的坐标,求包含所有点...
分类:
其他好文 时间:
2014-06-21 20:35:44
阅读次数:
368
这道题也有点新意,就是需要记录最小值段和最大值段,然后成段更新这个段,而不用没点去更新,达到提高速度的目的。
本题过的人很少,因为大部分都超时了,我严格按照线段树的方法去写,一开始居然也超时。
然后修补了两个地方就过了,具体修改的地方请参看程序。
知道最大值段和最小值段,然后修补一下就能过了。不是特别难的题目。
#include
#include
#include
using na...
分类:
其他好文 时间:
2014-06-21 20:14:04
阅读次数:
230
最小点覆盖
Air Raid
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3002 Accepted Submission(s): 1951
Problem Description
Co...
分类:
其他好文 时间:
2014-06-21 18:28:17
阅读次数:
246