Jump to content

Уточнение раздела

При разработке алгоритмов , уточнение разделов — это метод представления раздела набора в виде структуры данных которая позволяет уточнять раздел путем разделения его наборов на большее количество меньших наборов. В этом смысле она двойственна структуре данных объединения-поиска , которая также поддерживает разделение на непересекающиеся наборы , но в которой операции объединяют пары наборов. В некоторых приложениях уточнения разделов, таких как лексикографический поиск в ширину , структура данных также поддерживает порядок наборов в разделе.

Уточнение разделения является ключевым компонентом нескольких эффективных алгоритмов работы с графами и конечными автоматами , включая минимизацию 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]

  1. ^ Пейдж, Роберт; Тарьян, Роберт Э. (1987), «Алгоритмы уточнения трех разделов», SIAM Journal on Computing , 16 (6): 973–989, doi : 10.1137/0216062 , MR   0917035 .
  2. ^ Хабиб, Мишель; Пол, Кристоф; Вьенно, Лоран (1999), «Методы уточнения разделов: интересный набор алгоритмических инструментов», International Journal of Foundations of Computer Science , 10 (2): 147–170, doi : 10.1142/S0129054199000125 , MR   1759929 .
  3. ^ Хабиб, Мишель; Пол, Кристоф; Вьенно, Лоран (1998), «Синтез по уточнению разделов: полезная процедура для строк, графиков, логических матриц и автоматов», Морван, Мишель; Мейнель, Кристоф; Кроб, Дэниел (ред.), STACS 98: 15-й ежегодный симпозиум по теоретическим аспектам информатики Париж, Франция, 25–27 февраля 1998 г., Материалы (PDF) , Конспекты лекций по информатике , том. 1373, Springer-Verlag, стр. 25–38, номер документа : 10.1007/BFb0028546 , ISBN.  978-3-540-64230-5 , МР   1650757 .
  4. ^ Валмари, Антти; Лехтинен, Петри (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
  5. ^ Кнуутила, Тимо (2001), «Переописание алгоритма Хопкрофта», Theoretical Computer Science , 250 (1–2): 333–363, doi : 10.1016/S0304-3975(99)00150-4 , ISSN   0304-3975
  6. ^ Хопкрофт, Джон (1971), « Алгоритм n log n для минимизации состояний в конечном автомате», Теория машин и вычислений (Proc. Internat. Sympos., Технион, Хайфа, 1971) , Нью-Йорк: Academic Press, стр. 189–196, МР   0403320 .
  7. ^ Сетхи, Рави (1976), «Графы планирования на двух процессорах», SIAM Journal on Computing , 5 (1): 73–82, doi : 10.1137/0205005 , MR   0398156 .
  8. ^ Роуз, диджей; Тарьян, RE ; Люкер, Г.С. (1976), «Алгоритмические аспекты исключения вершин на графах», SIAM Journal on Computing , 5 (2): 266–283, doi : 10.1137/0205021 .
  9. ^ Корнейл, Дерек Г. (2004), «Лексикографический поиск в ширину - опрос», в Хромковиче, Юрай; Нагл, Манфред; Вестфехтель, Бернхард (ред.), Теоретико-графовые методы в информатике: 30-й международный семинар, WG 2004, Бад-Хоннеф, Германия, 21-23 июня 2004 г., Переработанные статьи , Конспекты лекций по информатике , том. 3353, Springer-Verlag, стр. 1–19, номер документа : 10.1007/978-3-540-30559-0_1 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: e4936f27aa118eb0819726454ccdbd26__1701590760
URL1:https://arc.ask3.ru/arc/aa/e4/26/e4936f27aa118eb0819726454ccdbd26.html
Заголовок, (Title) документа по адресу, URL1:
Partition refinement - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)