Могу ли я использовать алгоритм кратчайшего пути 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)
.