动态连通性问题——算法union-find

问题定义:问题的输入是一列整数对,其中每个整数都表示一个某种类型的对象,一对整数p,q可以被理解为"p和q是相连的"。我们假设“相连”是一种对等的关系。

这也意味着它具有:

  1.自反性:p和q是相连的;

  2.对称性:如果p和q是相连的,那么q和p也是相连的;

  3.传递性:如果p和q是相连的且q和r是相连的,那么p和r也是相连的;

  对等关系能够将对象分为多个等价类。在这里,当且仅当两个对象相连时他们才属于同一个等价类。我们的目标是编写一个程序来过滤掉序列中所有无意义的整数对(两个整数均来自于同一个等价类中)。换句话说,当程序从输入中读取了整数对p q时,如果一直的所有整数写入到输出中。如果已知的数据可以说明p和q是相连的。那么程序应该忽略p q这对整数并继续处理输入中的下一对整数。为了达到所期望的效果,我们需要设计一个数据结构来保存程序一直的所有整数对的足够多的信息,并用他们来判断一对新对象是否相连。我们将这个问题通俗地叫做动态连通性问题。在网络,变量名等价性和数学集合等问题中有应用

posted @ 2018-03-13 18:26  coffee9527  阅读(199)  评论(0编辑  收藏  举报