Сортировка вектора C ++ на основе матрицы смежности - PullRequest
0 голосов
/ 05 июня 2018

У меня есть вектор e , элементы которого являются индексами ребер в двумерной (поверхностной) сетке.По какой-то причине я хотел бы изменить порядок этого вектора, чтобы каждое ребро было окружено ребрами, ближайшими к нему (в основном, аналогично тому, что запрашивающий пытается достичь в в этом вопросе ).

Мне не нужно, чтобы это было точное или идеальное решение (вероятно, его нет), но я бы хотел подойти как можно ближе.

Вот шаги, которые у меня естьпринято:

  1. Создать матрицу смежности B для краев сетки,
  2. Используйте алгоритм, такой как RCM , чтобы получить переупорядочениематрица смежности для уменьшения пропускной способности (для этого я использую MatGetOrdering от Petsc),
  3. Применим новый порядок, чтобы получить новую, смежную матрицу смежности, B2 .

На этом этапе я хотел бы изменить порядок исходного вектора e ребер сетки, чтобы получить новый вектор e2 , матрица смежности которого теперь равна B2 .

  • Возможно ли это?т.е. достаточно ли информации выше, чтобы достичь этого?
  • Это хороший подход, чтобы делать то, что я пытаюсь достичь?
    • Если нет, то какой будет самый разумный и надежный подход?(например, я также пытался сделать это, основываясь на физических расстояниях, а не на граничных связях, но я не уверен, какой подход более реалистичный / разумный / надежный),
    • Если да, как мне это сделать?выполнить последний шаг переупорядочения вектора ребер на основе новой матрицы смежности?

Я довольно новичок в Stack Exchange, поэтому, пожалуйста, дайте мне знать, если я должен спросить этона другом суб-сообществе.Я также довольно новичок в теории графов, поэтому я могу упустить что-то очевидное.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...