548 lines
33 KiB
HTML
548 lines
33 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<title>OR-Tools</title>
|
|
<meta http-equiv="Content-Type" content="text/html;"/>
|
|
<meta charset="utf-8"/>
|
|
<!--<link rel='stylesheet' type='text/css' href="https://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic"/>-->
|
|
<link rel="stylesheet" type="text/css" href="ortools.css" title="default" media="screen,print" />
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
</head>
|
|
<body>
|
|
<div id="banner-container">
|
|
<div id="banner">
|
|
<span id="sfml">OR-Tools 7.2</span>
|
|
</div>
|
|
</div>
|
|
<link rel="icon" href="https://developers.google.com/optimization/images/orLogo.png">
|
|
<div id="content">
|
|
<!-- Generated by Doxygen 1.8.15 -->
|
|
<div id="navrow1" class="tabs">
|
|
<ul class="tablist">
|
|
<li><a href="index.html"><span>Main Page</span></a></li>
|
|
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
|
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
|
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
|
|
<li><a href="files.html"><span>Files</span></a></li>
|
|
</ul>
|
|
</div>
|
|
<div id="navrow2" class="tabs2">
|
|
<ul class="tablist">
|
|
<li><a href="annotated.html"><span>Class List</span></a></li>
|
|
<li><a href="classes.html"><span>Class Index</span></a></li>
|
|
<li><a href="inherits.html"><span>Class Hierarchy</span></a></li>
|
|
<li><a href="functions.html"><span>Class Members</span></a></li>
|
|
</ul>
|
|
</div>
|
|
<div id="nav-path" class="navpath">
|
|
<ul>
|
|
<li class="navelem"><a class="el" href="namespaceoperations__research.html">operations_research</a></li><li class="navelem"><a class="el" href="classoperations__research_1_1DynamicPartition.html">DynamicPartition</a></li> </ul>
|
|
</div>
|
|
</div><!-- top -->
|
|
<div class="header">
|
|
<div class="summary">
|
|
<a href="#nested-classes">Classes</a> |
|
|
<a href="#pub-types">Public Types</a> |
|
|
<a href="#pub-methods">Public Member Functions</a> |
|
|
<a href="classoperations__research_1_1DynamicPartition-members.html">List of all members</a> </div>
|
|
<div class="headertitle">
|
|
<div class="title">operations_research::DynamicPartition Class Reference</div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
|
|
<p>Partition class that supports incremental splitting, with backtracking.
|
|
<a href="classoperations__research_1_1DynamicPartition.html#details">More...</a></p>
|
|
|
|
<p><code>#include <<a class="el" href="dynamic__partition_8h_source.html">dynamic_partition.h</a>></code></p>
|
|
<table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
|
Classes</h2></td></tr>
|
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structoperations__research_1_1DynamicPartition_1_1IterablePart.html">IterablePart</a></td></tr>
|
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
|
|
Public Types</h2></td></tr>
|
|
<tr class="memitem:a67b2a5be57842485dcb3c3db93bc2e1a"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#a67b2a5be57842485dcb3c3db93bc2e1a">DebugStringSorting</a> { <a class="el" href="classoperations__research_1_1DynamicPartition.html#a67b2a5be57842485dcb3c3db93bc2e1aacb9b001cac613035de5d6f1f38f7fda1">SORT_LEXICOGRAPHICALLY</a>,
|
|
<a class="el" href="classoperations__research_1_1DynamicPartition.html#a67b2a5be57842485dcb3c3db93bc2e1aa5edad0b79a2c83ec1b1560960504c161">SORT_BY_PART</a>
|
|
}</td></tr>
|
|
<tr class="memdesc:a67b2a5be57842485dcb3c3db93bc2e1a"><td class="mdescLeft"> </td><td class="mdescRight">Dump the partition to a std::string. <a href="classoperations__research_1_1DynamicPartition.html#a67b2a5be57842485dcb3c3db93bc2e1a">More...</a><br /></td></tr>
|
|
<tr class="separator:a67b2a5be57842485dcb3c3db93bc2e1a"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
|
|
Public Member Functions</h2></td></tr>
|
|
<tr class="memitem:afe6f90b99c0b1d646b00ad2d1bb0a09d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#afe6f90b99c0b1d646b00ad2d1bb0a09d">DynamicPartition</a> (int num_elements)</td></tr>
|
|
<tr class="memdesc:afe6f90b99c0b1d646b00ad2d1bb0a09d"><td class="mdescLeft"> </td><td class="mdescRight">Creates a <a class="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. <a href="#afe6f90b99c0b1d646b00ad2d1bb0a09d">More...</a><br /></td></tr>
|
|
<tr class="separator:afe6f90b99c0b1d646b00ad2d1bb0a09d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ae0789ce355b93a5161e63666b4467e67"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#ae0789ce355b93a5161e63666b4467e67">DynamicPartition</a> (const std::vector< int > &initial_part_of_element)</td></tr>
|
|
<tr class="memdesc:ae0789ce355b93a5161e63666b4467e67"><td class="mdescLeft"> </td><td class="mdescRight">Ditto, but specify the initial part of each elements. <a href="#ae0789ce355b93a5161e63666b4467e67">More...</a><br /></td></tr>
|
|
<tr class="separator:ae0789ce355b93a5161e63666b4467e67"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a4b07bd0eb40bb3fcb3419672313342ea"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#a4b07bd0eb40bb3fcb3419672313342ea">NumElements</a> () const</td></tr>
|
|
<tr class="memdesc:a4b07bd0eb40bb3fcb3419672313342ea"><td class="mdescLeft"> </td><td class="mdescRight">Accessors. <a href="#a4b07bd0eb40bb3fcb3419672313342ea">More...</a><br /></td></tr>
|
|
<tr class="separator:a4b07bd0eb40bb3fcb3419672313342ea"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a0f4d81d407e148e26480f5ef01778270"><td class="memItemLeft" align="right" valign="top">const int </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#a0f4d81d407e148e26480f5ef01778270">NumParts</a> () const</td></tr>
|
|
<tr class="separator:a0f4d81d407e148e26480f5ef01778270"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ac1dcc361f73f495e0f362f834b224e89"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structoperations__research_1_1DynamicPartition_1_1IterablePart.html">IterablePart</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#ac1dcc361f73f495e0f362f834b224e89">ElementsInPart</a> (int i) const</td></tr>
|
|
<tr class="memdesc:ac1dcc361f73f495e0f362f834b224e89"><td class="mdescLeft"> </td><td class="mdescRight">*** Implementation of inline methods of the above classes. *** <a href="#ac1dcc361f73f495e0f362f834b224e89">More...</a><br /></td></tr>
|
|
<tr class="separator:ac1dcc361f73f495e0f362f834b224e89"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:af3a2c6e1e18891125f15e42e391055bb"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#af3a2c6e1e18891125f15e42e391055bb">PartOf</a> (int element) const</td></tr>
|
|
<tr class="separator:af3a2c6e1e18891125f15e42e391055bb"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a87ccb17e1972d153100a9b061a918ba1"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#a87ccb17e1972d153100a9b061a918ba1">SizeOfPart</a> (int part) const</td></tr>
|
|
<tr class="separator:a87ccb17e1972d153100a9b061a918ba1"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a079d605b371556e228347843c9b15d2d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#a079d605b371556e228347843c9b15d2d">ParentOfPart</a> (int part) const</td></tr>
|
|
<tr class="separator:a079d605b371556e228347843c9b15d2d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a79106998d8499c5c25f4c74c14456b60"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structoperations__research_1_1DynamicPartition_1_1IterablePart.html">IterablePart</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#a79106998d8499c5c25f4c74c14456b60">ElementsInSamePartAs</a> (int i) const</td></tr>
|
|
<tr class="memdesc:a79106998d8499c5c25f4c74c14456b60"><td class="mdescLeft"> </td><td class="mdescRight">A handy shortcut to ElementsInPart(PartOf(e)). <a href="#a79106998d8499c5c25f4c74c14456b60">More...</a><br /></td></tr>
|
|
<tr class="separator:a79106998d8499c5c25f4c74c14456b60"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a4e68b8de69272cf549b346595d332198"><td class="memItemLeft" align="right" valign="top">uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#a4e68b8de69272cf549b346595d332198">FprintOfPart</a> (int part) const</td></tr>
|
|
<tr class="memdesc:a4e68b8de69272cf549b346595d332198"><td class="mdescLeft"> </td><td class="mdescRight">Returns a fingerprint of the given part. <a href="#a4e68b8de69272cf549b346595d332198">More...</a><br /></td></tr>
|
|
<tr class="separator:a4e68b8de69272cf549b346595d332198"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a16fce09dd4c359a6acfd0a864e0a5ebd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#a16fce09dd4c359a6acfd0a864e0a5ebd">Refine</a> (const std::vector< int > &distinguished_subset)</td></tr>
|
|
<tr class="memdesc:a16fce09dd4c359a6acfd0a864e0a5ebd"><td class="mdescLeft"> </td><td class="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. <a href="#a16fce09dd4c359a6acfd0a864e0a5ebd">More...</a><br /></td></tr>
|
|
<tr class="separator:a16fce09dd4c359a6acfd0a864e0a5ebd"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a968140cdf9d2766625e1d476a7a71590"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#a968140cdf9d2766625e1d476a7a71590">UndoRefineUntilNumPartsEqual</a> (int original_num_parts)</td></tr>
|
|
<tr class="memdesc:a968140cdf9d2766625e1d476a7a71590"><td class="mdescLeft"> </td><td class="mdescRight">Undo one or several <a class="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". <a href="#a968140cdf9d2766625e1d476a7a71590">More...</a><br /></td></tr>
|
|
<tr class="separator:a968140cdf9d2766625e1d476a7a71590"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ac535d0a440192c96effe5b938a9482c7"><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#ac535d0a440192c96effe5b938a9482c7">DebugString</a> (<a class="el" href="classoperations__research_1_1DynamicPartition.html#a67b2a5be57842485dcb3c3db93bc2e1a">DebugStringSorting</a> sorting) const</td></tr>
|
|
<tr class="separator:ac535d0a440192c96effe5b938a9482c7"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ab516c7e5e0e64a4fca27ab1790d459e5"><td class="memItemLeft" align="right" valign="top">const std::vector< int > & </td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1DynamicPartition.html#ab516c7e5e0e64a4fca27ab1790d459e5">ElementsInHierarchicalOrder</a> () const</td></tr>
|
|
<tr class="memdesc:ab516c7e5e0e64a4fca27ab1790d459e5"><td class="mdescLeft"> </td><td class="mdescRight">ADVANCED USAGE: All elements (0..n-1) of the partition, sorted in a way that's compatible with the hierarchical partitioning: <a href="#ab516c7e5e0e64a4fca27ab1790d459e5">More...</a><br /></td></tr>
|
|
<tr class="separator:ab516c7e5e0e64a4fca27ab1790d459e5"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table>
|
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
<div class="textblock"><p>Partition class that supports incremental splitting, with backtracking. </p>
|
|
<p>See <a href="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><p class="startli">Undo the above operations (backtracking).</p>
|
|
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000002">Todo:</a></b></dt><dd>(user): rename this to BacktrackableSplittingPartition. </dd></dl>
|
|
</li>
|
|
</ul>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="dynamic__partition_8h_source.html#l00049">49</a> of file <a class="el" href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
|
|
</div><h2 class="groupheader">Member Enumeration Documentation</h2>
|
|
<a id="a67b2a5be57842485dcb3c3db93bc2e1a"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a67b2a5be57842485dcb3c3db93bc2e1a">◆ </a></span>DebugStringSorting</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">enum <a class="el" href="classoperations__research_1_1DynamicPartition.html#a67b2a5be57842485dcb3c3db93bc2e1a">operations_research::DynamicPartition::DebugStringSorting</a></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Dump the partition to a std::string. </p>
|
|
<p>There might be different conventions for sorting the parts and the elements inside them. </p>
|
|
<table class="fieldtable">
|
|
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a67b2a5be57842485dcb3c3db93bc2e1aacb9b001cac613035de5d6f1f38f7fda1"></a>SORT_LEXICOGRAPHICALLY </td><td class="fielddoc"><p>Elements are sorted within parts, and parts are then sorted lexicographically. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="a67b2a5be57842485dcb3c3db93bc2e1aa5edad0b79a2c83ec1b1560960504c161"></a>SORT_BY_PART </td><td class="fielddoc"><p>Elements are sorted within parts, and parts are kept in order. </p>
|
|
</td></tr>
|
|
</table>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="dynamic__partition_8h_source.html#l00117">117</a> of file <a class="el" href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<h2 class="groupheader">Constructor & Destructor Documentation</h2>
|
|
<a id="afe6f90b99c0b1d646b00ad2d1bb0a09d"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#afe6f90b99c0b1d646b00ad2d1bb0a09d">◆ </a></span>DynamicPartition() <span class="overload">[1/2]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">operations_research::DynamicPartition::DynamicPartition </td>
|
|
<td>(</td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"><em>num_elements</em></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Creates a <a class="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>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ae0789ce355b93a5161e63666b4467e67"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ae0789ce355b93a5161e63666b4467e67">◆ </a></span>DynamicPartition() <span class="overload">[2/2]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">operations_research::DynamicPartition::DynamicPartition </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const std::vector< int > & </td>
|
|
<td class="paramname"><em>initial_part_of_element</em></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Ditto, but specify the initial part of each elements. </p>
|
|
<p>Part indices must form a dense integer set starting at 0; eg. [2, 1, 0, 1, 1, 3, 0] is valid. </p>
|
|
|
|
</div>
|
|
</div>
|
|
<h2 class="groupheader">Member Function Documentation</h2>
|
|
<a id="ac535d0a440192c96effe5b938a9482c7"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ac535d0a440192c96effe5b938a9482c7">◆ </a></span>DebugString()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">std::string operations_research::DynamicPartition::DebugString </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="classoperations__research_1_1DynamicPartition.html#a67b2a5be57842485dcb3c3db93bc2e1a">DebugStringSorting</a> </td>
|
|
<td class="paramname"><em>sorting</em></td><td>)</td>
|
|
<td> const</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ab516c7e5e0e64a4fca27ab1790d459e5"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ab516c7e5e0e64a4fca27ab1790d459e5">◆ </a></span>ElementsInHierarchicalOrder()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">const std::vector<int>& operations_research::DynamicPartition::ElementsInHierarchicalOrder </td>
|
|
<td>(</td>
|
|
<td class="paramname"></td><td>)</td>
|
|
<td> const</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<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. <dl class="section note"><dt>Note</dt><dd>the order does get changed by <a class="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 <a class="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>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="dynamic__partition_8h_source.html#l00136">136</a> of file <a class="el" href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ac1dcc361f73f495e0f362f834b224e89"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ac1dcc361f73f495e0f362f834b224e89">◆ </a></span>ElementsInPart()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structoperations__research_1_1DynamicPartition_1_1IterablePart.html">DynamicPartition::IterablePart</a> operations_research::DynamicPartition::ElementsInPart </td>
|
|
<td>(</td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"><em>i</em></td><td>)</td>
|
|
<td> const</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>*** Implementation of inline methods of the above classes. *** </p>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="dynamic__partition_8h_source.html#l00276">276</a> of file <a class="el" href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a79106998d8499c5c25f4c74c14456b60"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a79106998d8499c5c25f4c74c14456b60">◆ </a></span>ElementsInSamePartAs()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structoperations__research_1_1DynamicPartition_1_1IterablePart.html">DynamicPartition::IterablePart</a> operations_research::DynamicPartition::ElementsInSamePartAs </td>
|
|
<td>(</td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"><em>i</em></td><td>)</td>
|
|
<td> const</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>A handy shortcut to ElementsInPart(PartOf(e)). </p>
|
|
<p>The returned <a class="el" href="structoperations__research_1_1DynamicPartition_1_1IterablePart.html">IterablePart</a> will never be empty, since it contains at least i. </p>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="dynamic__partition_8h_source.html#l00303">303</a> of file <a class="el" href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a4e68b8de69272cf549b346595d332198"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a4e68b8de69272cf549b346595d332198">◆ </a></span>FprintOfPart()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">uint64 operations_research::DynamicPartition::FprintOfPart </td>
|
|
<td>(</td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"><em>part</em></td><td>)</td>
|
|
<td> const</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Returns a fingerprint of the given part. </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>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="dynamic__partition_8h_source.html#l00308">308</a> of file <a class="el" href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a4b07bd0eb40bb3fcb3419672313342ea"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a4b07bd0eb40bb3fcb3419672313342ea">◆ </a></span>NumElements()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int operations_research::DynamicPartition::NumElements </td>
|
|
<td>(</td>
|
|
<td class="paramname"></td><td>)</td>
|
|
<td> const</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Accessors. </p>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="dynamic__partition_8h_source.html#l00060">60</a> of file <a class="el" href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a0f4d81d407e148e26480f5ef01778270"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a0f4d81d407e148e26480f5ef01778270">◆ </a></span>NumParts()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">const int operations_research::DynamicPartition::NumParts </td>
|
|
<td>(</td>
|
|
<td class="paramname"></td><td>)</td>
|
|
<td> const</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p class="definition">Definition at line <a class="el" href="dynamic__partition_8h_source.html#l00061">61</a> of file <a class="el" href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a079d605b371556e228347843c9b15d2d"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a079d605b371556e228347843c9b15d2d">◆ </a></span>ParentOfPart()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int operations_research::DynamicPartition::ParentOfPart </td>
|
|
<td>(</td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"><em>part</em></td><td>)</td>
|
|
<td> const</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p class="definition">Definition at line <a class="el" href="dynamic__partition_8h_source.html#l00297">297</a> of file <a class="el" href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="af3a2c6e1e18891125f15e42e391055bb"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#af3a2c6e1e18891125f15e42e391055bb">◆ </a></span>PartOf()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int operations_research::DynamicPartition::PartOf </td>
|
|
<td>(</td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"><em>element</em></td><td>)</td>
|
|
<td> const</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p class="definition">Definition at line <a class="el" href="dynamic__partition_8h_source.html#l00284">284</a> of file <a class="el" href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a16fce09dd4c359a6acfd0a864e0a5ebd"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a16fce09dd4c359a6acfd0a864e0a5ebd">◆ </a></span>Refine()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void operations_research::DynamicPartition::Refine </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const std::vector< int > & </td>
|
|
<td class="paramname"><em>distinguished_subset</em></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<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, <a class="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 <a class="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 <a class="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>
|
|
<dl class="todo"><dt><b><a class="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 <a class="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>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a87ccb17e1972d153100a9b061a918ba1"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a87ccb17e1972d153100a9b061a918ba1">◆ </a></span>SizeOfPart()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int operations_research::DynamicPartition::SizeOfPart </td>
|
|
<td>(</td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"><em>part</em></td><td>)</td>
|
|
<td> const</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p class="definition">Definition at line <a class="el" href="dynamic__partition_8h_source.html#l00290">290</a> of file <a class="el" href="dynamic__partition_8h_source.html">dynamic_partition.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a968140cdf9d2766625e1d476a7a71590"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a968140cdf9d2766625e1d476a7a71590">◆ </a></span>UndoRefineUntilNumPartsEqual()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void operations_research::DynamicPartition::UndoRefineUntilNumPartsEqual </td>
|
|
<td>(</td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"><em>original_num_parts</em></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Undo one or several <a class="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>
|
|
<p>Prerequisite: <a class="el" href="classoperations__research_1_1DynamicPartition.html#a0f4d81d407e148e26480f5ef01778270">NumParts()</a> >= original_num_parts. </p>
|
|
|
|
</div>
|
|
</div>
|
|
<hr/>The documentation for this class was generated from the following file:<ul>
|
|
<li><a class="el" href="dynamic__partition_8h_source.html">dynamic_partition.h</a></li>
|
|
</ul>
|
|
</div><!-- contents -->
|
|
</div>
|
|
<div id="footer-container">
|
|
<div id="footer">
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|