UNPKG

graph-curry

Version:

a Map based implementation of canonical graph data algorithms

146 lines (98 loc) 5.31 kB
<!DOCTYPE html> <html> <head> <title>components.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <ul id="jump_to"> <li> <a class="large" href="javascript:void(0);">Jump To &hellip;</a> <a class="small" href="javascript:void(0);">+</a> <div id="jump_wrapper"> <div id="jump_page_wrapper"> <div id="jump_page"> <a class="source" href="components.html"> components.js </a> <a class="source" href="contract.html"> contract.js </a> <a class="source" href="cut.html"> cut.js </a> <a class="source" href="graph.html"> graph.js </a> <a class="source" href="index.html"> index.js </a> <a class="source" href="path.html"> path.js </a> <a class="source" href="reducers.html"> reducers.js </a> <a class="source" href="search.html"> search.js </a> <a class="source" href="show.html"> show.js </a> <a class="source" href="tree.html"> tree.js </a> </div> </div> </li> </ul> <ul class="sections"> <li id="title"> <div class="annotation"> <h1>components.js</h1> </div> </li> <li id="section-1"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-1">&#182;</a> </div> </div> <div class="content"><div class='highlight'><pre><span class="hljs-keyword">import</span> { addBinMap, addSet, diff, spreadK, spreadV, tuple, } <span class="hljs-keyword">from</span> <span class="hljs-string">'fenugreek-collections'</span>;</pre></div></div> </li> <li id="section-2"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-2">&#182;</a> </div> <p><strong>components</strong> <code>:: Map&lt;edge&gt; -&gt; Map&lt;component&gt;</code> maps each node to a set of connected nodes</p> </div> <div class="content"><div class='highlight'><pre><span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> components = <span class="hljs-function">(<span class="hljs-params">edges</span>) =&gt;</span> { <span class="hljs-keyword">const</span> trav = <span class="hljs-function">(<span class="hljs-params">comp = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Set</span>, node</span>) =&gt;</span> diff(spreadK(edges.get(node)))(comp).reduce(trav, addSet(comp)(node)); <span class="hljs-keyword">const</span> visitMap = <span class="hljs-function">(<span class="hljs-params">mMap = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Map</span>, node</span>) =&gt;</span> diff(trav(<span class="hljs-keyword">new</span> <span class="hljs-built_in">Set</span>, node))(mMap).map(tuple(trav(<span class="hljs-keyword">new</span> <span class="hljs-built_in">Set</span>, node))) .reduce(addBinMap, mMap); <span class="hljs-keyword">return</span> spreadK(edges).reduce(visitMap, <span class="hljs-keyword">new</span> <span class="hljs-built_in">Map</span>); };</pre></div></div> </li> <li id="section-3"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-3">&#182;</a> </div> <p><strong>componentSet</strong> <code>:: Map&lt;edge&gt; -&gt; Set&lt;component&gt;</code> partitions an edgelist into sets of connected nodes</p> </div> <div class="content"><div class='highlight'><pre><span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> componentSet = <span class="hljs-function"><span class="hljs-params">edges</span> =&gt;</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Set</span>(spreadV(components(edges)));</pre></div></div> </li> </ul> </div> </body> </html>