Обрезка больших графиков блуждающих узлов

У меня есть график, состоящий примерно из 35 000 узлов, представленных простым текстом:

node1 -> node35000
node29420 -> node35000
node2334 -> node4116
...

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

1 -> 2;
2 -> 3;
3 -> 4;
0 -> 4;

я бы хотел сохранить 1, 2, 3 и 4 (так как 1 -> 2 -> 3 -> 4 - это четыре вершины длиной), но отбросить 0, то есть удалить 0 -> 4.

Есть идеи, как это сделать? Я попробовал комбинацию Perl и функций оболочки, но думаю, что мне нужен лучший подход. Если только, возможно, для этого уже есть инструменты? Данные находятся в формате graphviz, но я не видел никаких инструментов в этом наборе, относящихся к данной задаче.

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

5
задан Tom Zych 10 September 2011 в 03:43
поделиться