14namespace LinguisticProcessing
24 std::map< uint64_t, std::set< uint64_t > >& exclusions,
25 std::map< uint64_t, bool >& sizes,
26 std::vector< uint64_t >& order)
28 std::vector< std::set< uint64_t > > searchspace;
29 searchspace = buildSearchSpace(exclusions, order);
31 std::set< std::set< uint64_t >, SizeSorter > cleanedSearchSpace;
32 cleanedSearchSpace = removeVertexEntriesFromSearchSpace(searchspace, sizes);
34 std::list< std::set< uint64_t > > result;
35 result = removeIncludedVector(cleanedSearchSpace);
42 std::map< uint64_t, std::set< uint64_t > >& exclusions,
43 std::map< uint64_t, bool >& sizes,
44 std::vector< uint64_t >& order)
51 std::map< uint64_t, std::set< uint64_t > >::const_iterator it, it_end;
52 it = exclusions.begin(); it_end = exclusions.end();
53 std::set< uint64_t > soleResult;
54 for (; it != it_end; it++)
56 soleResult.insert((*it).first);
58 std::vector< std::set< uint64_t > > searchspace;
60 searchspace = buildSearchSpace(exclusions, order);
64 std::set< std::set< uint64_t >, SizeSorter > cleanedSearchSpace;
65 cleanedSearchSpace = removeVertexEntriesFromSearchSpace(searchspace, sizes);
68 std::list< std::set< uint64_t > > result;
69 result = removeIncludedVector(cleanedSearchSpace);
75std::vector< std::set< uint64_t > > CompoundsCompatibilityBuilder::buildSearchSpace(
76 std::map< uint64_t, std::set< uint64_t > >& exclusions,
77 const std::vector< uint64_t >& order)
83 std::vector< std::set< uint64_t > > searchspace;
84 std::vector< uint64_t >::const_iterator itOrder, itOrder_end;
85 itOrder = order.begin(); itOrder_end = order.end();
86 for(; itOrder != itOrder_end; itOrder++)
88 uint64_t el = *itOrder;
94 const std::set< uint64_t >& localexclusions = exclusions[el];
95 std::vector< std::set< uint64_t > > newsearchspace;
97 std::vector< std::set< uint64_t > >::const_iterator sSpaceIt, sSpaceIt_end;
98 sSpaceIt = searchspace.begin(); sSpaceIt_end = searchspace.end();
99 for (; sSpaceIt != sSpaceIt_end; sSpaceIt++)
101 const std::set< uint64_t >& subansw = *sSpaceIt;
102 bool toinclude =
true;
103 std::set< uint64_t >::const_iterator exIt, exIt_end;
104 exIt = localexclusions.begin(); exIt_end = localexclusions.end();
105 for(; exIt != exIt_end; exIt++)
113 if (subansw.find(ex) != subansw.end())
123 std::set< uint64_t > newsubansw = subansw;
124 newsubansw.insert(el);
125 newsearchspace.push_back(newsubansw);
129 newsearchspace.push_back(subansw);
132 if (!newsearchspace.empty())
134 searchspace = newsearchspace;
144 std::set< uint64_t > elarray;
146 searchspace.push_back(elarray);
152std::set< std::set< uint64_t >, CompoundsCompatibilityBuilder::SizeSorter > CompoundsCompatibilityBuilder::removeVertexEntriesFromSearchSpace(
153 const std::vector< std::set< uint64_t > >& searchspace,
154 std::map< uint64_t, bool >& sizes)
160 std::set< std::set< uint64_t >, SizeSorter > newsearchspace;
161 std::vector< std::set< uint64_t > >::const_iterator searchSpaceIt, searchSpaceIt_end;
162 searchSpaceIt = searchspace.begin(); searchSpaceIt_end = searchspace.end();
164 for (; searchSpaceIt != searchSpaceIt_end; searchSpaceIt++)
166 const std::set< uint64_t >& searchspaceelem = *searchSpaceIt;
171 std::set< uint64_t > newelem;
172 std::set< uint64_t >::const_iterator elemIt, elemIt_end;
173 elemIt = searchspaceelem.begin(); elemIt_end = searchspaceelem.end();
174 for (; elemIt != elemIt_end; elemIt++)
178 newelem.insert(*elemIt);
182 if (!newelem.empty())
189 newsearchspace.insert(newelem);
196 return newsearchspace;
200std::list< std::set< uint64_t > > CompoundsCompatibilityBuilder::removeIncludedVector(
201 const std::set< std::set< uint64_t >, CompoundsCompatibilityBuilder::SizeSorter >& searchSpace)
203 std::list< std::set< uint64_t > > result;
204 std::set< std::set< uint64_t >, SizeSorter >::const_iterator searchSpaceIt, searchSpaceIt_end;
205 searchSpaceIt = searchSpace.begin(); searchSpaceIt_end = searchSpace.end();
206 for (; searchSpaceIt != searchSpaceIt_end; searchSpaceIt++)
208 const std::set< uint64_t >& searchspaceelem = *searchSpaceIt;
210 std::list< std::set< uint64_t > >::const_iterator resit, resit_end;
211 resit = result.begin(); resit_end = result.end();
212 for (; resit != resit_end; resit++)
214 const std::set< uint64_t >& res = *resit;
215 std::set< uint64_t > intersec;
216 std::insert_iterator< std::set< uint64_t > > ins(intersec, intersec.end());
217 std::set_difference(searchspaceelem.begin(), searchspaceelem.end(),
218 res.begin(), res.end(), ins );
220 if (intersec.empty()){ found =
true;
break; }
224 result.push_back(searchspaceelem);
233 std::cerr <<
"Displaying " << searchSpace.size() <<
" results" << std::endl;
234 std::list< std::set< uint64_t > >::const_iterator it, it_end;
235 it = searchSpace.begin(); it_end = searchSpace.end();
237 for (;it != it_end; it++)
239 std::cerr << *it << std::endl;
243std::ostream&
operator<<(std::ostream& os,
const std::set< uint64_t >& subres)
245 std::set< uint64_t >::const_iterator it, it_end;
246 it= subres.begin(); it_end = subres.end();
251 for (; it != it_end; it++)
258std::ostream&
operator<<(std::ostream& os,
const std::vector< uint64_t >& subres)
260 std::vector< uint64_t >::const_iterator it, it_end;
261 it= subres.begin(); it_end = subres.end();
266 for (; it != it_end; it++)
std::list< std::set< uint64_t > > computeCompatibilitiesWithChain(std::map< uint64_t, std::set< uint64_t > > &exclusions, std::map< uint64_t, bool > &sizes, std::vector< uint64_t > &order)
void displayResult(const std::list< std::set< uint64_t > > &searchSpace)
CompoundsCompatibilityBuilder()
std::list< std::set< uint64_t > > computeCompatibilities(std::map< uint64_t, std::set< uint64_t > > &exclusions, std::map< uint64_t, bool > &sizes, std::vector< uint64_t > &order)
std::ostream & operator<<(std::ostream &os, const std::set< uint64_t > &subres)