Вопрос в абстрактном выражении:
У меня есть ориентированный ациклический граф (DAG), который содержит подмножества вершин, которые являются исключительными при запросе (в результатах запроса должен присутствовать только один элемент на подмножество). Когда я запрашиваю структуру графа, я хотел бы получить набор вершин, которые вытекают из данной вершины, выбирая только один элемент из известных подмножеств вершин в графе.
Конкретный вопрос:
У меня есть DAG, в котором хранятся мои сборки (вершины) и их зависимости (ребра). Учитывая сборку или набор сборок, мне нужно запросить, чтобы получить набор всех задействованных сборок и их зависимости. Сложность состоит в том, что каждая сборка имеет несколько версий, и только один экземпляр сборки может быть загружен в процесс. Зависимости для данной сборки меняются между различными версиями сборки.
Есть ли название для этой проблемы или группы проблем? Стандартный алгоритм, который я могу исследовать, чтобы найти решение?
Возможные области решения:
транзитивное замыкание кажется близким к хорошему решению, но элемент, выбранный из подмножества (версия сборки), будет меняться в зависимости от пути, пройденного через граф, возможно, через несколько ветвей, поэтому вам почти придется отслеживать путь, пройденный через граф для создания транзитивного замыкания.
База данных графов может немного помочь, но мы не хотим идти по этому пути прямо сейчас, если в этом нет крайней необходимости.