11unsigned find_arc(
const std::vector<unsigned>&first_out,
const std::vector<unsigned>&head,
unsigned x,
unsigned y){
13 assert(ret !=
invalid_id &&
"arc does not exist");
18 assert(x < first_out.size()-1 &&
"node id out of bounds");
19 assert(y < first_out.size()-1 &&
"node id out of bounds");
21 for(
unsigned xy = first_out[x]; xy < first_out[x+1]; ++xy)
29 assert(ret !=
invalid_id &&
"arc does not exist");
34 assert(x < first_out.size()-1 &&
"node id out of bounds");
35 assert(y < first_out.size()-1 &&
"node id out of bounds");
38 begin = head.begin() + first_out[x],
39 end = head.begin() + first_out[x+1];
41 assert(std::is_sorted(begin, end) &&
"heads are not sorted");
43 pos = std::lower_bound(begin, end, y);
48 return pos - head.begin();
54 for(
unsigned i=0; i<path.size()-1; ++i) {
55 for(
unsigned xy=first_out[path[i]]; ; ++xy) {
56 assert(xy<first_out[path[i]+1]);
57 if(head[xy] == path[i+1]) {
71 path.resize(path.size()+1);
72 for(
unsigned i=path.size()-1; i>1; --i)
73 path[i] = head[path[i-1]];
84 const std::vector<unsigned>&a,
86 const std::vector<unsigned>&b
96 const std::vector<unsigned>&a,
98 const std::vector<unsigned>&b
108 std::vector<unsigned>&a,
110 const std::vector<unsigned>&b
122 std::vector<unsigned>&a,
124 const std::vector<unsigned>&b
136 std::vector<unsigned>&
tail,
137 const std::vector<unsigned>&head
144 std::vector<unsigned>&
tail,
145 const std::vector<unsigned>&head
152 const std::vector<unsigned>&
tail,
153 const std::vector<unsigned>&head
160 const std::vector<unsigned>&
tail,
161 const std::vector<unsigned>&head
std::vector< unsigned > tail
std::vector< unsigned > compute_stable_sort_permutation_using_key(const std::vector< T > &v, unsigned key_count, const K &get_key)
std::vector< unsigned > chain_permutation_first_left_then_right(const std::vector< unsigned > &p, const std::vector< unsigned > &q)
bool is_sorted_using_less(const std::vector< T > &v)
std::vector< unsigned > compute_inverse_sort_permutation_first_by_tail_then_by_head(unsigned node_count, const std::vector< unsigned > &tail, const std::vector< unsigned > &head)
unsigned find_arc_given_sorted_head(const std::vector< unsigned > &first_out, const std::vector< unsigned > &head, unsigned x, unsigned y)
std::vector< unsigned > compute_sort_permutation_first_by_tail_then_by_head_and_apply_sort_to_tail(unsigned node_count, std::vector< unsigned > &tail, const std::vector< unsigned > &head)
std::vector< T > apply_permutation(const std::vector< unsigned > &p, const std::vector< T > &v)
std::vector< T > apply_inverse_permutation(const std::vector< unsigned > &p, const std::vector< T > &v)
unsigned find_arc(const std::vector< unsigned > &first_out, const std::vector< unsigned > &head, unsigned x, unsigned y)
std::vector< unsigned > compute_inverse_sort_permutation_first_by_tail_then_by_head_and_apply_sort_to_tail(unsigned node_count, std::vector< unsigned > &tail, const std::vector< unsigned > &head)
std::vector< unsigned > compute_inverse_sort_permutation_first_by_left_then_by_right(unsigned a_count, const std::vector< unsigned > &a, unsigned b_count, const std::vector< unsigned > &b)
std::vector< unsigned > compute_inverse_stable_sort_permutation_using_key(const std::vector< T > &v, unsigned key_count, const K &get_key)
std::vector< unsigned > compute_sort_permutation_first_by_tail_then_by_head(unsigned node_count, const std::vector< unsigned > &tail, const std::vector< unsigned > &head)
std::vector< unsigned > compute_sort_permutation_first_by_left_then_by_right(unsigned a_count, const std::vector< unsigned > &a, unsigned b_count, const std::vector< unsigned > &b)
unsigned find_arc_or_return_invalid_given_sorted_head(const std::vector< unsigned > &first_out, const std::vector< unsigned > &head, unsigned x, unsigned y)
std::vector< unsigned > convert_node_path_to_arc_path(const std::vector< unsigned > &first_out, const std::vector< unsigned > &head, std::vector< unsigned >path)
std::vector< unsigned > compute_sort_permutation_first_by_left_then_by_right_and_apply_sort_to_left(unsigned a_count, std::vector< unsigned > &a, unsigned b_count, const std::vector< unsigned > &b)
std::vector< unsigned > convert_arc_path_to_node_path(unsigned source, const std::vector< unsigned > &head, std::vector< unsigned >path)
std::vector< unsigned > compute_inverse_sort_permutation_first_by_left_then_by_right_and_apply_sort_to_left(unsigned a_count, std::vector< unsigned > &a, unsigned b_count, const std::vector< unsigned > &b)
const unsigned invalid_id
unsigned find_arc_or_return_invalid(const std::vector< unsigned > &first_out, const std::vector< unsigned > &head, unsigned x, unsigned y)