Алгоритм «автокодирования» для программирования на основе потока сигналов?

#python #algorithm #graph #graph-theory #graph-traversal

#python #алгоритм #График #теория графов #обход графика

Вопрос:

Давайте предположим, что у меня есть график «программы» на основе потока сигналов (например, что-то похожее на Simulink). Т.е. у меня есть ориентированный граф с несколькими начальными узлами и несколькими конечными узлами, а также множеством узлов между ними (и, надеюсь, без циклической связи)

Существует ли хороший и / или хорошо известный алгоритм (возможно, даже доступный в виде библиотеки Python), который будет обходить этот график и давать мне порядок вычислений?

Пример (направление не показано, предположим очевидное):

In1 In2
  
 [-] [*]-- Out1
 /  /
In3 [ ]------ Out2
 /
 In4 

Это должно привести к инструкциям / порядку:

1. tmp1 : = In1 - In3
2. Out2 := tmp1   In4
3. Out1 := In2 * Out2

Спасибо!

Ответ №1:

Вы ищете какую-то вариацию топологической сортировки?

Поскольку вы знаете начальные узлы, вы можете запустить алгоритм с них. Когда вы встречаете узел «operation», вы создаете вычисление с узлами, ведущими вас к нему. Естественно, график должен быть согласованным некоторыми способами, специфичными для вашей проблемы.

Чтобы реализовать это на Python, вам нужна хорошая библиотека graph (например, NetworkX). Топологическая сортировка очень проста в реализации, и многие библиотеки графов уже имеют ее в качестве реализованного алгоритма. Например, в случае NetworkX — networkx.algorithms.dag.topological_sort. Однако, как упоминалось выше, это, вероятно, не точно топологическая сортировка, а ее разновидность.

Комментарии:

1. Спасибо! «Топологическая сортировка» было ключевым словом, которое я искал и не мог найти сам!