Logo Data Structures and Algorithms with Object-Oriented Design Patterns in Java
next up previous contents index

Partitions

 

Consider the finite universal set tex2html_wrap_inline66244. A partition  of U is a finite set of sets tex2html_wrap_inline66552 with the following properties:

  1. The sets tex2html_wrap_inline59332, tex2html_wrap_inline59336, ..., tex2html_wrap_inline66558 are pairwise disjoint. That is, tex2html_wrap_inline66560 for all values of i and j such that tex2html_wrap_inline66566.
  2. The sets tex2html_wrap_inline59332, tex2html_wrap_inline59336, ..., tex2html_wrap_inline66558 span the universe U. That is,

    eqnarray27910

For example, consider the universe tex2html_wrap_inline66576. There are exactly five partitions of U:

eqnarray27915

In general, given a universe U of size n>0, i.e., |U|=n, there are tex2html_wrap_inline66586 partitions of U, where tex2html_wrap_inline66590 is the so-called Stirling number of the second kind  which denotes the number of ways to partition a set of n elements into m nonempty disjoint subsets.gif

Applications which use partitions typically start with an initial partition and refine that partition either by joining or by splitting elements of the partition according to some application-specific criterion. The result of such a computation is the partition obtained when no more elements can be split or joined.

In this chapter we shall consider only applications that begin with the initial partition of U in which each item in U is in a separate element of the partition. Thus, the initial partition consists of |U| sets, each of size one (like tex2html_wrap_inline66606 above). Furthermore, we restrict the applications in that we only allow elements of a partition to be joined--we do not allow elements to split.

The two operations to be performed on partitions are:

Find
Given an item in the universe, say tex2html_wrap_inline66608, find the element of the partition that contains i. That is, find tex2html_wrap_inline66612 such that tex2html_wrap_inline66614.
Join
Given two distinct elements of a partition P, say tex2html_wrap_inline66618 and tex2html_wrap_inline66612 such that tex2html_wrap_inline60898, create a new partition P' by removing the two elements tex2html_wrap_inline66626 and tex2html_wrap_inline66628 from P and replacing them with a single element tex2html_wrap_inline66632.

For example, consider the partition tex2html_wrap_inline66634. The result of the operation tex2html_wrap_inline66636 is the set tex2html_wrap_inline66638 because 3 is a member of tex2html_wrap_inline59336. Furthermore, when we join sets tex2html_wrap_inline59332 and tex2html_wrap_inline59340, we get the partition tex2html_wrap_inline66648.