struct::disjointset(n)        Tcl Data Structures       struct::disjointset(n)



______________________________________________________________________________

NAME
       struct::disjointset - Disjoint set data structure

SYNOPSIS
       package require Tcl  8.4

       package require struct::disjointset  ?1.0?

       ::struct::disjointset disjointsetName

       disjointsetName option ?arg arg ...?

       disjointsetName add-partition elements

       disjointsetName partitions

       disjointsetName num-partitions

       disjointsetName equal a b

       disjointsetName merge a b

       disjointsetName find e

       disjointsetName destroy

_________________________________________________________________

DESCRIPTION
       This package provides disjoint sets. An alternative name for this kind
       of structure is merge-find.

       Normally when dealing with sets and their elements the question is "Is
       this element E contained in this set S?", with both E and S known.

       Here the question is "Which of several sets contains the element E?".
       I.e. while the element is known, the set is not, and we wish to find it
       quickly. It is not quite the inverse of the original question, but
       close.  Another operation which is often wanted is that of quickly
       merging two sets into one, with the result still fast for finding
       elements. Hence the alternative term merge-find for this.

       Why now is this named a disjoint-set ?  Because another way of
       describing the whole situation is that we have

       o      a finite set S, containing

       o      a number of elements E, split into

       o      a set of partitions P. The latter term applies, because the
              intersection of each pair P, P' of partitions is empty, with the
              union of all partitions covering the whole set.

       o      An alternative name for the partitions would be equvalence
              classes, and all elements in the same class are considered as
              equal.

       Here is a pictorial representation of the concepts listed above:


                +-----------------+ The outer lines are the boundaries of the set S.
                |           /     | The inner regions delineated by the skewed lines
                |  *       /   *  | are the partitions P. The *'s denote the elements
                |      *  / \     | E in the set, each in a single partition, their
                |*       /   \    | equivalence class.
                |       /  *  \   |
                |      / *   /    |
                | *   /\  * /     |
                |    /  \  /      |
                |   /    \/  *    |
                |  / *    \       |
                | /     *  \      |
                +-----------------+


       For more information see
       http://en.wikipedia.org/wiki/Disjoint_set_data_structure.

API
       The package exports a single command, ::struct::disjointset. All
       functionality provided here can be reached through a subcommand of this
       command.

       ::struct::disjointset disjointsetName
              Creates a new disjoint set object with an associated global Tcl
              command whose name is disjointsetName. This command may be used
              to invoke various operations on the disjointset. It has the
              following general form:

              disjointsetName option ?arg arg ...?
                     The option and the args determine the exact behavior of
                     the command. The following commands are possible for
                     disjointset objects:

       disjointsetName add-partition elements
              Creates a new partition in specified disjoint set, and fills it
              with the values found in the set of elements. The command
              maintains the integrity of the disjoint set, i.e. it verifies
              that none of the elements are already part of the disjoint set
              and throws an error otherwise.

              The result of the command is the empty string.

       disjointsetName partitions
              Returns the set of partitions the named disjoint set currently
              consists of.

       disjointsetName num-partitions
              Returns the number of partitions the named disjoint set
              currently consists of.

       disjointsetName equal a b
              Determines if the two elements a and b of the disjoint set
              belong to the same partition. The result of the method is a
              boolean value, True if the two elements are contained in the
              same partition, and False otherwise.

              An error will be thrown if either a or b are not elements of the
              disjoint set.

       disjointsetName merge a b
              Determines the partitions the elements a and b are contained in
              and merges them into a single partition.  If the two elements
              were already contained in the same partition nothing will
              change.

              The result of the method is the empty string.

       disjointsetName find e
              Returns the partition of the disjoint set which contains the
              element e.

       disjointsetName destroy
              Destroys the disjoint set object and all associated memory.

BUGS, IDEAS, FEEDBACK
       This document, and the package it describes, will undoubtedly contain
       bugs and other problems.  Please report such in the category struct ::
       disjointset of the Tcllib SF Trackers
       [http://sourceforge.net/tracker/?group_id=12883].  Please also report
       any ideas for enhancements you may have for either package and/or
       documentation.

KEYWORDS
       disjoint set, equivalence class, find, merge find, partition,
       partitioned set, union

CATEGORY
       Data structures



struct                                1.0               struct::disjointset(n)
