summaryrefslogtreecommitdiff
path: root/doc/johnson_cycles.1.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/johnson_cycles.1.html')
-rw-r--r--doc/johnson_cycles.1.html268
1 files changed, 268 insertions, 0 deletions
diff --git a/doc/johnson_cycles.1.html b/doc/johnson_cycles.1.html
new file mode 100644
index 0000000..225f95c
--- /dev/null
+++ b/doc/johnson_cycles.1.html
@@ -0,0 +1,268 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv='content-type' value='text/html;charset=utf8'>
+ <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
+ <title>johnson_cycles(1) - Enumerate the simple cycles of a graph</title>
+ <style type='text/css' media='all'>
+ /* style: man */
+ body#manpage {margin:0}
+ .mp {max-width:100ex;padding:0 9ex 1ex 4ex}
+ .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
+ .mp h2 {margin:10px 0 0 0}
+ .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
+ .mp h3 {margin:0 0 0 4ex}
+ .mp dt {margin:0;clear:left}
+ .mp dt.flush {float:left;width:8ex}
+ .mp dd {margin:0 0 0 9ex}
+ .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
+ .mp pre {margin-bottom:20px}
+ .mp pre+h2,.mp pre+h3 {margin-top:22px}
+ .mp h2+pre,.mp h3+pre {margin-top:5px}
+ .mp img {display:block;margin:auto}
+ .mp h1.man-title {display:none}
+ .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
+ .mp h2 {font-size:16px;line-height:1.25}
+ .mp h1 {font-size:20px;line-height:2}
+ .mp {text-align:justify;background:#fff}
+ .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
+ .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
+ .mp u {text-decoration:underline}
+ .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
+ .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
+ .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
+ .mp b.man-ref {font-weight:normal;color:#434241}
+ .mp pre {padding:0 4ex}
+ .mp pre code {font-weight:normal;color:#434241}
+ .mp h2+pre,h3+pre {padding-left:0}
+ ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
+ ol.man-decor {width:100%}
+ ol.man-decor li.tl {text-align:left}
+ ol.man-decor li.tc {text-align:center;letter-spacing:4px}
+ ol.man-decor li.tr {text-align:right;float:right}
+ </style>
+ <style type='text/css' media='all'>
+ /* style: toc */
+ .man-navigation {display:block !important;position:fixed;top:0;left:113ex;height:100%;width:100%;padding:48px 0 0 0;border-left:1px solid #dbdbdb;background:#eee}
+ .man-navigation a,.man-navigation a:hover,.man-navigation a:link,.man-navigation a:visited {display:block;margin:0;padding:5px 2px 5px 30px;color:#999;text-decoration:none}
+ .man-navigation a:hover {color:#111;text-decoration:underline}
+ </style>
+</head>
+<!--
+ The following styles are deprecated and will be removed at some point:
+ div#man, div#man ol.man, div#man ol.head, div#man ol.man.
+
+ The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
+ .man-navigation should be used instead.
+-->
+<body id='manpage'>
+ <div class='mp' id='man'>
+
+ <div class='man-navigation' style='display:none'>
+ <a href="#NAME">NAME</a>
+ <a href="#SYNOPSIS">SYNOPSIS</a>
+ <a href="#DESCRIPTION">DESCRIPTION</a>
+ <a href="#PARAMETERS">PARAMETERS</a>
+ <a href="#OUTPUT">OUTPUT</a>
+ <a href="#EXAMPLES">EXAMPLES</a>
+ <a href="#SEE-ALSO">SEE ALSO</a>
+ <a href="#REFERENCES">REFERENCES</a>
+ <a href="#AUTHORS">AUTHORS</a>
+ </div>
+
+ <ol class='man-decor man-head man head'>
+ <li class='tl'>johnson_cycles(1)</li>
+ <li class='tc'>www.complex-networks.net</li>
+ <li class='tr'>johnson_cycles(1)</li>
+ </ol>
+
+ <h2 id="NAME">NAME</h2>
+<p class="man-name">
+ <code>johnson_cycles</code> - <span class="man-whatis">Enumerate the simple cycles of a graph</span>
+</p>
+
+<h2 id="SYNOPSIS">SYNOPSIS</h2>
+
+<p><code>johnson_cycles</code> <var>graph_in</var> [<var>max_length</var> [SHOW]]</p>
+
+<h2 id="DESCRIPTION">DESCRIPTION</h2>
+
+<p><code>johnson_cycles</code> enumerates all the simple cycles of the graph given
+on input, and prints the total number of cycles of each length. If
+<var>max_length</var> is provided, <code>johnson_cycles</code> ignores any cycle whose
+length is larger than <var>max_length</var>. If <code>SHOW</code> is given as third
+argument, all the found cycles are printed on STDERR as soon as they
+are found.</p>
+
+<h2 id="PARAMETERS">PARAMETERS</h2>
+
+<ul>
+<li><p><var>graph_in</var>:
+ input graph (edge list) if equal to <code>-</code> (dash), read the edge list
+ from STDIN.</p></li>
+<li><p><var>max_length</var>: The maximum length of cycles to count/print. If not
+ provided, <code>johnson_cycles</code> tries to find all the cycles of the
+ graph (see the <strong>WARNING</strong> in the section <a href="#OUTPUT" title="OUTPUT" data-bare-link="true">OUTPUT</a> below).</p></li>
+<li><p>SHOW:
+ If the third (optional) parameter is equal to <code>SHOW</code>, the program
+ will dump on the standard error all the cycles found.</p></li>
+</ul>
+
+
+<h2 id="OUTPUT">OUTPUT</h2>
+
+<p><code>johnson_cycles</code> prints on the standard output the number of cycles of
+each length, in the format:</p>
+
+<pre><code> 2 N_2
+ 3 N_3
+ 4 N_4
+ 5 N_5
+ ...
+</code></pre>
+
+<p>where 2, 3, 4, 5... is the cycle lengths and N_2, N_3, N_4, N_5... is
+(twice) the number of cycles of that length. If <code>SHOW</code> is given, each
+cycle is also printed on STDERR as soon as it is found, in the format:</p>
+
+<pre><code>node_l node_(l-1) node_(l-2) ... node_0
+</code></pre>
+
+<p>where <code>node_l</code>, <code>node_(l-1)</code>, etc. are the labels of the nodes
+belonging to the cycle which starts at node <code>node_0</code>.</p>
+
+<p><strong>WARNING</strong>: If the second parameter <var>max_length</var> is not provided,
+ <code>johnson_cycles</code> will try to enumerate <strong>all</strong> the cycles of the
+ graph. In general, this might take a time <strong>exponential</strong> in the
+ number of nodes and edges of the graph. As a consequence, specifying
+ a maximum length is <strong>highly recommended</strong> if you are not interested
+ in finding the number of cycles of any length.</p>
+
+<h2 id="EXAMPLES">EXAMPLES</h2>
+
+<p>We can count the cycle of any length in the graph of Florentine
+families using the command:</p>
+
+<pre><code> $ johnson_cycles florentine.net
+ 2 20
+ 3 6
+ 4 4
+ 5 6
+ 6 10
+ 7 20
+ 8 22
+ 9 8
+ 10 2
+ 11 0
+ 12 0
+ 13 0
+ 14 0
+ 15 0
+ 16 0
+ $
+</code></pre>
+
+<p>The output means that the graph has 20 cycles of length 2 (edges),
+6/2=3 cycles of length 3, 4/2=2 cycles of length 4, and so on. We
+could otherwise focus on the cycles of length up to 5 and have each
+cycle printed on output:</p>
+
+<pre><code> $ johnson_cycles florentine.net 5 SHOW
+ 8 0
+ 5 1
+ 8 15 6 1
+ 8 12 15 6 1
+ 6 1
+ 6 15 12 8 1
+ 6 15 8 1
+ 8 1
+ 8 12 14 4 2
+ ....
+ 15 12
+ 2 20
+ 3 6
+ 4 4
+ 5 6
+ $
+</code></pre>
+
+<p>Apart from the degenerate cycles like "8 0", "5 1", etc.,
+corresponding to the cycles obtained by traversing the same undirected
+edge in the two possible directions, we see in that list some of the
+cycles of length 4 (such as "8 15 6 1") and of length 5 (such as "8 12
+15 6 1").</p>
+
+<p>The enumeration of all the cycles is normally impractical on larger
+graphs, so it is highly recommended to limit the search to short
+sizes. For instance, the command:</p>
+
+<pre><code> $ johnson_cycles er_1000_5000.net 6
+ 2 5000
+ 3 340
+ 4 2406
+ 5 19416
+ 6 160554
+ $
+</code></pre>
+
+<p>will require less than one second on a modern desktop computer, but
+the command:</p>
+
+<pre><code> $ johnson_cycles er_1000_5000.net 7
+ 2 5000
+ 3 340
+ 4 2406
+ 5 19416
+ 6 160554
+ 7 1360104
+ $
+</code></pre>
+
+<p>will probably take about 15 seconds, while:</p>
+
+<pre><code> $ johnson_cycles er_1000_5000.net 8
+ 2 5000
+ 3 340
+ 4 2406
+ 5 19416
+ 6 160554
+ 7 1360104
+ 8 11743500
+ $
+</code></pre>
+
+<p>will run for more than 2 minutes, and larger cycle lengths will
+require exponentially more time.</p>
+
+<h2 id="SEE-ALSO">SEE ALSO</h2>
+
+<p><a class="man-ref" href="f3m.1.html">f3m<span class="s">(1)</span></a>, <a class="man-ref" href="shortest.1.html">shortest<span class="s">(1)</span></a></p>
+
+<h2 id="REFERENCES">REFERENCES</h2>
+
+<ul>
+<li><p>D. B. Johnson. "Finding All the Elementary Circuits of a Directed
+Graph". SIAM J. Comput. 4 (1975), 77-84.</p></li>
+<li><p>V. Latora, V. Nicosia, G. Russo, "Complex Networks: Principles,
+Methods and Applications", Chapter 8, Cambridge University Press
+(2017)</p></li>
+<li><p>V. Latora, V. Nicosia, G. Russo, "Complex Networks: Principles,
+Methods and Applications", Appendix 15, Cambridge University Press
+(2017)</p></li>
+</ul>
+
+
+<h2 id="AUTHORS">AUTHORS</h2>
+
+<p>(c) Vincenzo 'KatolaZ' Nicosia 2009-2017 <code>&lt;v.nicosia@qmul.ac.uk&gt;</code>.</p>
+
+
+ <ol class='man-decor man-foot man foot'>
+ <li class='tl'>www.complex-networks.net</li>
+ <li class='tc'>September 2017</li>
+ <li class='tr'>johnson_cycles(1)</li>
+ </ol>
+
+ </div>
+</body>
+</html>