У меня есть ориентированный граф, представленный в XML, как показано в минималистском примере ниже.Я ищу способ программно отбирать избыточные ребра для создания минимизированного орграфа.
В частности, A -> B -> C, поэтому мне не нужна ссылка непосредственно из A -> C: отношениямежду А и С уже подразумевается связь между А и В, а между В и С.
Я начинаю с
<graph>
<node id="A" />
<node id="B" />
<node id="C" />
<edge src="A" dest="B" />
<edge src="A" dest="C" />
<edge src="B" dest="C" />
</graph>
То, что я хочу, это
<graph>
<node id="A" />
<node id="B" />
<node id="C" />
<edge src="A" dest="B" />
<edge src="B" dest="C" />
</graph>
Я почти уверен, что ищу <xsl:template>
с правилом сопоставления, которое говорит что-то вроде "edge, у которого есть два родных брата, так что у одного такой же src, как у меня, у другого такое же назначение, как у меня, иони совпадают по своим соотношениям dest и source vales "(что даже на английском языке).Я не вижу, как сформулировать это как шаблон соответствия шаблону или даже выделение в шаблоне.Я могу понять, как это сделать, проверяя (сравнивая каждую пару братьев и сестер, чтобы увидеть, могу ли я выбрать эту), но я бы предпочел избежать этого: это сработало бы, и у меня не так много ребер, что яМеня особенно беспокоит время выполнения O (nn), но оно не элегантно.