Уточнение раздела
При разработке алгоритмов , уточнение разделов — это метод представления раздела набора в виде структуры данных которая позволяет уточнять раздел путем разделения его наборов на большее количество меньших наборов. В этом смысле она двойственна структуре данных объединения-поиска , которая также поддерживает разделение на непересекающиеся наборы , но в которой операции объединяют пары наборов. В некоторых приложениях уточнения разделов, таких как лексикографический поиск в ширину , структура данных также поддерживает порядок наборов в разделе.
Уточнение разделения является ключевым компонентом нескольких эффективных алгоритмов работы с графами и конечными автоматами , включая минимизацию DFA , алгоритм Коффмана-Грэма для параллельного планирования и в ширину . лексикографический поиск графов [1] [2] [3]
Структура данных
[ редактировать ]Алгоритм уточнения разделения поддерживает семейство непересекающихся множеств S i . В начале алгоритма это семейство содержит единый набор всех элементов структуры данных. множество X На каждом шаге алгоритму алгоритму предоставляется , и каждое множество S i в семействе, содержащем члены X, разбивается на два множества: пересечение S i ∩ X и разность S i \ X .
Такой алгоритм можно эффективно реализовать, поддерживая структуры данных, представляющие следующую информацию: [4] [5]
- Упорядоченная последовательность наборов Si , в семействе в такой форме, как двусвязный список который позволяет вставлять новые наборы в середину последовательности.
- С каждым набором Si такой связана совокупность Si его элементов в двусвязный форме, как список или структура данных массива , которая позволяет быстро удалять отдельные элементы из коллекции. Альтернативно, этот компонент структуры данных может быть представлен путем хранения всех элементов всех наборов в одном массиве, отсортированного по идентичности набора, к которому они принадлежат, и путем представления коллекции элементов в любом наборе S i по его начальной и конечной позиции в этом массиве.
- С каждым элементом связан набор, к которому он принадлежит.
Чтобы выполнить операцию уточнения, алгоритм перебирает элементы данного набора X . Для каждого такого элемента x он находит набор Si , содержащий x ли уже второй набор для Si ∩ , и проверяет , X. запущен Если нет, он создает второй набор и добавляет S i в список L наборов, разделенных этой операцией. новый набор, алгоритм удаляет x из Si от того , и добавляет его в Si ∩ сформировался ли X. Затем, независимо представлении, в котором все элементы хранятся в одном массиве, перемещение x из одного набора в другой может быть выполнено путем замены x на последний элемент Si В и последующего уменьшения конечного индекса Si . и начального индекса нового набор. Наконец, после того, как все элементы X были обработаны таким образом, алгоритм проходит через L , отделяя каждый текущий набор S i от второго набора, который был отделен от него, и сообщает, что оба этих набора были вновь сформированы в результате уточнения. операция.
Время выполнения одной операции уточнения таким образом составляет O (| X |) независимо от количества элементов в семействе наборов, а также от общего количества наборов в структуре данных. Таким образом, время последовательности уточнений пропорционально общему размеру наборов, переданных алгоритму на каждом шаге уточнения.
Приложения
[ редактировать ]Раннее применение уточнения разделения было в алгоритме Хопкрофта (1971) для минимизации DFA . В этой задаче в качестве входных данных дается детерминированный конечный автомат , и необходимо найти эквивалентный автомат с как можно меньшим количеством состояний. Алгоритм Хопкрофта поддерживает разделение состояний входного автомата на подмножества с тем свойством, что любые два состояния в разных подмножествах должны отображаться в разные состояния выходного автомата. Изначально имеется два подмножества: одно содержит все принимающие состояния автомата, а другое — остальные состояния. На каждом шаге выбираются одно из подмножеств Si x и один из входных символов x автомата, а подмножества состояний уточняются до состояний, для которых переход, обозначенный , приведет к Si , и состояний, для которых x - переход приведет куда-то еще. Когда набор S i , который уже был выбран, разделяется посредством уточнения, только один из двух результирующих наборов (меньший из двух) необходимо выбрать снова; таким образом, каждое состояние участвует в наборах X для O ( s log n ) шагов уточнения, а весь алгоритм занимает время O ( ns log n ) , где n — количество начальных состояний, а s — размер алфавита. [6]
Уточнение разделения было применено Сети (1976) в эффективной реализации алгоритма Коффмана-Грэма для параллельного планирования. Сетхи показал, что его можно использовать для построения лексикографически упорядоченной топологической разновидности заданного ориентированного ациклического графа за линейное время; это лексикографическое топологическое упорядочение является одним из ключевых шагов алгоритма Коффмана – Грэма. В этом приложении элементы непересекающихся множеств являются вершинами входного графа, а множества X, используемые для уточнения разбиения, являются наборами соседей вершин. Поскольку общее количество соседей всех вершин равно количеству ребер в графе, время работы алгоритма линейно зависит от количества ребер и входного размера. [7]
Уточнение разбиения также является ключевым шагом в лексикографическом поиске в ширину — алгоритме поиска по графам, который применяется в распознавании хордальных графов и некоторых других важных классов графов. Опять же, элементы непересекающегося множества являются вершинами, а множество X представляет собой наборы соседей , поэтому алгоритм требует линейного времени. [8] [9]
Ссылки
[ редактировать ]- ^ Пейдж, Роберт; Тарьян, Роберт Э. (1987), «Алгоритмы уточнения трех разделов», SIAM Journal on Computing , 16 (6): 973–989, doi : 10.1137/0216062 , MR 0917035 .
- ^ Хабиб, Мишель; Пол, Кристоф; Вьенно, Лоран (1999), «Методы уточнения разделов: интересный набор алгоритмических инструментов», International Journal of Foundations of Computer Science , 10 (2): 147–170, doi : 10.1142/S0129054199000125 , MR 1759929 .
- ^ Хабиб, Мишель; Пол, Кристоф; Вьенно, Лоран (1998), «Синтез по уточнению разделов: полезная процедура для строк, графиков, логических матриц и автоматов», Морван, Мишель; Мейнель, Кристоф; Кроб, Дэниел (ред.), STACS 98: 15-й ежегодный симпозиум по теоретическим аспектам информатики Париж, Франция, 25–27 февраля 1998 г., Материалы (PDF) , Конспекты лекций по информатике , том. 1373, Springer-Verlag, стр. 25–38, номер документа : 10.1007/BFb0028546 , ISBN. 978-3-540-64230-5 , МР 1650757 .
- ^ Валмари, Антти; Лехтинен, Петри (2008), «Эффективная минимизация DFA с частичными функциями перехода», Альберс, Сюзанна ; Вейль, Паскаль (ред.), 25-й Международный симпозиум по теоретическим аспектам информатики (STACS 2008) , Международные труды Лейбница по информатике (LIPIcs), vol. 1, Дагштуль, Германия: Schloss Dagstuhl: Leibniz-Zentrum fuer Informatik, стр. 645–656, arXiv : 0802.2826 , doi : 10.4230/LIPIcs.STACS.2008.1328 , ISBN 978-3-939897-06-4 , МР 2873773
- ^ Кнуутила, Тимо (2001), «Переописание алгоритма Хопкрофта», Theoretical Computer Science , 250 (1–2): 333–363, doi : 10.1016/S0304-3975(99)00150-4 , ISSN 0304-3975
- ^ Хопкрофт, Джон (1971), « Алгоритм n log n для минимизации состояний в конечном автомате», Теория машин и вычислений (Proc. Internat. Sympos., Технион, Хайфа, 1971) , Нью-Йорк: Academic Press, стр. 189–196, МР 0403320 .
- ^ Сетхи, Рави (1976), «Графы планирования на двух процессорах», SIAM Journal on Computing , 5 (1): 73–82, doi : 10.1137/0205005 , MR 0398156 .
- ^ Роуз, диджей; Тарьян, RE ; Люкер, Г.С. (1976), «Алгоритмические аспекты исключения вершин на графах», SIAM Journal on Computing , 5 (2): 266–283, doi : 10.1137/0205021 .
- ^ Корнейл, Дерек Г. (2004), «Лексикографический поиск в ширину - опрос», в Хромковиче, Юрай; Нагл, Манфред; Вестфехтель, Бернхард (ред.), Теоретико-графовые методы в информатике: 30-й международный семинар, WG 2004, Бад-Хоннеф, Германия, 21-23 июня 2004 г., Переработанные статьи , Конспекты лекций по информатике , том. 3353, Springer-Verlag, стр. 1–19, номер документа : 10.1007/978-3-540-30559-0_1 .