Permutations
void permute(permtype * p, const char * expr) {
p->perms[0][0] = expr[0];
for (size_t i = 1; i < p->LEN; ++i)
merge(p, i, expr[i]);
}
void merge(permtype * p, const size_t index, const char elem) {
const size_t Nprev = index > 0 ? factorial(index) : 0;
assert(p->N > Nprev);
size_t j = Nprev;
for (size_t i = 0; i < Nprev; ++i) {
for ( size_t k = 0; k < index; ++k )
splice(&(p->perms[j++]), p->perms[i], elem, k, index);
p->perms[i][index] = elem;
}
}
Комментариев нет:
Отправить комментарий