diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/toposort/README.md | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/toposort/README.md')
| -rw-r--r-- | node_modules/toposort/README.md | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/node_modules/toposort/README.md b/node_modules/toposort/README.md new file mode 100644 index 00000000..58d4ab3e --- /dev/null +++ b/node_modules/toposort/README.md @@ -0,0 +1,98 @@ +# Toposort + +Sort directed acyclic graphs + +[](https://travis-ci.org/marcelklehr/toposort) + +## Installation + +`npm install toposort` or `component install marcelklehr/toposort` + +then in your code: + +```js +toposort = require('toposort') +``` + +## Usage +We want to sort the following graph. + + + +```js +// First, we define our edges. +var graph = [ + ['put on your shoes', 'tie your shoes'] +, ['put on your shirt', 'put on your jacket'] +, ['put on your shorts', 'put on your jacket'] +, ['put on your shorts', 'put on your shoes'] +] + + +// Now, sort the vertices topologically, to reveal a legal execution order. +toposort(graph) +// [ 'put on your shirt' +// , 'put on your shorts' +// , 'put on your jacket' +// , 'put on your shoes' +// , 'tie your shoes' ] +``` + +(Note that there is no defined order for graph parts that are not connected + -- you could also put on your jacket after having tied your shoes...) + +### Sorting dependencies +It is usually more convenient to specify *dependencies* instead of "sequences". +```js +// This time, edges represent dependencies. +var graph = [ + ['tie your shoes', 'put on your shoes'] +, ['put on your jacket', 'put on your shirt'] +, ['put on your shoes', 'put on your shorts'] +, ['put on your jacket', 'put on your shorts'] +] + +toposort(graph) +// [ 'tie your shoes' +// , 'put on your shoes' +// , 'put on your jacket' +// , 'put on your shirt' +// , 'put on your shorts' ] + +// Now, reversing the list will reveal a legal execution order. +toposort(graph).reverse() +// [ 'put on your shorts' +// , 'put on your shirt' +// , 'put on your jacket' +// , 'put on your shoes' +// , 'tie your shoes' ] +``` + +## API + +### toposort(edges) + ++ edges {Array} An array of directed edges describing a graph. An edge looks like this: `[node1, node2]` (vertices needn't be strings but can be of any type). + +Returns: {Array} a list of vertices, sorted from "start" to "end" + +Throws an error if there are any cycles in the graph. + +### toposort.array(nodes, edges) + ++ nodes {Array} An array of nodes ++ edges {Array} An array of directed edges. You don't need to mention all `nodes` here. + +This is a convenience method that allows you to define nodes that may or may not be connected to any other nodes. The ordering of unconnected nodes is not defined. + +Returns: {Array} a list of vertices, sorted from "start" to "end" + +Throws an error if there are any cycles in the graph. + +## Tests + +Run the tests with `node test.js`. + +## Legal + +MIT License |
