Изменения

Перейти к: навигация, поиск
Пример генерации сочетаний из N элементов по K в лексикографическом порядке
== Примеры ==
==== Пример генерации сочетаний из N элементов по K M в лексикографическом порядке ====
Первым сочетанием, очевидно, будет сочетание Пусть <tex>gen(1k,2l)</tex> - процедура генерирования,...где <tex>a</tex> - текущее сочетание,K)<tex>k</tex>. Научимся для текущего сочетания находить лексикографически следующее. Для этого - следующий элемент в текущем сочетании найдём самый правый элемент, не достигший ещё своего наибольшего значения; тогда увеличим его на единицу, а всем последующим элементам присвоим наименьшие значения <tex>l</tex> - глубина рекурсии.
Пусть <tex>next_combination procedure gen(ak, nl : longint)</tex> - процедура генерирования, где <tex>a</tex> - текущее сочетание, <tex>n</tex> - количество элементов.; var i : longint; bool next_combination (vector<int> & begin a, int n) [l] := k; if l = m then {объект имеет требуемый размер} int k = (int)a.size(); begin for (int ij :=k-1; i>=0; --i) if to m do write(a[ij] < n-k+i+1, ' ') ; {выводим текущее сочетание} ++a[i] writeln; end else for (int ji :=i+1; j<k; ++j) a[j] = a[j-1]to n do rec(i, l+1); return true; {перебираем подходящий префикс} return false end; }
==== Пример работы процедуры генерации ====
59
правок

Навигация