Я искал похожие темы, но ответы слишком расплывчаты для моего уровня понимания и понимания, и я не думаю, что они достаточно конкретны для моего вопроса.
Похожие темы:
Реализация дерева (направленный ациклический граф)
Представление DAG (направленный ациклический граф)
Вопрос:
Я отформатировал текстовый файл, содержащий данные в следующем формате ...
Пример набора данных:
GO: 0000109 # is_a: GO: 0000110 # is_a: GO: 0000111 # is_a: GO: 0000112 # is_a : GO: 0000113 # is_a: GO: 0070312 # is_a: GO: 0070522 # is_a: GO: 0070912 # is_a: GO: 0070913 # is_a: GO: 0071942 # part_of: GO: 0008622
GO: 0000112 # part_of: GO: 0000442
GO: 0000118 # is_a: GO: 0016581 # is_a: GO: 0034967 # is_a: GO: 0070210 # is_a: GO: 0070211 # is_a: GO: 0070822 # is_a: GO: 0070823 # is_a: GO : 0070824
GO: 0000120 # is_a: GO: 0000500 # is_a: GO: 0005668 # is_a: GO: 0070860
GO: 0000123 # is_a: GO: 0005671 # is_a: GO: 0043189 # is_a: GO : 0070461 # is_a: GO: 0070775 # is_a: GO: 0072487
GO: 0000126 # is_a: GO: 0034732 # is_a: GO: 0034733
GO: 0000127 # part_of: GO: 0034734 # part_of: GO : 0034735
GO: 0000133 # is_a: GO: 0031560 # is_a: GO: 0031561 # is_a: GO: 0031562 # is_a: GO: 0031563 # part_of: GO: 0031500
GO: 0000137 # part_of: GO : 0000136
Я хочу построить взвешенный направленный DAG из этих данных (приведенное выше - это всего лишь фрагмент). Полный набор данных размером 106 КБ находится здесь: Источник
--------------------------------------------------
По очереди данные каждой строки объясняются следующим образом ...
Первая строка в качестве примера:
GO: 0000109 # is_a: GO: 0000110 # is_a: GO: 0000111 #is_a: GO: 0000112 # is_a: GO: 0000113 # is_a: GO: 0070312 # is_a: GO: 0070522 # is_a: GO: 0070912 # is_a: GO: 0070913 # is_a: GO: 0071942 # part_of: GO: 0008622
'#' - это разделитель / токенизатор для строковых данных.
Первый член, GO: 0000109 - это имя узла.
Последующие термины is_a: GO: xxxxxxx OR part_of: GO: xxxxxxx являются узлы, которые подключены к GO: 0000109.
Некоторые из последующих терминов также имеют связи, как показано в наборе данных.
Когда это is_a, вес ребра равен 0,8.
Когда это part_of, вес ребра 0,6.
--------------------------------------------------
У меня есть Google-d о том, каковы DAG, и я понимаю эту концепцию. Однако я до сих пор не знаю, как это воплотить в коде. Я использую Java.
Насколько я понимаю, граф обычно состоит из узлов и дуг. Требуется ли для этого графа список смежности для определения направления соединения? Если да, то я не уверен, как объединить граф и список смежности для взаимодействия друг с другом. После построения графа моя вторичная цель - выяснить степень каждого узла от корневого узла. В наборе данных есть корневой узел.
Для иллюстрации я нарисовал образец подключения первой строки данных ниже:
Ссылка на изображение
Надеюсь, вы понимаете, чего я здесь пытаюсь достичь. Спасибо, что рассмотрели мою проблему. :)