Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
oaip.docx
Скачиваний:
7
Добавлен:
26.09.2019
Размер:
292.13 Кб
Скачать

Билет 15

  1. Алгоритм генерирования перестановок с минимальным числом транспозиций

Сейчас опишем метод генерирования последовательности всех n! перестановок n-элементного множества. Будем предполагать, что элементы нашего множества запоминаются в виде элементов массива Р[1],..., Р[n]. В данном методе элементарной операцией, которая применяется к массиву Р, является поэлементная транспозиция, т.е. обмен значениями переменных P[i] и P[j], где 1 < i,j < n. Эту операцию будем обозначать через Р[i] :=: P[j]. Очевидно, что она эквивалентна последовательности команд

роm := Р[i]; Р[i] := P[j]; P[j] := роm,

где роm есть некоторая вспомогательная переменная.

Алгоритм. (Генерирование всех перестановок за минимальное число транспозиций.)

Данные: n.

Результат: Последовательность перестановок множества {1,...,n}, в котором каждая последующая перестановка образуется из предыдущей путем выполнения одной транспозиции.

procedure В(m, i);

begin

if (m mod 2=0) and (m > 2) then

if i < m — 1 then В := i

else В := m — 2

else В := m — 1

end; (*B*)

procedure PERM(m);

(* массив P — глобальный*)

begin

if m = 1 then

(*P[1],... ,P[m] — новая перестановка*)

write (P[l],...,P[n])

else

for i := 1 to m do

begin PERM(m - 1);

if i < m then P[B(m,i)] :=: P[m]

end

end;

(*PERM*)

begin

(* главная программа*)

for i := 1 to n do Р[i] := i;

PERM(n)

end

2) Массивы -- формальное объединение нескольких однотипных объектов (чисел, символов, строк и т.п.), рассматриваемое как единое целое.

При описании массива необходимо указать общее число входящих в массив элементов и тип этих элементов. Например:

var

а: array [1..10] of real;

b: array [0..50] of Char;

с: array [-3..4] of Boolean;

Как видим, при описании массива используются зарезервированные слова ARRAY и OF (массив, из). За словом ARRAY в квaдрaтныx скобкax указывается тип-диапазон, с помощью которого компилятор oпеределяет общее число элементов массива. Тип-диапазон задается левой и правой границами изменения индекса массива так что массив А состоит из 10 элементов, массив В - из 31, а массив C - из 8 элементов. За словом OF указывается тип элементов, образующих массив.

Доступ к каждому элементу массива в программе осуществляется с помощью индекса - целого числа (точнее, выражения порядкового типа), служащего своеобразным именем элемента в массиве (если левая граница типа-диапазона равна 1, индекс элемента совпадает с его порядковым номером). При упоминании в программе любого элемента массива сразу за именем массива должен следовать индекс элемента в квадратных скобках, например:

var

a: array [1..10] of Integer;

b: array [0..40] of Char;

c: array [-2..2] of Boolean;

k: Integer;

begin

b[17] := 'F';

c[-2] := a[1] > [2];

for k := 1 to 10 do

a[k] := 0;

. . . . .

end.

Билет 16

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]