Комбинаторика.



Вычисление факториала. Скачать


    Этот алгоритм я сделал одним из первых когда пробовал "Редактор блок-схем" поэтому и сюда его добавил. Хотя особой необходимости в нем нет.
Наверх

Нахождение числа сочетаний . Скачать


    Функция находит число сочетаний из n элементов по m:
	
    Вычисления проводятся по рекурентной формуле:
	
Наверх

Перестановки. Скачать


     Процедура находит перестановку следующую за данной в лексикографическом порядке. Начальная перестановка задается в массиве X туда же после работы процедуры помещается найденная перестановка. Переменная END равна истине, если на вход подана перестановка являющаяся последней при лексикографическом упорядочивании. Таким образом чтобы получить все перестановки n - чисел надо инициализировать массив X значениями 1,2,. . ., n и последовательно вызывать процедуру до тех пор пока значение переменной END не окажется равным истине.
    Заметим, что количество перестановок из n чисел будет равно факториалу числа n.
Наверх

Задача о коммивояжере (методом комбинаторики). Скачать


     Процедура находит решение задачи о коммивояжере, используя предыдущий алгоритм для получения всех возможных путей. На вход процедуры подается матрица цен на билеты W при этом, если нет пути из одного города в другой, то соответствующий элемент матрицы равен 10Е6. Матрица не обязательно симметричная. В переменной f находится номер города из которого коммивояжер начинает путешествие. Затем используя алгоритм получения перестановок перебираются все возможные пути и вычисляется их цена и таким образом находится путь минимальный по затратам, который помещается в массив x.
    Хочется сразу заметить, что данный алгоритм не является наилучшим способом решения задачи, но показателен именно комбинаторным подходом.
Наверх

Выборки из n элементов по m. Скачать


     Процедура находит выборку следующую за данной в лексикографическом порядке. Начальная выборка задается в массиве X туда же после работы процедуры помещается найденная выборка. Переменная END равна истине, если на вход подана выборка являющаяся последней при лексикографическом упорядочивании. Таким образом чтобы получить все выборки - надо инициализировать массив X значениями 1,2,. . ., m и последовательно вызывать процедуру до тех пор пока значение переменной END не окажется равным истине. Числа внутри выборки, поданной на вход процедуры, должны быть упорядочены по возрастанию.
    Заметим, что количество выборок m из n равно числу сочетаний m из n и вычисляется с помощью этого алгоритма.
Наверх

Решение задачи о рюкзаке. Скачать


     Алгоритм решает задачу о рюкзаке, которая формулируется так: Дан, упорядоченный по неубыванию, массив A целых положительных чисел и некоторое Sum, необходимо найти все подпоследовательности массива A сумма элементов которых равна в точности Sum. Подробно решение рассматривается в статье Перебор и его сокращение.
    В результате работы алгоритма получаем переменную L равную количеству найденых последовательностей. Сами последовательности помещаются в масcив строк Results, каждая строка представляет номера элементов массива A, разделенные запятыми.
Наверх