Могу ли я использовать алгоритм кратчайшего пути neo4j gds с умножением вместо сложения?

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

MATCH (sourceNode:entity{name: $name}) 
CALL gds.alpha.shortestPath.deltaStepping.stream({
     startNode: sourceNode, 
     nodeProjection: "*", 
     relationshipProjection: {
         all: {
         type: "*", 
         properties: "weight",
         orientation: "UNDIRECTED" 
         } 
     }, 
     relationshipWeightProperty: "weight", 
     delta: 1.0 
     })
YIELD nodeId, distance 
WHERE gds.util.isFinite(distance) 
RETURN sourceNode.name, 
       gds.util.asNode(nodeId).name AS aim_entity,
       distance 
ORDER BY distance;

1 ответ

Вы можете нанести на карту свой weight поле в logWeight поле путем логарифмирования - тогда в логарифмическом пространстве сложение - это умножение в обычном пространстве.

Функции, которые вы можете использовать:

https://neo4j.com/docs/cypher-manual/current/functions/mat Mathematical-logarithmic/

Тогда, если кратчайший путь, который вы вычислите (с использованием логарифмических весов), до узла n является n.ShortestDistance вы можете получить произведение всех весов (предлогарифм), выполнив exp(n.ShortestDistance).

Другие вопросы по тегам