Files
ortools-clone/docs/cpp_algorithms/classoperations__research_1_1SparsePermutation.html

377 lines
21 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.1@</span>
</div>
</div>
<div id="content">
<!-- Generated by Doxygen 1.8.15 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;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&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;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_1SparsePermutation.html">SparsePermutation</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classoperations__research_1_1SparsePermutation-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">operations_research::SparsePermutation Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>A compact representation for permutations of {0..N-1} that displaces few elements: it needs only O(K) memory for a permutation that displaces K elements.
<a href="classoperations__research_1_1SparsePermutation.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="sparse__permutation_8h_source.html">sparse_permutation.h</a>&gt;</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 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structoperations__research_1_1SparsePermutation_1_1Iterator.html">Iterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</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:ab4ee5c7df12fcaeb042a8c52654569bd"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1SparsePermutation.html#ab4ee5c7df12fcaeb042a8c52654569bd">SparsePermutation</a> (int size)</td></tr>
<tr class="separator:ab4ee5c7df12fcaeb042a8c52654569bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aff385d18c768ffa364c5dccb5fb35c0a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1SparsePermutation.html#aff385d18c768ffa364c5dccb5fb35c0a">Size</a> () const</td></tr>
<tr class="separator:aff385d18c768ffa364c5dccb5fb35c0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4941ad4a0095fa3bc4e8aa0e8fb521bf"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1SparsePermutation.html#a4941ad4a0095fa3bc4e8aa0e8fb521bf">NumCycles</a> () const</td></tr>
<tr class="separator:a4941ad4a0095fa3bc4e8aa0e8fb521bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0b05b1e840388f9aba5bbe79a392d7d6"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; int &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1SparsePermutation.html#a0b05b1e840388f9aba5bbe79a392d7d6">Support</a> () const</td></tr>
<tr class="memdesc:a0b05b1e840388f9aba5bbe79a392d7d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the "support" of this permutation; that is, the set of elements displaced by it. <a href="#a0b05b1e840388f9aba5bbe79a392d7d6">More...</a><br /></td></tr>
<tr class="separator:a0b05b1e840388f9aba5bbe79a392d7d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a59a2f011b1fdc9a63d6557749542c354"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structoperations__research_1_1SparsePermutation_1_1Iterator.html">Iterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1SparsePermutation.html#a59a2f011b1fdc9a63d6557749542c354">Cycle</a> (int i) const</td></tr>
<tr class="separator:a59a2f011b1fdc9a63d6557749542c354"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9fc0ca5752b5ad6cc2a78ff7c512b22a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1SparsePermutation.html#a9fc0ca5752b5ad6cc2a78ff7c512b22a">LastElementInCycle</a> (int i) const</td></tr>
<tr class="memdesc:a9fc0ca5752b5ad6cc2a78ff7c512b22a"><td class="mdescLeft">&#160;</td><td class="mdescRight">This is useful for iterating over the pair {element, image} of a permutation: <a href="#a9fc0ca5752b5ad6cc2a78ff7c512b22a">More...</a><br /></td></tr>
<tr class="separator:a9fc0ca5752b5ad6cc2a78ff7c512b22a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac1e64e1e738964d338be3cac2b2a58fd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1SparsePermutation.html#ac1e64e1e738964d338be3cac2b2a58fd">AddToCurrentCycle</a> (int x)</td></tr>
<tr class="memdesc:ac1e64e1e738964d338be3cac2b2a58fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">To add a cycle to the permutation, repeatedly call <a class="el" href="classoperations__research_1_1SparsePermutation.html#ac1e64e1e738964d338be3cac2b2a58fd" title="To add a cycle to the permutation, repeatedly call AddToCurrentCycle() with the cycle&#39;s orbit,...">AddToCurrentCycle()</a> with the cycle's orbit, then call <a class="el" href="classoperations__research_1_1SparsePermutation.html#ac1e42a48198d2abc8642d81f6b846fee">CloseCurrentCycle()</a>; This shouldn't be called on trivial cycles (of length 1). <a href="#ac1e64e1e738964d338be3cac2b2a58fd">More...</a><br /></td></tr>
<tr class="separator:ac1e64e1e738964d338be3cac2b2a58fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac1e42a48198d2abc8642d81f6b846fee"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1SparsePermutation.html#ac1e42a48198d2abc8642d81f6b846fee">CloseCurrentCycle</a> ()</td></tr>
<tr class="separator:ac1e42a48198d2abc8642d81f6b846fee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abca48ca404a02f35f06f295814407100"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1SparsePermutation.html#abca48ca404a02f35f06f295814407100">RemoveCycles</a> (const std::vector&lt; int &gt; &amp;cycle_indices)</td></tr>
<tr class="memdesc:abca48ca404a02f35f06f295814407100"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes the cycles with given indices from the permutation. <a href="#abca48ca404a02f35f06f295814407100">More...</a><br /></td></tr>
<tr class="separator:abca48ca404a02f35f06f295814407100"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6886dcada3acf697af20e88ce32a7ae1"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classoperations__research_1_1SparsePermutation.html#a6886dcada3acf697af20e88ce32a7ae1">DebugString</a> () const</td></tr>
<tr class="memdesc:a6886dcada3acf697af20e88ce32a7ae1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Output all non-identity cycles of the permutation, sorted lexicographically (each cycle is described starting by its smallest element; and all cycles are sorted lexicographically against each other). <a href="#a6886dcada3acf697af20e88ce32a7ae1">More...</a><br /></td></tr>
<tr class="separator:a6886dcada3acf697af20e88ce32a7ae1"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>A compact representation for permutations of {0..N-1} that displaces few elements: it needs only O(K) memory for a permutation that displaces K elements. </p>
<p class="definition">Definition at line <a class="el" href="sparse__permutation_8h_source.html#l00027">27</a> of file <a class="el" href="sparse__permutation_8h_source.html">sparse_permutation.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="ab4ee5c7df12fcaeb042a8c52654569bd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab4ee5c7df12fcaeb042a8c52654569bd">&#9670;&nbsp;</a></span>SparsePermutation()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">operations_research::SparsePermutation::SparsePermutation </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>size</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="sparse__permutation_8h_source.html#l00029">29</a> of file <a class="el" href="sparse__permutation_8h_source.html">sparse_permutation.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="ac1e64e1e738964d338be3cac2b2a58fd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac1e64e1e738964d338be3cac2b2a58fd">&#9670;&nbsp;</a></span>AddToCurrentCycle()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void operations_research::SparsePermutation::AddToCurrentCycle </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>x</em></td><td>)</td>
<td></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>To add a cycle to the permutation, repeatedly call <a class="el" href="classoperations__research_1_1SparsePermutation.html#ac1e64e1e738964d338be3cac2b2a58fd" title="To add a cycle to the permutation, repeatedly call AddToCurrentCycle() with the cycle&#39;s orbit,...">AddToCurrentCycle()</a> with the cycle's orbit, then call <a class="el" href="classoperations__research_1_1SparsePermutation.html#ac1e42a48198d2abc8642d81f6b846fee">CloseCurrentCycle()</a>; This shouldn't be called on trivial cycles (of length 1). </p>
<p class="definition">Definition at line <a class="el" href="sparse__permutation_8h_source.html#l00084">84</a> of file <a class="el" href="sparse__permutation_8h_source.html">sparse_permutation.h</a>.</p>
</div>
</div>
<a id="ac1e42a48198d2abc8642d81f6b846fee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac1e42a48198d2abc8642d81f6b846fee">&#9670;&nbsp;</a></span>CloseCurrentCycle()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void operations_research::SparsePermutation::CloseCurrentCycle </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></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="sparse__permutation_8h_source.html#l00090">90</a> of file <a class="el" href="sparse__permutation_8h_source.html">sparse_permutation.h</a>.</p>
</div>
</div>
<a id="a59a2f011b1fdc9a63d6557749542c354"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a59a2f011b1fdc9a63d6557749542c354">&#9670;&nbsp;</a></span>Cycle()</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_1SparsePermutation_1_1Iterator.html">SparsePermutation::Iterator</a> operations_research::SparsePermutation::Cycle </td>
<td>(</td>
<td class="paramtype">int&#160;</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 class="definition">Definition at line <a class="el" href="sparse__permutation_8h_source.html#l00117">117</a> of file <a class="el" href="sparse__permutation_8h_source.html">sparse_permutation.h</a>.</p>
</div>
</div>
<a id="a6886dcada3acf697af20e88ce32a7ae1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6886dcada3acf697af20e88ce32a7ae1">&#9670;&nbsp;</a></span>DebugString()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::string operations_research::SparsePermutation::DebugString </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Output all non-identity cycles of the permutation, sorted lexicographically (each cycle is described starting by its smallest element; and all cycles are sorted lexicographically against each other). </p>
<p>This isn't efficient; use for debugging only. Example: "(1 4 3) (5 9) (6 8 7)". </p>
</div>
</div>
<a id="a9fc0ca5752b5ad6cc2a78ff7c512b22a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9fc0ca5752b5ad6cc2a78ff7c512b22a">&#9670;&nbsp;</a></span>LastElementInCycle()</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::SparsePermutation::LastElementInCycle </td>
<td>(</td>
<td class="paramtype">int&#160;</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>This is useful for iterating over the pair {element, image} of a permutation: </p>
<p>for (int c = 0; c &lt; perm.NumCycles(); ++c) { int element = LastElementInCycle(c); for (int image : perm.Cycle(c)) { ///&lt; The pair is (element, image). ... element = image; } }</p>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000013">Todo:</a></b></dt><dd>(user): Provide a full iterator for this? Note that we have more information with the loop above. Not sure it is needed though. </dd></dl>
<p class="definition">Definition at line <a class="el" href="sparse__permutation_8h_source.html#l00124">124</a> of file <a class="el" href="sparse__permutation_8h_source.html">sparse_permutation.h</a>.</p>
</div>
</div>
<a id="a4941ad4a0095fa3bc4e8aa0e8fb521bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4941ad4a0095fa3bc4e8aa0e8fb521bf">&#9670;&nbsp;</a></span>NumCycles()</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::SparsePermutation::NumCycles </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="sparse__permutation_8h_source.html#l00033">33</a> of file <a class="el" href="sparse__permutation_8h_source.html">sparse_permutation.h</a>.</p>
</div>
</div>
<a id="abca48ca404a02f35f06f295814407100"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abca48ca404a02f35f06f295814407100">&#9670;&nbsp;</a></span>RemoveCycles()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void operations_research::SparsePermutation::RemoveCycles </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; int &gt; &amp;&#160;</td>
<td class="paramname"><em>cycle_indices</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Removes the cycles with given indices from the permutation. </p>
<p>This works in O(K) for a permutation displacing K elements. </p>
</div>
</div>
<a id="aff385d18c768ffa364c5dccb5fb35c0a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aff385d18c768ffa364c5dccb5fb35c0a">&#9670;&nbsp;</a></span>Size()</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::SparsePermutation::Size </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">
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000012">Todo:</a></b></dt><dd>(user,user): complete the reader API. </dd></dl>
<p class="definition">Definition at line <a class="el" href="sparse__permutation_8h_source.html#l00032">32</a> of file <a class="el" href="sparse__permutation_8h_source.html">sparse_permutation.h</a>.</p>
</div>
</div>
<a id="a0b05b1e840388f9aba5bbe79a392d7d6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0b05b1e840388f9aba5bbe79a392d7d6">&#9670;&nbsp;</a></span>Support()</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&lt;int&gt;&amp; operations_research::SparsePermutation::Support </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>Returns the "support" of this permutation; that is, the set of elements displaced by it. </p>
<p class="definition">Definition at line <a class="el" href="sparse__permutation_8h_source.html#l00037">37</a> of file <a class="el" href="sparse__permutation_8h_source.html">sparse_permutation.h</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="sparse__permutation_8h_source.html">sparse_permutation.h</a></li>
</ul>
</div><!-- contents -->
</div>
<div id="footer-container">
<div id="footer">
</div>
</div>
</body>
</html>