Add usage and instructions to README.md
This commit is contained in:
		
							parent
							
								
									199cdb0ec2
								
							
						
					
					
						commit
						8bd3ae0a5e
					
				
							
								
								
									
										63
									
								
								README.md
								
								
								
								
							
							
						
						
									
										63
									
								
								README.md
								
								
								
								
							|  | @ -46,6 +46,69 @@ the data subgraph must also exist in the query graph. | |||
| 
 | ||||
|  | ||||
| 
 | ||||
| # Usage | ||||
| 
 | ||||
| Create your query and data graphs with [petgraph](https://github.com/petgraph/petgraph) | ||||
| or any library that implements the `Graph` trait. Then, call one of the following | ||||
| functions based on the problem type. | ||||
| 
 | ||||
| | Problem type                  | Call                            | | ||||
| |-------------------------------|---------------------------------| | ||||
| | Graph isomorphisms            | `isomorphisms`                  | | ||||
| | Subgraph isomorphisms         | `subgraph_isomorphisms`         | | ||||
| | Induced subgraph isomorphisms | `induced_subgraph_isomorphisms` | | ||||
| 
 | ||||
| These return a `Vf2Builder` with the algorithm configured. | ||||
| Next, call one of the following on the builder to enumerate the isomorphisms. | ||||
| 
 | ||||
| | Desired output           | Call    | | ||||
| |--------------------------|---------| | ||||
| | First isomorphism        | `first` | | ||||
| | Vector of isomorphisms   | `vec`   | | ||||
| | Iterator of isomorphisms | `iter`  | | ||||
| 
 | ||||
| Filling a vector can consume a significant amount of memory. | ||||
| Use the iterator to inspect isomorphisms as they are found. | ||||
| For the best performance, call `next_ref` | ||||
| on the iterator | ||||
| instead of `next` | ||||
| to avoid cloning each isomorphism. | ||||
| 
 | ||||
| You can configure the node and edge equality functions on the builder | ||||
| with `node_eq` and `edge_eq`, | ||||
| respectively. | ||||
| 
 | ||||
| # Example | ||||
| 
 | ||||
| This example shows how to find subgraph isomorphisms. | ||||
| 
 | ||||
| ```rust | ||||
| use petgraph::data::{Element, FromElements}; | ||||
| use petgraph::graph::DiGraph; | ||||
| 
 | ||||
| fn main() { | ||||
|     // Create query graph. | ||||
|     let query = DiGraph::<i32, ()>::from_elements([ | ||||
|         Element::Node { weight: 0 }, | ||||
|         Element::Node { weight: 1 }, | ||||
|         Element::Edge { source: 0, target: 1, weight: () }, | ||||
|     ]); | ||||
| 
 | ||||
|     // Create data graph. | ||||
|     let data = DiGraph::<i32, ()>::from_elements([ | ||||
|         Element::Node { weight: 0 }, | ||||
|         Element::Node { weight: 1 }, | ||||
|         Element::Node { weight: 2 }, | ||||
|         Element::Edge { source: 0, target: 1, weight: () }, | ||||
|         Element::Edge { source: 1, target: 2, weight: () }, | ||||
|     ]); | ||||
| 
 | ||||
|     // Find subgraph isomorphisms. | ||||
|     let isomorphisms = vf2::subgraph_isomorphisms(&query, &data).vec(); | ||||
|     assert_eq!(isomorphisms, vec![vec![0, 1], vec![1, 2]]); | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| # Remaining work | ||||
| 
 | ||||
| - [ ] Implement VF2 cutting rules | ||||
|  |  | |||
							
								
								
									
										30
									
								
								src/lib.rs
								
								
								
								
							
							
						
						
									
										30
									
								
								src/lib.rs
								
								
								
								
							|  | @ -7,24 +7,34 @@ | |||
| //!
 | ||||
| //! See the [repository](https://github.com/OwenTrokeBillard/vf2) for more information.
 | ||||
| //!
 | ||||
| //! # Instructions
 | ||||
| //! # Usage
 | ||||
| //!
 | ||||
| //! Create your query and data graphs with [petgraph](https://github.com/petgraph/petgraph)
 | ||||
| //! or any library that implements the [`Graph`] trait. Then, call one of the following
 | ||||
| //! functions based on the problem type:
 | ||||
| //! - Graph isomorphisms: [`isomorphisms`].
 | ||||
| //! - Subgraph isomorphisms: [`subgraph_isomorphisms`].
 | ||||
| //! - Induced subgraph isomorphisms: [`induced_subgraph_isomorphisms`].
 | ||||
| //! functions based on the problem type.
 | ||||
| //!
 | ||||
| //! | Problem type                  | Call                              |
 | ||||
| //! |-------------------------------|-----------------------------------|
 | ||||
| //! | Graph isomorphisms            | [`isomorphisms`]                  |
 | ||||
| //! | Subgraph isomorphisms         | [`subgraph_isomorphisms`]         |
 | ||||
| //! | Induced subgraph isomorphisms | [`induced_subgraph_isomorphisms`] |
 | ||||
| //!
 | ||||
| //! \
 | ||||
| //! These return a [`Vf2Builder`] with the algorithm configured.
 | ||||
| //! Next, call one of the following to enumerate the isomorphisms:
 | ||||
| //! - First isomorphism: [`first`](Vf2Builder::first).
 | ||||
| //! - Vector of isomorphisms: [`vec`](Vf2Builder::vec).
 | ||||
| //! - Iterator of isomorphisms: [`iter`](Vf2Builder::iter).
 | ||||
| //! Next, call one of the following on the builder to enumerate the isomorphisms.
 | ||||
| //!
 | ||||
| //! | Desired output           | Call                         |
 | ||||
| //! |--------------------------|------------------------------|
 | ||||
| //! | First isomorphism        | [`first`](Vf2Builder::first) |
 | ||||
| //! | Vector of isomorphisms   | [`vec`](Vf2Builder::vec)     |
 | ||||
| //! | Iterator of isomorphisms | [`iter`](Vf2Builder::iter)   |
 | ||||
| //!
 | ||||
| //! \
 | ||||
| //! Filling a vector can consume a significant amount of memory.
 | ||||
| //! Use the iterator to inspect isomorphisms as they are found.
 | ||||
| //! For even better performance, call [`next_ref`](IsomorphismIter::next_ref)
 | ||||
| //! For the best performance, call [`next_ref`](IsomorphismIter::next_ref)
 | ||||
| //! on the iterator
 | ||||
| //! instead of [`next`](IsomorphismIter::next)
 | ||||
| //! to avoid cloning each isomorphism.
 | ||||
| //!
 | ||||
| //! You can configure the node and edge equality functions on the builder
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue