• Jump To … +
    components.js contract.js cut.js graph.js index.js path.js reducers.js search.js show.js tree.js
  • components.js

  • ¶
    import { addBinMap, addSet, diff, spreadK, spreadV, tuple, }
     from 'fenugreek-collections';
  • ¶

    components :: Map<edge> -> Map<component> maps each node to a set of connected nodes

    export const components = (edges) => {
      const trav = (comp = new Set, node) =>
         diff(spreadK(edges.get(node)))(comp).reduce(trav, addSet(comp)(node));
         
      const visitMap = (mMap = new Map, node) =>
         diff(trav(new Set, node))(mMap).map(tuple(trav(new Set, node)))
           .reduce(addBinMap, mMap);
      
      return spreadK(edges).reduce(visitMap, new Map);
    };
  • ¶

    componentSet :: Map<edge> -> Set<component> partitions an edgelist into sets of connected nodes

    export const componentSet = edges => new Set(spreadV(components(edges)));