disjointset(3)



struct::disjointset(3tcl)     Tcl Data Structures    struct::disjointset(3tcl)

______________________________________________________________________________

NAME
       struct::disjointset - Disjoint set data structure

SYNOPSIS
       package require Tcl  8.6

       package require struct::disjointset  ?1.1?

       ::struct::disjointset disjointsetName

       disjointsetName option ?arg arg ...?

       disjointsetName add-element item

       disjointsetName add-partition elements

       disjointsetName partitions

       disjointsetName num-partitions

       disjointsetName equal a b

       disjointsetName merge a b

       disjointsetName find e

       disjointsetName exemplars

       disjointsetName find-exemplar 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 ele-
       ments. Hence the alternative term merge-find for this.

       Why now is this named a disjoint-set ?  Because another way of describ-
       ing 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 in-
              tersection 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/Dis-
       joint_set_data_structure.

API
       The package exports a single command, ::struct::disjointset. All  func-
       tionality  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 fol-
              lowing general form:

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

       disjointsetName add-element item
              Creates a new partition in the specified disjoint set, and fills
              it with the single item item.  The command maintains the  integ-
              rity of the disjoint set, i.e. it verifies that none of the ele-
              ments are already part of the disjoint set and throws  an  error
              otherwise.

              The result of this method is the empty string.

              This method runs in constant time.

       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  main-
              tains  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.

              This method runs in time proportional to the size of elements].

       disjointsetName partitions
              Returns  the  set of partitions the named disjoint set currently
              consists of. The form of the result is a list of lists; the  in-
              ner lists contain the elements of the partitions.

              This method runs in time O(N*alpha(N)), where N is the number of
              elements in the disjoint set and alpha is the inverse  Ackermann
              function.

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

              This method runs in constant time.

       disjointsetName equal a b
              Determines if the two elements a and b of the disjoint  set  be-
              long  to the same partition. The result of the method is a bool-
              ean 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.

              This method runs in amortized time O(alpha(N)), where N  is  the
              number  of elements in the larger partition and alpha is the in-
              verse Ackermann function.

       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.

              This  method  runs in amortized time O(alpha(N)), where N is the
              number of items in the larger of the  partitions  being  merged.
              The worst case time is O(N).

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

              This method runs in O(N*alpha(N)) time, where  N  is  the  total
              number  of  items  in  the disjoint set and alpha is the inverse
              Ackermann function, See find-exemplar for a  faster  method,  if
              all  that  is  needed  is a unique identifier for the partition,
              rather than an enumeration of all its elements.

       disjointsetName exemplars
              Returns a list containing an exemplar of each partition  in  the
              disjoint  set. The exemplar is a member of the partition, chosen
              arbitrarily.

              This method runs in O(N*alpha(N)) time, where  N  is  the  total
              number  of  items  in  the disjoint set and alpha is the inverse
              Ackermann function.

       disjointsetName find-exemplar e
              Returns the exemplar of the partition of the disjoint  set  con-
              taining the element e.  Throws an error if e is not found in the
              disjoint set.  The exemplar is an arbitrarily chosen  member  of
              the partition.  The only operation that will change the exemplar
              of any partition is merge.

              This method runs in O(alpha(N)) time, where N is the  number  of
              items  in  the  partition containing E, and alpha is the inverse
              Ackermann function.

       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  Trackers   [http://core.tcl.tk/tcllib/re-
       portlist].   Please also report any ideas for enhancements you may have
       for either package and/or documentation.

       When proposing code changes, please provide unified diffs, i.e the out-
       put of diff -u.

       Note  further  that  attachments  are  strongly  preferred over inlined
       patches. Attachments can be made by going  to  the  Edit  form  of  the
       ticket  immediately  after  its  creation, and then using the left-most
       button in the secondary navigation bar.

KEYWORDS
       disjoint set, equivalence class, find, merge  find,  partition,  parti-
       tioned set, union

CATEGORY
       Data structures

tcllib                                1.1            struct::disjointset(3tcl)

Man(1) output converted with man2html
list of all man pages