![](/user_photo/2706_HbeT2.jpg)
- •Глава 1. Математическое и программное обеспечение процесса моделирования
- •Тема 1. Математическое введение
- •1.1. Линейная алгебра и математический анализ
- •1.2. Теория вероятностей
- •1.3. Дискретная математика
- •If dop[y] then
- •З 1 2адачи
- •6 5 3 4
- •Основные понятия моделирования систем
- •Задания по теме 1 неделя № 4
- •25 Минут 6 заданий – минимум
1.3. Дискретная математика
Простейшие комбинаторные конфигурации
1. Размещения с повторениями. Пусть дано неограниченное число предметов, относящихся к n различным видам. r-размещениями с повторениями называются различные расстановки из этих предметов по r штук в каждой, образованные по следующим правилам.
1. Две расстановки считаются различными, если они отличаются либо видом входящих в них предметов, либо порядком следования этих видов.
2. В каждую расстановку может входить несколько предметов одного вида.
Свойство.
Число r-размещений
с повторениями из предметов n
типов обозначается
и
равноnr.
Пример 1.6. В азбуке Морзе самый длинный код буквы состоит из 5 символов. Можно ли использовать коды длиной не более 4-х символов?
Решение.
В
соответствии с правилом суммы число
различных кодов длиной не более 4 символов
при использовании 2 видов символов
(точка и тире) равно
=
2 + 4 + 8 + 16 = 30. Значит, 4-х символьных кодов
не хватит для кодирования даже всех
букв кириллицы, не говоря о служебных
символах. При использовании же 5-ти
символьных кодовN
= 30 +
= 62, т.е. такой длины кода достаточно.
2. Размещения и перестановки без повторений. Размещениями без повторений называются упорядоченные r-выборки из n-множества. Такие расстановки по r элементов составляются из n неповторяющихся предметов.
Свойство.
Число r-размещений
без повторений из n
предметов обозначается
и равноn(n
– 1)…(n
– r
+ 1) =
.
Пример 1.7. Из 25 человек, членов комитета, надо выбрать: председателя, вице-председателя, секретаря и казначея (4 человека). Совмещение должностей не допускается.
В
этом примере повторение элементов
невозможно, т.к. не допускается совмещение
должностей. Кроме того, в данной 4-выборке
важен порядок выбора, т.к. надо не просто
выбрать заданное число человек, но
необходимо связать каждого выбранного
с определенной должностью. Следовательно,
здесь речь идет о размещении без
повторений. Число способов выбора 4-х
членов в руководство комитета из 25
человек равно
= 25242322
= 303600.
В
частном случае при r
= n
получаем
= Рn
= n!
Данная конфигурация называется
перестановкой
из n
неповторяющихся предметов – упорядоченная
n-выборка
из n-множества.
3. Сочетания без повторений. Так называются неупорядоченные r-выборки из n-множества (r < n).
Свойство.
Число r-сочетаний
без повторений из n
предметов обозначается
и
равно
.
Пример 1.8. Из 125 человек надо выбрать 6 делегатов на конференцию.
В
данном примере порядок выбора не играет
роли, следовательно, имеет место
6-сочетание из 125-множества. 6 делегатов
из 125 человек можно выбрать
= 4.69110
9
способами
Пример 1.9. В лотерее из 36 номеров будут выбраны 5. Какова вероятность угадать ровно 3 номера из 5?
Решение.
3 номера из 5 верных можно выбрать
способами.
На каждый угаданный номер могут
приходиться любые 2 из 31 невыбранных
номеров, т.е.
сочетаний. Окончательное число
благоприятных случаев равно
.
Общее же число случаев равно количеству
выпадения 5 номеров из 36, т.е.
.
Отсюда
вероятность угадывания равна
0.0123 – немногим более 1%.
Комбинаторные алгоритмы
При поиске оптимального варианта из некоторого допустимого набора часто приходится перебирать все возможные альтернативы. Во многих задачах перебираемые варианты являются членами сочетаний, размещений и других комбинаторных конфигураций. Поэтому большое значение имеют алгоритмы генерации элементов соответствующих конечных множеств.
Главная сложность составления таких ”генераторов” состоит в необходимости сделать их структуру независимой от размерности порождаемых ими множеств, которая может очень сильно варьироваться в различных задачах. Например, алгоритм генерации r-размещений с повторениями очень легко реализовать с помощью r вложенных циклов:
for j1 := 1 to n do
for j2 := 1 to n do
…………………..
for jR := 1 to n do writeln (j1, j2, … jR);
Ясно, что всякий раз при изменении значения r такую программу пришлось бы переделывать, добавляя или удаляя циклы, и на самом деле алгоритм генерации должен быть другим.
Другой особенностью предлагаемых алгоритмов является то, что в них вместо комбинаций самих объектов генерируются комбинации из их номеров. Очевидно, что такие расстановки легко преобразовать в манипуляции, например, с названиями объектов, введя в программу массив из строк символов соответствующей размерности.
1. Алгоритм генерации r-размещений с повторениями. В размещениях с повторениями на k-месте должно стоять число из набора 1,…, n независимо от чисел, стоящих на предыдущих позициях.
Пример 1.11. Пусть r = 3; n =2. Надо получить следующие векторы Х: (1 1 1), (1 1 2), (1 2 1), (1 2 2), (2 1 1), … (2 2 2).
Обозначим А[j] – номер предмета, находящегося на j-м месте, j = 1,…r. Предлагается следующий алгоритм.
Procedure Razm_P(k);
begin
if k=r+1 then write(A[1],…A[r]);{Комбинация получена}
else
for y:=1 to n do
begin A[k]:=y; Razm_P(k+1);
end;
end;
begin
Razm_P(1);
end.
Назначение процедуры Razm_P(k)– получение k-й компоненты вектора Х = (A[1],…A[r]). Если k = r+1 – это означает, что вектор полностью получен, и надо его использовать (вывести на экран). В противном случае надо получить следующую компоненту. Так как на ее месте может стоять любое число от 1 до n, то перебор элементов обеспечивается циклом for y:=1 to n do без каких-либо ограничений.
2. Алгоритм генерации n-перестановок. Обозначим X[j] – массив переставляемых номеров объектов, dop[j] – массив логических переменных, соответствующих X[j]; если X[j] уже зафиксирован, то dop[j] = False – использовать X[j] повторно нельзя, если же dop[j] = True, то использовать X[j] можно. Набор dop[j], j=1,…k, равных True в данном варианте алгоритма определяет множество допустимых значений для у. Массивы dop и X объявляются как глобальные переменные.
Procedure Lex(k);
begin if k=n+1 then {Комбинация получена}
for i:=1 to n do write(x[i]:4);
else
for y:=1 to n do