В. У меня есть граф эрдос.рейни. Я заражаю вершину и хочу посмотреть, за какой последовательностью вершин последует болезнь? igraph имеет полезные функции, такие как get.adjacency (), neighbors ().
Подробности. Это матрица смежности с именами вершин вместо 0,1 флага, и я пытаюсь вытащить из нее цепочку заражения. Как поток / последовательность эпидемии через граф, если определенная вершина заражена. Не будем здесь беспокоиться о вероятностях заражения (предположим, что все пораженные вершины заражены с вероятностью 1).
Итак, предположим, я попал в вершину 1 (которая здесь первая строка). Мы видим, что он имеет исходящие ссылки на вершину 4,5,18,22,23,24,25. Итак, следующие вершины будут связаны с 4,5,18 ... 25, то есть значениями в row4, row5, row18, ... row25. Затем, согласно модели, болезнь будет распространяться через них и так далее.
Я понимаю, что могу передать строку, чтобы упорядочить строки матрицы. Моя проблема в том, что я не могу понять, как сгенерировать эту последовательность.
Матрица выглядит так.
> channel
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 4 5 18 22 23 24 25 NA
[2,] 6 10 11 18 25 NA NA NA
[3,] 7 11 18 20 NA NA NA NA
[4,] 24 NA NA NA NA NA NA NA
[5,] 1 3 9 13 14 NA NA NA
[6,] 3 8 9 14 19 23 NA NA
[7,] 3 4 8 15 20 22 NA NA
[8,] 2 3 25 NA NA NA NA NA
[9,] 3 4 11 13 20 NA NA NA
[10,] 4 5 8 15 19 20 21 22
[11,] 3 13 15 18 19 23 NA NA
[12,] 11 13 16 NA NA NA NA NA
[13,] 4 6 14 15 16 17 19 21
[14,] 2 6 13 NA NA NA NA NA
[15,] 3 17 20 NA NA NA NA NA
[16,] 6 15 18 23 NA NA NA NA
[17,] 2 25 NA NA NA NA NA NA
[18,] 2 5 NA NA NA NA NA NA
[19,] 3 11 NA NA NA NA NA NA
[20,] 1 4 7 10 12 21 22 25
[21,] 2 4 6 13 14 16 18 NA
[22,] 1 3 4 15 23 NA NA NA
[23,] 1 16 24 NA NA NA NA NA
[24,] 7 8 19 20 22 NA NA NA
[25,] 7 12 13 17 NA NA NA NA
Я хочу изменить порядок этой матрицы на основе следующих критериев выбора:
R будет наиболее полезным (но меня интересует алгоритм, поэтому любой питон, рубин и т. Д. Будет отличным). Результирующий вектор будет иметь длину 115 (8x25 = 200 - 85 NA = 115). и будет выглядеть вот так. По сути, именно так болезнь будет распространяться, если будет инфицирована вершина 1.
4,5,18,22,23,24,25,24,1,3,9,13,14,2,5,1,3,4,15,23,1,16,24,7,8,19,20,22,7,12,13,17,7,8,19,20,22, 4,5,18,22,23,24,25,7,11,18,20...
Что я знаю на данный момент: 1. В R есть пакет **igraph**
, который позволяет мне вычислять соседей(graph, vertex, "out")
2. Тот же пакет может также генерировать get.adjlist(graph...), get.adjacency