Это не официальный сайт wikipedia.org 01.01.2023

Алгоритм Катхилла — Макки — Википедия

Алгоритм Катхилла — Макки

(перенаправлено с «Алгоритм Катхилла-Макки»)

Алгоритм Ка́тхилла — Макки́ (англ. Cuthill–McKee) — алгоритм уменьшения ширины ленты[en] разреженных симметричных матриц. Назван по именам разработчиков — Элизабет Катхилл и Джеймса Макки.

Упорядочение обратным алгоритмом Катхилла — Макки

Обратный алгоритм Катхилла — Макки (RCM, reverse Cuthill—McKee) — тот же самый алгоритм с обратной нумераций индексов.

АлгоритмПравить

Исходная симметричная матрица n × n   рассматривается как матрица смежности графа ( V , E )  . Алгоритм Катхилла — Макки перенумеровывает вершины графа таким образом, чтобы в результате соответствующей перестановки столбцов и строк исходной матрицы уменьшить ширину её ленты.

Алгоритм строит упорядоченный набор вершин R  , представляющий новую нумерацию вершин. Для связного графа алгоритм выглядит следующим образом:

  1. выбрать периферийную вершину (или псевдопериферийную вершину) v   для начального значения кортежа R := ( v )  ;
  2. для i = 1 , 2 , . . .  , пока выполнено условие | R | < n  , выполнять шаги 3-5:
  3. построить множество смежности Adj ( R i )   для R i  , где R i   — i  -ая компонента R  , и исключить вершины, которые уже содержатся в R  , то есть: A i := Adj ( R i ) R  ;
  4. отсортировать A i   по возрастанию степеней вершин;
  5. добавить A i   в кортеж результата R  .

Другими словами, алгоритм нумерует вершины в ходе поиска в ширину, при котором смежные вершины обходятся в порядке увеличения их степеней.

Для несвязного графа алгоритм можно применить отдельно к каждой компоненте связности[1].

Временна́я вычислительная сложность алгоритма RCM при условии, что для упорядочения применена сортировка вставками, O ( m | E | )  , где m   — максимальная степень вершины, | E |   — количество ребер графа[2].

Выбор начальной вершиныПравить

Для получения хороших результатов необходимо найти периферийную вершину графа ( V , E )  . Эта задача в общем случае является достаточно трудной, поэтому вместо неё обычно ищут псевдопериферийную вершину с помощью одной из модификаций эвристического алгоритма Гиббса и др.

Для описания алгоритма вводится понятие корневой структуры уровней (англ. rooted level structure). Для заданной вершины v   структурой уровней с корнем в v   будет разбиение L   множества вершин V  :

L ( v ) = { L 0 ( v ) , L 1 ( v ) , , L l ( v ) ( v ) } ,  

где подмножества L i ( v )   определены следующий образом:

L 0 ( v ) = { v } ,  
L 1 ( v ) = Adj ( L 0 ( v ) )  

и

L i ( v ) = Adj ( L i 1 ( v ) ) L i 2 ( v ) , i = 2 , 3 , , l ( v ) .  

Алгоритм нахождения псевдопериферийной вершины[3]:

  1. выбрать произвольную вершину r   из V  ;
  2. построить структуру уровней для корня r  : L ( r ) = { L 0 ( r ) , L 1 ( r ) , , L l ( r ) ( r ) }  ;
  3. выбрать вершину с минимальной степенью v   из L l ( r ) ( r )  ;
  4. построить структуру уровней для корня v  : L ( v ) = { L 0 ( v ) , L 1 ( v ) , , L l ( v ) ( v ) }  ;
  5. если l ( v ) > l ( r )  , то присвоить r := v   и перейти к шагу 3;
  6. вершина v   является искомой псевдопериферийной вершиной.

ПримечанияПравить

ЛитератураПравить

  • E. Cuthill and J. McKee. Reducing the bandwidth of sparse symmetric matrices In Proc. 24th Nat. Conf. ACM, pages 157—172, 1969.
  • Джордж А., Лю Дж. Численное решение больших разреженных систем уравнений = Computer Solution of Large Sparse Positive Definite Systems. — М.: Мир, 1984. — 333 с.

СсылкиПравить