<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=77.234.15.195&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=77.234.15.195&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/77.234.15.195"/>
		<updated>2026-05-06T07:24:17Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%B2_%D0%BB%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%BC_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B5&amp;diff=39885</id>
		<title>Генерация комбинаторных объектов в лексикографическом порядке</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%B2_%D0%BB%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%BC_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B5&amp;diff=39885"/>
				<updated>2014-08-11T19:17:05Z</updated>
		
		<summary type="html">&lt;p&gt;77.234.15.195: /* Описание процедуры построения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Генерация [[Комбинаторные объекты|комбинаторных объектов]] в [[Лексикографический порядок|лексикографическом порядке]] {{---}} непосредственное построение и перебор всех объектов заданного типа так, чтобы для любых двух объектов выполнялось условие: &amp;lt;tex&amp;gt;K_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;&amp;lt;&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;K_i&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;_+&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения ==&lt;br /&gt;
&lt;br /&gt;
==== Описание процедуры построения ====&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм генерирует все объекты заданного типа в лексикографическом порядке. На каждом шаге генерируется минимальный возможный префикс требуемого объекта.&lt;br /&gt;
&lt;br /&gt;
*genObj(K, p) {{---}} процедура генерирования&lt;br /&gt;
*''int'' p {{---}} глубина рекурсии&lt;br /&gt;
*''list &amp;lt;A&amp;gt;'' K {{---}} текущий комбинаторный объект.&lt;br /&gt;
*''int'' len {{---}} требуемый размер объекта&lt;br /&gt;
*''list &amp;lt;A&amp;gt;'' alpha {{---}} все возможные элементы комбинаторного объекта, отсортированные в лексикографическом порядке&lt;br /&gt;
*''int'' n {{---}} размер alpha&lt;br /&gt;
*''list &amp;lt;list &amp;lt;A&amp;gt; &amp;gt;'' ans {{---}} список, содержащий все сгенерированные объекты в нужном порядке&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''list &amp;lt;A&amp;gt;''' genObj(K, p)&lt;br /&gt;
   '''if''' p == len                             // если сформирован объект нужного размера, то возвращаем его    &lt;br /&gt;
     ans.push_back(K);                     // записываем объект K в ответ&lt;br /&gt;
   '''else'''&lt;br /&gt;
     '''for''' i = 1 .. n                        &lt;br /&gt;
        '''if''' к объекту К можно добавить элемент alpha[i] в конец&lt;br /&gt;
          K.push_back(alpha[i])                      &lt;br /&gt;
          genObj(K, p + 1)                 // добавляем alpha[i] в конец и вызываем функцию genObj от нового полученного префикса&lt;br /&gt;
          К.pop_back()&lt;br /&gt;
&lt;br /&gt;
==== Генерация с помощью процедуры получения следующего объекта ====&lt;br /&gt;
&lt;br /&gt;
Составляем первый объект {{---}} &amp;lt;tex&amp;gt;K_1&amp;lt;/tex&amp;gt;, для него [[Получение следующего объекта|получаем следующий объект]] {{---}} &amp;lt;tex&amp;gt;K_2&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;K_2&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;K_3&amp;lt;/tex&amp;gt;, далее действуем также, для &amp;lt;tex&amp;gt;K_i&amp;lt;/tex&amp;gt; получая &amp;lt;tex&amp;gt;K_i&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;_+&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;_1&amp;lt;/tex&amp;gt; объект, пока не получим последний объект &amp;lt;tex&amp;gt;K_n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
==== Пример генерации сочетаний из N элементов по M в лексикографическом порядке ====&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм генерирует все сочетания из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов по &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*genChooses(k, l) {{---}} процедура генерирования&lt;br /&gt;
*''list &amp;lt;int&amp;gt;'' a {{---}} текущее сочетание&lt;br /&gt;
*''int'' k {{---}} следующий элемент в сочетании&lt;br /&gt;
*''int'' l {{---}} глубина рекурсии&lt;br /&gt;
*''list &amp;lt;list &amp;lt;int&amp;gt; &amp;gt; ans'' {{---}} все сгенерированные сочетания в нужном порядке&lt;br /&gt;
&lt;br /&gt;
 '''list &amp;lt;int&amp;gt;''' genChooses(k, l)&lt;br /&gt;
   a[l] = k;&lt;br /&gt;
   '''if''' l == m        &lt;br /&gt;
     ans.push_back(a)&lt;br /&gt;
   '''for''' i = k + 1 to n&lt;br /&gt;
     genChooses(i, l + 1);&lt;br /&gt;
&lt;br /&gt;
==== Пример работы процедуры генерации ====&lt;br /&gt;
&lt;br /&gt;
Иллюстрация работы процедуры генерирования всех сочетаний из 4 по 2.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Chooses.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/Перечисление_(комбинаторика) Перечисление (комбинаторика)]&lt;br /&gt;
* [http://rain.ifmo.ru/cat/view.php/ ДИСКРЕТНАЯ МАТЕМАТИКА: АЛГОРИТМЫ]&lt;br /&gt;
* [http://algolist.ru/maths/combinat/ Комбинаторика и переборные задачи]&lt;br /&gt;
* [http://e-maxx.ru/algo/ Комбинаторика]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>77.234.15.195</name></author>	</entry>

	</feed>