LINUX.ORG.RU

Линеаризация разветвленных цепей

 , ,


0

2

Здравствуйте.

В программе я собираюсь сделать «блоки вычислений», то есть подпрограммы, которые будут выдавать некоторые значения (выходы), основываясь на своих входах. Эти блоки можно будет соединять произвольным образом. (Исключая образования петель).

Проблема в том, что на схеме они работают параллельно, а на деле, конечно, нужно будет вычислять их последовательно. Вопрос в том, как найти правильную последовательность блоков для вычисления (чтобы каждый блок вычислялся только после всех блоков, от которых он зависит, то есть всех, что соединены с его входами).
Например, для схемы 1) возможна последовательность a, b, c, d, h, f, g, а для 2) a, b, c, h, f, g, d, e.

Существуют ли «научно обоснованные», эффективные алгоритмы для таких вещей?

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

Спасибо.


Ответ на: комментарий от yoghurt

Да, плохо не знать теорию графов... :-)

Ableto
() автор топика

надеюсь, блоки работают с разной скоростью, а то неинтересно будет.

dimon555 ★★★★★
()

Что только люди не выдумают, чтобы не использовать Эрланг в типичных для него задачах.

blexey ★★★★★
()

Кстати поиск в глубину дает тот же результат что топологическая сортировки. Как избежать петель думаю догадаешься

OxiD ★★★★
()

Строишь орграф твоих зависимостей и делаешь топологическую сортировку. На cousera курс называется Algorithms Part 2

TOXA ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.