Участник:Midmedian/Алгоритм Федуччи-Маттеуса: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
Добавлено общее описание алгоритма и кусочек математического описания.
Дополнено математическое описание.
Строка 5: Строка 5:


=== Общее описание алгоритма ===
=== Общее описание алгоритма ===
'''Алгоритм Федуччи-Маттеуса (FM-алгоритм)'''<ref>Fiduccia C. M., Mattheyses R. M. A linear-time heuristic for improving network partitions //19th Design Automation Conference. – IEEE, 1982. – С. 175-181.</ref> является эвристикой для оптимального разделения гиперграфа на два непересекающихся блока (подграфа) за линейной время.
'''Алгоритм Федуччи-Маттеуса (FM-алгоритм)'''<ref>Fiduccia C. M., Mattheyses R. M. A linear-time heuristic for improving network partitions //19th Design Automation Conference. – IEEE, 1982. – С. 175-181.</ref> является эвристикой для оптимального разделения гиперграфа на два непересекающихся блока (подграфа) с минимальным количеством разрезанных сетей (гиперрёбер) за линейной время.


=== Математическое описание алгоритма ===
=== Математическое описание алгоритма ===
Пусть дан гиперграф <math>P=(C,N)</math>, где <math>C</math> - это пронумерованный набор ячеек (вершин), соединённых пронумерованным набором сетей (гиперрёбер) <math>N</math>. Гарантируется, что гиперграф состоит как минимум из двух ячеек и что каждая из ячеек содержится хотя бы в одной из сетей.
Пусть дан гиперграф <math>P=(C,N)</math>, где <math>C</math> - это пронумерованный набор ячеек (вершин), соединённых пронумерованным набором сетей <math>N</math>. Гарантируется, что гиперграф состоит как минимум из двух ячеек и что каждая из ячеек содержится хотя бы в одной из сетей.


''Количество ячеек'' в <math>i</math>-ой сети обозначим как <math>n(i)</math>, а ''размер'' <math>j</math>-ой ячейки (количество сетей, в которые входит ячейка) за <math>s(j)</math>.
''Количество ячеек'' в <math>i</math>-ой сети обозначим как <math>n(i)</math>, а ''размер'' <math>j</math>-ой ячейки (количество сетей, в которые входит ячейка) за <math>s(j)</math>.
Строка 21: Строка 21:


где <math>r</math> - ''коэффициент разделения'' (<math>0 < r < 1</math>).
где <math>r</math> - ''коэффициент разделения'' (<math>0 < r < 1</math>).
''Прирост'' <math>i</math>-ой ячейки, находящейся в некотором блоке <math>B</math>, определим, как
:<math>\Delta g(i)=FS(i)-TE(i)</math><ref>Kahng A. B. et al. VLSI physical design: from graph partitioning to timing closure. – Springer Science & Business Media, 2011.</ref>,
где <math>FS(i)</math> - количество разрезанных сетей, связанных только с <math>i</math>-ой ячейкой (и никакой другой из блока <math>B</math>), а <math>TE(i)</math> - количество неразрезанных сетей, связанных с <math>i</math>-ой ячейкой.


=== Вычислительное ядро алгоритма ===
=== Вычислительное ядро алгоритма ===

Версия от 16:34, 22 октября 2019

Автор описания: И.А.Бабкин

Свойства и структура алгоритмов

Общее описание алгоритма

Алгоритм Федуччи-Маттеуса (FM-алгоритм)[1] является эвристикой для оптимального разделения гиперграфа на два непересекающихся блока (подграфа) с минимальным количеством разрезанных сетей (гиперрёбер) за линейной время.

Математическое описание алгоритма

Пусть дан гиперграф [math]\displaystyle{ P=(C,N) }[/math], где [math]\displaystyle{ C }[/math] - это пронумерованный набор ячеек (вершин), соединённых пронумерованным набором сетей [math]\displaystyle{ N }[/math]. Гарантируется, что гиперграф состоит как минимум из двух ячеек и что каждая из ячеек содержится хотя бы в одной из сетей.

Количество ячеек в [math]\displaystyle{ i }[/math]-ой сети обозначим как [math]\displaystyle{ n(i) }[/math], а размер [math]\displaystyle{ j }[/math]-ой ячейки (количество сетей, в которые входит ячейка) за [math]\displaystyle{ s(j) }[/math].

Размер блока [math]\displaystyle{ B }[/math] определим, как

[math]\displaystyle{ |B|=\sum\limits_{i=1}^{|N|} n(i)=\sum\limits_{i=1}^{|C|} s(i) }[/math].

Задача заключается в разделении [math]\displaystyle{ P }[/math] на непересекающиеся блоки [math]\displaystyle{ A }[/math] и [math]\displaystyle{ B }[/math] размерами [math]\displaystyle{ |A| }[/math] и [math]\displaystyle{ |B| }[/math] соответственно так, чтобы выполнялось условие

[math]\displaystyle{ \frac{|A|}{|A|+|B|} \cong r }[/math],

где [math]\displaystyle{ r }[/math] - коэффициент разделения ([math]\displaystyle{ 0 \lt r \lt 1 }[/math]).

Прирост [math]\displaystyle{ i }[/math]-ой ячейки, находящейся в некотором блоке [math]\displaystyle{ B }[/math], определим, как

[math]\displaystyle{ \Delta g(i)=FS(i)-TE(i) }[/math][2],

где [math]\displaystyle{ FS(i) }[/math] - количество разрезанных сетей, связанных только с [math]\displaystyle{ i }[/math]-ой ячейкой (и никакой другой из блока [math]\displaystyle{ B }[/math]), а [math]\displaystyle{ TE(i) }[/math] - количество неразрезанных сетей, связанных с [math]\displaystyle{ i }[/math]-ой ячейкой.

Вычислительное ядро алгоритма

Макроструктура алгоритма

Схема реализации последовательного алгоритма

Последовательная сложность алгоритма

Информационный граф

Ресурс параллелизма алгоритма

Входные и выходные данные алгоритма

Свойства алгоритма

Программная реализация алгоритма

Особенности реализации последовательного алгоритма

Локальность данных и вычислений

Возможные способы и особенности параллельной реализации алгоритма

Масштабируемость алгоритма и его реализации

Динамические характеристики и эффективность реализации алгоритма

Выводы для классов архитектур

Существующие реализации алгоритма

Литература

  1. ↑ Fiduccia C. M., Mattheyses R. M. A linear-time heuristic for improving network partitions //19th Design Automation Conference. – IEEE, 1982. – С. 175-181.
  2. ↑ Kahng A. B. et al. VLSI physical design: from graph partitioning to timing closure. – Springer Science & Business Media, 2011.