Я использую алгоритм Ленгауэра и Тарьяна с сжатием путей для вычисления дерева доминанта для графика, где есть миллионы узлов. Алгоритм довольно сложный, и я должен признать, что не нашел времени, чтобы полностью его понять, я просто использую его. Теперь мне нужно рассчитать деревья доминант прямых детей корня node и, возможно, отложить график до определенной глубины, повторяя эту операцию. То есть когда я вычисляю дерево доминанта для дочернего элемента корня node, я хочу сделать вид, что корень node удален из графика.
Мой вопрос заключается в том, есть ли эффективное решение для этого, которое использует информацию о ближайших доминантах, уже вычисленную в начальном дереве доминирования для корня node? Другими словами, я не хочу начинать с нуля для каждого из детей, потому что весь процесс занимает много времени.
Наивно кажется, что это должно быть возможно, так как в графе будет много узлов, которые на самом деле располагают идомами немного выше их и не будут затронуты изменениями в верхней части графика.
Кстати, как и в стороне: это странно, что субъект доминантных деревьев "принадлежит" людям-компиляторам, и об этом не упоминается в книгах по классической теории графов. Приложение, для которого я его использую, - мой анализатор java heap FindRoots - не связано с теорией компилятора.
Разъяснение: Я говорю о ориентированных графах здесь. "Корень", на который я ссылаюсь, на самом деле является node с наибольшей достижимостью. Я обновил текст выше, заменив ссылки на "tree" на "graph". Я склонен думать о них как о деревьях, потому что форма в основном похожа на дерево. Граф фактически представляет собой объекты в куче java, и, как вы можете себе представить, является достаточно иерархичным. Я нашел дерево доминанта полезным при анализе утечки OOM, потому что вас интересует "что поддерживает этот объект?" и ответ, в конечном счете, является его главенством. Доминирующие деревья позволяют вам < гем > видеть дерево, а не деревья. Но иногда много нежелательных поплавков на вершине дерева, поэтому у вас есть корень с тысячами детей прямо под ним. В таких случаях я бы хотел поэкспериментировать с вычислением деревьев доминантных корней у каждого из прямых детей (в исходном графе) корня, а затем, возможно, перейти на следующий уровень вниз и так далее. (Я стараюсь не беспокоиться о возможности обратных ссылок на данный момент:)