Используйте хеш-таблицу для копирования общего графика:
h = new HashTable()
def copyAll(node):
if h has key node: return h[node]
copy = node.copy()
h[node] = copy
for each successor of node:
copy.addSuccessor(copy(successor))
return copy
Ваш конкретный график кажется ациклическим со специальной структурой, поэтому вам не нужна хеш-таблица (вместо этого вы можете использовать массив), и подход, который вы описываете, кажется, лучший способ скопировать его.
Если вы пишете нейронную сеть, вы должны просто использовать векторы и матрицы чисел для представления нейронов. Сейчас это может показаться менее изящным, но, поверьте мне, это гораздо более изящно (и на несколько порядков быстрее).
Рассмотрим нейронную сеть с 2 слоями: вход (n узлов) и выход (m узлов). Теперь предположим, что у нас есть вектор с плавающей точкой in
, который представляет значения входного слоя, и мы хотим вычислить вектор с именем out
, который представляет значения выходного слоя. Сама нейронная сеть состоит из n by m
матрицы M
поплавков. M[i][j]
представляет, насколько сильна связь между входным узлом i
и выходным узлом j
. Прелесть в том, что оценка сети такая же, как матричное умножение с последующим применением функции активации к каждому элементу вектора результата:
out = f(M*in)
Где f
- функция активации, а *
- матричное умножение. Это оценка нейронной сети в 1 строке! Вы не можете получить это так элегантно с ОО-дизайном нейронной сети.