Научная статья на тему 'Оценка сложности алгоритма сортировки железнодорожного состава'

Оценка сложности алгоритма сортировки железнодорожного состава Текст научной статьи по специальности «Математика»

CC BY
178
30
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
УПОРЯДОЧЕНИЕ ПЕРЕСТАНОВКИ / СОРТИРОВОЧНАЯ ГОРКА / ORDERING OF PERMUTATION / SORTING HUMP

Аннотация научной статьи по математике, автор научной работы — Романовский Иосиф Владимирович, Ржевская Екатерина Эдуардовна

Рассматривается задача сортировки грузового железнодорожного состава и ее математическая формулировка. Описывается предлагаемый алгоритм, использующий сортировочную горку. Эта горка состоит из небольшого возвышения, с которого спускается дерево путей, начинающихся на верхушке холма и разделяющихся на k путей, с возможностью провести вагон с верхушки возвышения в любой заданный конец. На каждом прогоне вагоны распределяются по путям, а затем состав собирается из получившихся фрагментов. Находятся максимальное число прогонов всего поезда через горку для сортировки состава и общая трудоемкость алгоритма. Некоторыми чертами идея этого метода похожа на основную идею алгоритма сортировки перфокарт в классическом счетно-аналитическом комплекте. Исходные данные это перестановка, сопоставляющая каждому вагону его номер от конца в требуемом расположении вагонов. В решении используется разбиение перестановки 1: n на монотонные сегменты. Например, перестановка 3,8,2,6,1,4,5,7 с n = 8 разбивается на сегменты (3,2,1), (4), (6,5), (8,7). Эти сегменты легче определить в терминах перестановки, обратной исходной. Она считается строкой из чисел, и каждому сегменту разбиения исходной перестановки соответствует максимальная подстрока из монотонно убывающих чисел. В примере обратная перестановка 5,3,1;6;7,4;8,2 разбивается на4подстроки(разделенные знаками «;»).Пусть p-числочастей в этом разбиении, а k-число путей на горке. Доказано, что число прогонов состава через горку для получания n,n -1,..., 2,1 не превосходит ⌈logk p⌉ ⌈logk n⌉, и эта оценка достигается предложенным в статье алгоритмом. Библиогр. 2 назв.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

COMPLEXITY OF A CAR SORTING ALGORITHM

In this article a problem of sorting cars in a freight train is considered and its mathematical formulation is given. The sorting is executed on a so called sorting ardhump. They ardhump consists of a small hump with a tree of railroads starting on the top of the hump and branching out to k rail ends with controls that allow to direct a car moving from the top to a given end. On each run, the train is distributed to the end paths and after that collected back from fragments on the paths. The maximum number of runs of the whole train to sort it and overall complexity of the algorithm are found. Some features of this method are similar to the main idea of the well know procedure of sorting perfocards in the classical Hollerith set of hardware. The initial data is a permutation of the set 1: n, where each car is associated with its position in the desired train sequence. In solution we use a partition of the permutation of 1: n to monotone segments. For example, the permutation 3,8,2,6,1,4,5,7 with n =8 is divided to segments (3,2,1), (4), (6,5), (8,7). These segments are easier defined in terms of the permutation inverse to the given one. It is treated as a string consisting of numbers, and each part of the partition corresponds to a maximal monotonically decreasing set of numbers in the list of elements. In our example the inverse permutation 5,3,1;6;7,4;8,2 is divided to 4 substrings by separators “;”. Let p be the number of partsin this partition, and k is the number of roads in the hump. Then the number of runs of the train through the hump to get n,n -1,..., 2,1 does not exceed ⌈log k p⌉⌈log k n⌉, and this estimation is reached by the proposed algorithm. Refs 2.

Текст научной работы на тему «Оценка сложности алгоритма сортировки железнодорожного состава»

УДК 519.159+656.212.9

Вестник СПбГУ. Сер. 1. Т. 2 (60). 2015. Вып. 2

ОЦЕНКА СЛОЖНОСТИ АЛГОРИТМА СОРТИРОВКИ ЖЕЛЕЗНОДОРОЖНОГО СОСТАВА

И. В. Романовский, Е. Э. Ржевская

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

Российская Федерация, 199034, Санкт-Петербург, Университетская наб., 7-9

Рассматривается задача сортировки грузового железнодорожного состава и ее математическая формулировка. Описывается предлагаемый алгоритм, использующий сортировочную горку. Эта горка состоит из небольшого возвышения, с которого спускается дерево путей, начинающихся на верхушке холма и разделяющихся на к путей, с возможностью провести вагон с верхушки возвышения в любой заданный конец. На каждом прогоне вагоны распределяются по путям, а затем состав собирается из получившихся фрагментов. Находятся максимальное число прогонов всего поезда через горку для сортировки состава и общая трудоемкость алгоритма. Некоторыми чертами идея этого метода похожа на основную идею алгоритма сортировки перфокарт в классическом счетно-аналитическом комплекте. Исходные данные — это перестановка, сопоставляющая каждому вагону его номер от конца в требуемом расположении вагонов. В решении используется разбиение перестановки 1 : п на монотонные сегменты. Например, перестановка 3, 8, 2, 6, 1, 4, 5, 7 с п = 8 разбивается на сегменты (3, 2,1), (4), (6, 5), (8, 7). Эти сегменты легче определить в терминах перестановки, обратной исходной. Она считается строкой из чисел, и каждому сегменту разбиения исходной перестановки соответствует максимальная подстрока из монотонно убывающих чисел. В примере обратная перестановка 5, 3, 1; 6; 7, 4; 8, 2 разбивается на 4 подстроки (разделенные знаками «;»). Пусть р — число частей в этом разбиении, а к — число путей на горке. Доказано, что число прогонов состава через горку для получания п, п — 1,..., 2,1 не превосходит ["logk р] ^ п], и эта оценка достигается предложенным в статье алгоритмом. Библиогр. 2 назв.

Ключевые слова: упорядочение перестановки, сортировочная горка.

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

2. Математическая формулировка. Полезно перейти от железнодорожных терминов к математическим. То, что задан железнодорожный состав, означает, что у нас имеется перестановка из чисел от 1 до п, каждое число описывает место, которое соответствующий вагон должен занять в упорядоченном поезде, эти места отсчиты-ваются от хвоста поезда. На каждом шаге сортировки (спуске с горки или прогоне) вагоны распределяются по к железнодорожным путям, ведущим от верхушки горки вниз. Под действием силы тяжести вагоны поочередно спускаются вниз, и с помощью стрелок диспетчер выбирает путь для этого вагона. Когда весь состав распределен таким образом по путям, состав собирается заново из получившихся к частей, что завершает один спуск. Мы считаем, что на каждом спуске состав распускается полностью. Так как спуски с сортировочной горки — действия достаточно трудоемкие, хочется минимизировать число спусков, для чего необходимо найти наименьшее возможное число шагов в.

Исходными данными являются число вагонов в составе п, число путей в горке к и перестановка Р = {р!,...,р„} чисел 1,...,п. Переформирование состава —это

получение из Р последовательности п, п — 1,..., 1 с помощью описанной операции «спуска состава»: последовательного переноса чисел рп,... ,Р1 в к стековых накопителей (путей горки). Эту операцию, чтобы отдалиться от «вагонной» терминологии, мы будем в дальнейшем называть прогоном.1

Определение. Монотонным сегментом будем называть наибольший диапазон чисел от а до Ь (п ^ а ^ Ь ^ 1), такой, что любое число г из этого диапазона, кроме Ь, стоит в перестановке Р правее г + 1.

Например, в перестановке 2, 3, 5,1,4 есть три монотонных сегмента: Г1 = (2,1), Г2 = (3), Г3 = (5,4).2 Легко видеть, что разбиение перестановки на монотонные сегменты однозначно. Его легко вычислить (за линейное по п время), если найти перестановку Я, обратную Р: каждый монотонный сегмент Р соответствует фрагменту убывания чисел в перестановке Я.

Для нашего примера Я = (ров1,ро52,ровз,ро54,ро55) = (4,1, 2, 5, 3) с тремя фрагментами убывания (4,1), (2), (5, 3). Они и задают выписанные выше сегменты

Дальнейшее лучше иллюстрировать на примере большего размера. Пусть п = 15, к = 3, и перестановка Р выглядит так:

# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Р 9 5 7 6 1 2 10 4 3 12 15 11 14 13 8

я 5 6 9 8 2 4 3 15 1 7 12 10 14 13 11

Здесь же показана и обратная перестановка Я. Получаются следующие монотонные сегменты Г1 = (1), Г2 = (2), Г3 = (5,4, 3), Г4 = (7, 6), Г5 = (9, 8), Г6 = (10), Г7 = (12,11), Г8 = (15,14,13).

Сегменты по накопителям (стекам) распределяются в циклическом порядке

стек 1 Г1 = (1), Г4 = (7, 6), Г7 = (12,11), (7,6,1,12,11)

стек 2 Г2 = (2), Г5 = (9, 8), Г8 = (15,14,13), (9,2,15,14,13,8)

стек 3 Г3 = (5,4,3), г6 = (ю), (5,10,4,3)

— сначала выделяется по одному сегменту каждому накопителю, затем снова по одному сегменту, затем снова, пока не закончатся сегменты. В правом столбце таблицы показаны множества чисел, попадающих в каждый накопитель. В этих множествах порядок записи чисел наследуется из исходной перестановки (так: ..., 7, 6,1,..., 12,..., 11,...). Эта операция выполняется также за линейное время — объединение сегментов в одно множество с учетом порядка элементов, т.е. в

7, 6,1,12,11, 9, 2,15,14,13, 8 , 5,10,4, 3 лишнего времени не занимает.

3. Оценка трудоемкости метода. Теперь для оценки трудоемкости метода осталось оценить количество прогонов в. Это можно сделать, оценивая эффект шагов.

Лемма. в ^ п].

1 Слово прогон в смысле «однократное выполнение некоторой сложной процедуры или алгоритма» еще не вошло в словари, но используется уже достаточно часто. Например, «генеральный прогон спектакля».

2 Построение монотонных сегментов очень просто: Число 1 входит в первый сегмент обязательно. Если число 2 стоит до 1 (где угодно), оно добавляется к сегменту. А и число 3 добавилось бы, но стоит после 2 и начинает новый сегмент. И 4 тоже начинает новый сегмент, в который входит и 5.

Доказательство. Докажем, что на каждом прогоне количество сегментов уменьшается почти в к раз. Сегменты получают свои номера в порядке возрастания наименьших чисел в них. Рассмотрим сегменты Г1,..., Гд. Они располагаются соответственно в накопителях 1, . . . , к. После прогона эти сегменты будут располагаться в перестановке в правильном порядке, т.е. Г будет расположен правее Г^+1. Таким образом, все числа этих сегментов образуют в следующей перестановке монотонный сегмент. Аналогично для ..., Г^+^.д при каждом следующем I, кроме, возможно, последнего. В последней группе сегментов может быть меньше к, от чего тоже образуется новый сегмент. Таким образом, после каждого прогона количество сегментов уменьшается примерно в к раз, округляясь вверх до ближайшего целого, так что в' ^ Г^/к], где в' — число сегментов в получающейся перестановке.

Пусть в начальной перестановке было р групп, р ^ п. Выберем такое т, чтобы кт ^ р < кт+1, тогда т + 1 = Г1°ёд р]. Отсюда следует, что г = р — кт < (к — 1) • кт. После первого прогона получим количество сегментов

кт +г к

г,т— 1

+

к

< к

т — 1

+

(к -!)■¥' к

< кт-1 + (к — 1) • к

т—1

Аналогично после второго прогона получим, что количество сегментов не превосходит кт-2 + (к — 1)^кт-2, ..., через т прогонов не превосходит 1 + (к — 1)= к, а к сегментов легко на т + 1-м пропуске окажутся просто в правильном порядке. Таким образом, в < р] < Г1оёй п]. □

Видно, что наибольшее количество шагов (прогонов) потребуется при перестановке с п сегментами, а именно для 1, . . . , п. А так как оценка количества прогонов зависит от количества сегментов, интересно посмотреть, сколько же сегментов в перестановке для различных п.3

Из доказанной леммы и линейности времени выполнения одного прогона следует справедливость следующей теоремы

Теорема. Существует такое А, что трудоемкость алгоритма не превосходит А • п • Г^д, п].

г

Литература

1. Романовский И. В. Алгоритм для железнодорожной сортировочной горки // Компьютерные инструменты в образовании. 2014. Вып.3. С. 56—59.

2. Бруштейн Д. П. Сортировальная машина // Большая сов. энциклопедия. Изд. 3-е. Т. 24, кн. 1. 1976. С. 197.

Статья поступила в редакцию 25 декабря 2014 г.

Сведения об авторах

Романовский Иосиф Владимирович — профессор; josephromanovsky@gmail.com Ржевская Екатерина Эдуардовна — студент; katrin8794@yandex.ru

3 Описанный выше удобный способ вычисления числа монотонных сегментов в перестановке позволил увидеть близость распределения этого числа как функции от случайной перестановки к нормальному распределению. Соответствующие вычисления, точные для малых п и статистические для больших, проводились при активной помощи студента Н. М. Мирошниченко.

COMPLEXITY OF A CAR SORTING ALGORITHM

Joseph V. Romanovskiy, Ekaterina E. Rzhevskaya

St.Petersburg State University, Universitetskaya nab., 7-9, St.Petersburg, 199034, Russian Federation; josephromanovsky@gmail.com, katrin8794@yandex.ru

In this article a problem of sorting cars in a freight train is considered and its mathematical formulation is given. The sorting is executed on a so called sorting yard hump. The yard hump consists of a small hump with a tree of railroads starting on the top of the hump and branching out to k rail ends with controls that allow to direct a car moving from the top to a given end. On each run, the train is distributed to the end paths and after that collected back from fragments on the paths. The maximum number of runs of the whole train to sort it and overall complexity of the algorithm are found. Some features of this method are similar to the main idea of the well know procedure of sorting perfocards in the classical Hollerith set of hardware. The initial data is a permutation of the set 1 : n, where each car is associated with its position in the desired train sequence. In solution we use a partition of the permutation of 1 : n to monotone segments. For example, the permutation 3, 8, 2, 6, 1, 4, 5, 7 with n = 8 is divided to segments (3, 2, 1), (4), (6, 5), (8, 7). These segments are easier defined in terms of the permutation inverse to the given one. It is treated as a string consisting of numbers, and each part of the partition corresponds to a maximal monotonically decreasing set of numbers in the list of elements. In our example the inverse permutation 5, 3, 1; 6; 7, 4; 8, 2 is divided to 4 substrings by separators " ;". Let p be the number of parts in this partition, and k is the number of roads in the hump. Then the number of runs of the train through the hump to get n, n — 1,..., 2, 1 does not exceed |"logfc p] ^ Rogfc n], and this estimation is reached by the proposed algorithm. Refs 2.

Keywords: ordering of permutation, sorting hump.

References

1. Romanovsky J. V., "An algorithm for the railroad sorting hump", Computational instruments in education 3, 56—59 (2014) [in Russian].

2. Brustein D.P., "Sorting mashine", Great Sov. Enc. 3-rd ed., 24 part 1, 197 (1976) [in Russian].

i Надоели баннеры? Вы всегда можете отключить рекламу.