Поскольку я довольно новый, этот вопрос, безусловно, звучит глупо, но я понятия не имею, как подойти к этому.Двойной связующий массив в Python
Я пытаюсь взять список узлов, и для каждого из узлов я хочу создать массив предшественников и преемников в упорядоченном массиве всех узлов.
В настоящее время мой код выглядит следующим образом:
nodes = self.peers.keys()
nodes.sort()
peers = {}
numPeers = len(nodes)
for i in nodes:
peers[i] = [self.coordinator]
for i in range(0,len(nodes)):
peers[nodes[i%numPeers]].append(nodes[(i+1)%numPeers])
peers[nodes[(i+1)%numPeers]].append(nodes[i%numPeers])
# peers[nodes[i%numPeers]].append(nodes[(i+4)%numPeers])
# peers[nodes[(i+4)%numPeers]].append(nodes[i%numPeers])
Последние две строки позже должны быть использованы для создания пропускаемого графа, но это не очень важно. Проблема в том, что она действительно не работает надежно, иногда пропущен предшественник или преемник, а вместо этого используется следующий и т. Д. Это правильно или есть лучший способ сделать это? В основном мне нужно получить индексы массива с определенными смещениями друг от друга.
Любые идеи?
Это кажется правильным, на первый взгляд. Не могли бы вы расширить ситуацию, когда происходит пропуски? Возможно, вы меняете размер узлов и не обновляете numPeers? – rbp
Ну, этого не происходит, так как я работаю над копией ключей словаря, а не непосредственно на массиве узлов. Я начинаю задаваться вопросом, имеет ли он какое-либо отношение к тому, как я обнаруживаю ребра на графике. В качестве примера следующие результаты наложения: http://bit.ly/bpVPVM с правой стороны, мы имеем ситуацию a -> c, b -> c, c -> b и b -> a, тогда как a -> c край неверно, и должно быть a-> b – cdecker