У меня есть некоторые данные (не то, что данные на самом деле существуют до тех пор, пока я не решил это ...) Мне нужно иметь возможность манипулировать внутри моей программы. Однако я не могу разработать подходящую структуру для ее хранения.Как представить данные «дерева»?
Данные представляют собой набор путей и узлов. Существует один вход (который в некоторых случаях может отсутствовать), а затем несколько путей между узлами, заканчивающимися выходами (конец может не иметь выход, но выход всегда находится в конце). Каждый вход, узел и вывод имеют позицию, а общие данные можно манипулировать графически, поэтому любая структура, которую я использую, должна быть легко изменять содержимое во время выполнения потенциально непредсказуемыми способами (например, изменять входные данные на выходе и затем сделать другой вывод на вход).
Я считал, используя древовидную структуру, где каждый элемент имел родитель (за исключением корня) и число детей, например, как:
Input
|
node---
| | |
| | Output
| |
| Node---Output
| |---Output
|
Node----Node
| |
Node Output
Однако я вижу ряд проблем с этим, такими, как если бы нет ввода, или его удалены/изменены/etc ...
Это наглядный пример. «>» - это входные O-узлы и [] выходы.
http://unisonmodules.co.uk/wjnewbery/data.png
@Everyone предполагая, используя древовидную структуру, как я уже упоминал
Если дерево, на самом деле подходит, как я преодолеть проблемы, где данный набор данных не имеет даже вход/root, как говорят ниже. Что происходит тогда? Нужно ли мне полностью перестроить дерево, если входной узел/точка/все изменения (через удаление затем добавить)? Как мне это сделать?
http://unisonmodules.co.uk/wjnewbery/data2.png
Я буду смотреть на графики.
Почему это не дерево? –
, если вы считаете, что 'tree' недостаточно гибко, вы можете попробовать' graph': http://en.wikipedia.org/wiki/Graph_%28data_structure%29 –