42 lines
		
	
	
		
			940 B
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			940 B
		
	
	
	
		
			C++
		
	
	
| /*
 | |
|  * DSFVector.h
 | |
|  *
 | |
|  *   Created on: Jun 25, 2010
 | |
|  *       Author: nikai
 | |
|  *  Description: a faster implementation for DSF, which uses vector rather than btree.
 | |
|  *               As a result, the size of the forest is prefixed.
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <vector>
 | |
| #include <map>
 | |
| #include <set>
 | |
| 
 | |
| namespace gtsam {
 | |
| 
 | |
| 	/**
 | |
| 	 * A fast impelementation of disjoint set forests
 | |
| 	 */
 | |
| 	class DSFVector : protected std::vector<std::size_t> {
 | |
| 	private:
 | |
| 
 | |
| 	public:
 | |
| 		// constructor
 | |
| 		DSFVector(const std::size_t numNodes);
 | |
| 
 | |
| 		// find the label of the set in which {key} lives
 | |
| 		size_t findSet(const size_t& key) const;
 | |
| 
 | |
| 		// the in-place version of makeUnion
 | |
| 		void makeUnionInPlace(const std::size_t& i1, const std::size_t& i2);
 | |
| 
 | |
| 		// get the nodes in the tree with the given label
 | |
| 		std::set<size_t> set(const std::size_t& label) const;
 | |
| 
 | |
| 		// return all sets, i.e. a partition of all elements
 | |
| 		std::map<size_t, std::set<size_t> > sets() const;
 | |
| 	};
 | |
| 
 | |
| }
 |