Вложенная перестановка рассечения
p = dissect(A)
p = dissect(A,Name,Value)
возвращает вектор перестановки, вычисленный с помощью вложенного рассечения структуры разреженности p = dissect(A)
A
.
задает дополнительные опции с помощью одного или нескольких аргументов в виде пар "имя-значение". Например, p = dissect(A,Name,Value)
dissect(A,'NumIterations',15)
использует 15 итераций улучшения во вложенном алгоритме рассечения вместо 10.
Вложенный алгоритм упорядоченного расположения рассечения, описанный в [1], является многоуровневым графиком, делящим алгоритм, который используется, чтобы произвести уменьшающие заливку упорядоченные расположения разреженных матриц. Входная матрица обработана как матрица смежности графика. Алгоритм огрубляет график путем сворачивания вершин и краев, переупорядочивает меньший график, и затем использует шаги улучшения, чтобы не огрубить маленький график и произвести переупорядочение исходного графика.
Пары "имя-значение" для dissect
позволяют вам управлять различными этапами алгоритма:
Огрубление
В этой фазе алгоритм создает последовательно меньшие графики из исходного графика путем сворачивания вместе смежных пар вершин. 'MaxDegreeThreshold'
позволяет вам отфильтровать вершины очень связного графа (которые являются плотными столбцами в матрице) путем упорядоченного расположения им в последний раз.
Разделение
После того, как график огрубляется, алгоритм полностью переупорядочивает меньший график. На каждом шаге разделения алгоритм пытается разделить график в равные части: 'NumSeparators'
задает, сколько ролей, чтобы разделить график в, 'VertexWeights'
опционально отводит веса вершинам, и 'MaxImbalance'
задает порог для различия в весе между различными разделами.
Улучшение
После того, как наименьший график переупорядочивается, алгоритм делает проекции, чтобы увеличить график назад к первоначальному размеру путем расширения вершин, которые были ранее объединены. После каждого шага проекции шаг улучшения выполняется что вершины перемещений между разделами, чтобы улучшить качество решения. 'NumIterations'
управляет, сколько шагов улучшения используется во время этой фазы неогрубления.
[1] Karypis, Джордж и Випин Кумар. "Быстрая и Высококачественная Многоуровневая Схема Разделения Неправильных Графиков". SIAM Journal на Научных вычислениях. Издание 20, Номер 1, 1999, стр 359–392.