<trclass="memdesc:a67b2a5be57842485dcb3c3db93bc2e1a"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Dump the partition to a std::string. <ahref="classoperations__research_1_1DynamicPartition.html#a67b2a5be57842485dcb3c3db93bc2e1a">More...</a><br/></td></tr>
<trclass="memdesc:afe6f90b99c0b1d646b00ad2d1bb0a09d"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Creates a <aclass="el"href="classoperations__research_1_1DynamicPartition.html"title="Partition class that supports incremental splitting, with backtracking.">DynamicPartition</a> on n elements, numbered 0..n-1. <ahref="#afe6f90b99c0b1d646b00ad2d1bb0a09d">More...</a><br/></td></tr>
<trclass="memitem:ae0789ce355b93a5161e63666b4467e67"><tdclass="memItemLeft"align="right"valign="top"> </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classoperations__research_1_1DynamicPartition.html#ae0789ce355b93a5161e63666b4467e67">DynamicPartition</a> (const std::vector< int >&initial_part_of_element)</td></tr>
<trclass="memdesc:ae0789ce355b93a5161e63666b4467e67"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Ditto, but specify the initial part of each elements. <ahref="#ae0789ce355b93a5161e63666b4467e67">More...</a><br/></td></tr>
<trclass="memdesc:ac1dcc361f73f495e0f362f834b224e89"><tdclass="mdescLeft"> </td><tdclass="mdescRight">*** Implementation of inline methods of the above classes. *** <ahref="#ac1dcc361f73f495e0f362f834b224e89">More...</a><br/></td></tr>
<trclass="memdesc:a4e68b8de69272cf549b346595d332198"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Returns a fingerprint of the given part. <ahref="#a4e68b8de69272cf549b346595d332198">More...</a><br/></td></tr>
<trclass="memitem:a16fce09dd4c359a6acfd0a864e0a5ebd"><tdclass="memItemLeft"align="right"valign="top">void </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classoperations__research_1_1DynamicPartition.html#a16fce09dd4c359a6acfd0a864e0a5ebd">Refine</a> (const std::vector< int >&distinguished_subset)</td></tr>
<trclass="memdesc:a16fce09dd4c359a6acfd0a864e0a5ebd"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Refines the partition such that elements that are in distinguished_subset never share the same part as elements that aren't in that subset. <ahref="#a16fce09dd4c359a6acfd0a864e0a5ebd">More...</a><br/></td></tr>
<trclass="memdesc:a968140cdf9d2766625e1d476a7a71590"><tdclass="mdescLeft"> </td><tdclass="mdescRight">Undo one or several <aclass="el"href="classoperations__research_1_1DynamicPartition.html#a16fce09dd4c359a6acfd0a864e0a5ebd"title="Refines the partition such that elements that are in distinguished_subset never share the same part a...">Refine()</a> operations, until the number of parts becomes equal to "original_num_parts". <ahref="#a968140cdf9d2766625e1d476a7a71590">More...</a><br/></td></tr>
<trclass="memitem:ab516c7e5e0e64a4fca27ab1790d459e5"><tdclass="memItemLeft"align="right"valign="top">const std::vector< int >& </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classoperations__research_1_1DynamicPartition.html#ab516c7e5e0e64a4fca27ab1790d459e5">ElementsInHierarchicalOrder</a> () const</td></tr>
<trclass="memdesc:ab516c7e5e0e64a4fca27ab1790d459e5"><tdclass="mdescLeft"> </td><tdclass="mdescRight">ADVANCED USAGE: All elements (0..n-1) of the partition, sorted in a way that's compatible with the hierarchical partitioning: <ahref="#ab516c7e5e0e64a4fca27ab1790d459e5">More...</a><br/></td></tr>
<divclass="textblock"><p>Partition class that supports incremental splitting, with backtracking. </p>
<p>See <ahref="http://en.wikipedia.org/wiki/Partition_refinement">http://en.wikipedia.org/wiki/Partition_refinement</a> . More precisely, the supported edit operations are:</p><ul>
<li>Refine the partition so that a subset S (typically, <code>S</code><<< N) of elements are all considered non-equivalent to any element in ¬S. Typically, this should be done in O(<code>S</code>).</li>
<li><pclass="startli">Undo the above operations (backtracking).</p>
<dlclass="todo"><dt><b><aclass="el"href="todo.html#_todo000002">Todo:</a></b></dt><dd>(user): rename this to BacktrackableSplittingPartition. </dd></dl>
</li>
</ul>
<pclass="definition">Definition at line <aclass="el"href="dynamic__partition_8h_source.html#l00049">49</a> of file <aclass="el"href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
<p>There might be different conventions for sorting the parts and the elements inside them. </p>
<tableclass="fieldtable">
<tr><thcolspan="2">Enumerator</th></tr><tr><tdclass="fieldname"><aid="a67b2a5be57842485dcb3c3db93bc2e1aacb9b001cac613035de5d6f1f38f7fda1"></a>SORT_LEXICOGRAPHICALLY </td><tdclass="fielddoc"><p>Elements are sorted within parts, and parts are then sorted lexicographically. </p>
</td></tr>
<tr><tdclass="fieldname"><aid="a67b2a5be57842485dcb3c3db93bc2e1aa5edad0b79a2c83ec1b1560960504c161"></a>SORT_BY_PART </td><tdclass="fielddoc"><p>Elements are sorted within parts, and parts are kept in order. </p>
</td></tr>
</table>
<pclass="definition">Definition at line <aclass="el"href="dynamic__partition_8h_source.html#l00117">117</a> of file <aclass="el"href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
</div>
</div>
<h2class="groupheader">Constructor & Destructor Documentation</h2>
<p>Creates a <aclass="el"href="classoperations__research_1_1DynamicPartition.html"title="Partition class that supports incremental splitting, with backtracking.">DynamicPartition</a> on n elements, numbered 0..n-1. </p>
<p>Start with the trivial partition (only one subset containing all elements). </p>
<p>ADVANCED USAGE: All elements (0..n-1) of the partition, sorted in a way that's compatible with the hierarchical partitioning: </p>
<ul>
<li>All the elements of any given part are contiguous.</li>
<li>Elements of a part P are always after elements of part Parent(P).</li>
<li>The order remains identical (and the above property holds) after any UndoRefine*() operation. <dlclass="section note"><dt>Note</dt><dd>the order does get changed by <aclass="el"href="classoperations__research_1_1DynamicPartition.html#a16fce09dd4c359a6acfd0a864e0a5ebd"title="Refines the partition such that elements that are in distinguished_subset never share the same part a...">Refine()</a> operations. This is a reference, so it'll only remain valid and constant until the class is destroyed or until <aclass="el"href="classoperations__research_1_1DynamicPartition.html#a16fce09dd4c359a6acfd0a864e0a5ebd"title="Refines the partition such that elements that are in distinguished_subset never share the same part a...">Refine()</a> get called. </dd></dl>
</li>
</ul>
<pclass="definition">Definition at line <aclass="el"href="dynamic__partition_8h_source.html#l00136">136</a> of file <aclass="el"href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
<p>*** Implementation of inline methods of the above classes. *** </p>
<pclass="definition">Definition at line <aclass="el"href="dynamic__partition_8h_source.html#l00276">276</a> of file <aclass="el"href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
<p>A handy shortcut to ElementsInPart(PartOf(e)). </p>
<p>The returned <aclass="el"href="structoperations__research_1_1DynamicPartition_1_1IterablePart.html">IterablePart</a> will never be empty, since it contains at least i. </p>
<pclass="definition">Definition at line <aclass="el"href="dynamic__partition_8h_source.html#l00303">303</a> of file <aclass="el"href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
<p>While collisions are possible, their probability is quite low. Two parts that have the same size and the same fingerprint are most likely identical. Also, two parts that have the exact same set of elements will <em>always</em> have the same fingerprint. </p>
<pclass="definition">Definition at line <aclass="el"href="dynamic__partition_8h_source.html#l00308">308</a> of file <aclass="el"href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
<pclass="definition">Definition at line <aclass="el"href="dynamic__partition_8h_source.html#l00060">60</a> of file <aclass="el"href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
<pclass="definition">Definition at line <aclass="el"href="dynamic__partition_8h_source.html#l00061">61</a> of file <aclass="el"href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
<pclass="definition">Definition at line <aclass="el"href="dynamic__partition_8h_source.html#l00297">297</a> of file <aclass="el"href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
<pclass="definition">Definition at line <aclass="el"href="dynamic__partition_8h_source.html#l00284">284</a> of file <aclass="el"href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
<p>Refines the partition such that elements that are in distinguished_subset never share the same part as elements that aren't in that subset. </p>
<p>This might be a no-op: in that case, <aclass="el"href="classoperations__research_1_1DynamicPartition.html#a0f4d81d407e148e26480f5ef01778270">NumParts()</a> won't change, but the order of elements inside each part may change.</p>
<p>ORDERING OF PARTS: For each i such that Part #i has a non-trivial intersection with "distinguished_subset" (neither empty, nor the full Part); Part #i is stripped out of all elements that are in "distinguished_subset", and those elements are sent to a newly created part, whose parent_part = i. The parts newly created by a single <aclass="el"href="classoperations__research_1_1DynamicPartition.html#a16fce09dd4c359a6acfd0a864e0a5ebd"title="Refines the partition such that elements that are in distinguished_subset never share the same part a...">Refine()</a> operations are sorted by parent_part. Example: a <aclass="el"href="classoperations__research_1_1DynamicPartition.html#a16fce09dd4c359a6acfd0a864e0a5ebd"title="Refines the partition such that elements that are in distinguished_subset never share the same part a...">Refine()</a> on a partition with 6 parts causes parts #1, #3 and #4 to be split: the partition will now contain 3 new parts: part #6 (with parent_part = 1), part #7 (with parent_part = 3) and part #8 (with parent_part = 4).</p>
<dlclass="todo"><dt><b><aclass="el"href="todo.html#_todo000003">Todo:</a></b></dt><dd>(user): the graph symmetry finder could probably benefit a lot from keeping track of one additional bit of information for each part that remains unchanged by a <aclass="el"href="classoperations__research_1_1DynamicPartition.html#a16fce09dd4c359a6acfd0a864e0a5ebd"title="Refines the partition such that elements that are in distinguished_subset never share the same part a...">Refine()</a> operation: was that part entirely <em>in</em> the distinguished subset or entirely <em>out</em>? </dd></dl>
<pclass="definition">Definition at line <aclass="el"href="dynamic__partition_8h_source.html#l00290">290</a> of file <aclass="el"href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
<p>Undo one or several <aclass="el"href="classoperations__research_1_1DynamicPartition.html#a16fce09dd4c359a6acfd0a864e0a5ebd"title="Refines the partition such that elements that are in distinguished_subset never share the same part a...">Refine()</a> operations, until the number of parts becomes equal to "original_num_parts". </p>