АЛГОРИТМ ПЕРЕСТАНОВОК ПО СХЕМЕ «ЗИГЗАГ»

, Ю.

E-mail: a. *****@***com, hitev@ru

Санкт-Петербургский государственный университет

Предлагается алгоритм формирования перестановок, отличающийся более высоким быстродействием от известных алгоритмов [1]. В нём существенно сокращается количество пересылочных операций при обращении к процедуре генерирования перестановок по схеме «Зигзаг». Это достигается за счёт удвоения массива для хранения элементов формируемых перестановок, получения каждой новой перестановки путём переноса последнего элемента с одного края перестановки на другой и использования принципа зеркальности, заключающегося в том, что из всей последовательности n! перестановок достаточно получить её первую половину, а вторая половина является зеркальным отображением первой. Работа алгоритма формирования перестановок поясняется следующей таблицей.

Формируемая перестановка

Зеркальная перестановка

1

1

2

3

4

4

3

2

1

2

2

3

4

1

1

4

3

2

3

3

4

1

2

2

1

4

3

4

4

1

2

3

3

2

1

4

5

1

4

2

3

3

2

4

1

6

3

1

4

2

2

4

1

3

7

2

3

1

4

4

1

3

2

8

4

2

3

1

1

3

2

4

9

4

2

1

3

3

1

2

4

10

2

1

3

4

4

3

1

2

11

1

3

4

2

2

4

3

1

12

3

4

2

1

1

2

4

3

Формальное изложение процедуры генерирования перестановок на основе алгоритма по схеме «Зигзаг» приводится ниже.

Вход.

Если q = 0, то перейти к метке М1.

Вычислить: q = 0; т = п + n; h = 1; рi = i, si = n – i, i = 1, ···, n.

Перейти на Выход.

М1. Вычислить: k = 1.

M2. Если sk 0, то перейти к метке М3.

Вычислить: sk = п – k; k = k + 1. Возвратиться к метке M2.

М3. Если k = п 1, то вычислить: q = 1. Если k 1, то перейти к метке М4.

Если h = 1, то вычислить: i = sk; pm-i = pn-i.

Если h = –1, то вычислить: i = sk; pi = pn+i.

Вычислить: sk = sk1. Перейти на Выход.

М4. Если h = 1, то вычислить: l = n + k – 1; j = l – 1.

Если h = – 1, то вычислить: l = nk + 1; j = l + 1.

Вычислить: i = pj; pj = pl; pl = i; sk = sk – 1; h = – h.

Выход.

В рассмотренной процедуре приняты следующие обозначения:

qуказатель признака начального, q = 1, или последующих, q = 0, обращений к процедуре формирования перестановок;

пдлина перестановки (количество составляющих её элементов);

m – удвоенная длина перестановки;

h – указатель направления осуществляемых пересылок элементов;

рiэлемент перестановки, i = 1, ···, n;

si указатель адресов пересылаемых элементов, i = 1, ···, n;

i, j, k, lиндексные или рабочие переменные.

Литература

1. Искусство программирования для ЭВМ. Основные алгоритмы. – М.: Мир, 1976. – 736 с.

Комбинаторные алгоритмы. Теория и практика. – М.: Мир, 1980. – 478 с.