Mind.js — это библиотека на JavaScript, предназначенная для реализации алгоритмов поиска и анализа графов, включая поиск кратчайшего пути. В основе работы библиотеки лежит представление графа через узлы (nodes) и рёбра (edges), где каждый узел может иметь множество соединений с соседними узлами с определённой стоимостью перехода.
В Mind.js граф строится через объекты Node и Edge:
const nodeA = new Mind.Node('A');
const nodeB = new Mind.Node('B');
const nodeC = new Mind.Node('C');
nodeA.addEdge(nodeB, 5); // ребро с весом 5
nodeA.addEdge(nodeC, 10);
nodeB.addEdge(nodeC, 3);
Граф можно рассматривать как структуру смежности, где каждый узел хранит ссылки на своих соседей и веса связей с ними.
Mind.js поддерживает несколько методов поиска кратчайшего пути, включая:
Алгоритм Дейкстры позволяет найти минимальный путь от начального узла до всех остальных в графе с неотрицательными весами.
Ключевые шаги:
Присвоение каждому узлу начального расстояния: 0 для
стартового узла, Infinity для остальных.
Создание множества непосещённых узлов.
Повторение:
Пример использования в Mind.js:
const graph = new Mind.Graph([nodeA, nodeB, nodeC]);
const shortestPaths = graph.dijkstra(nodeA);
console.log(shortestPaths[nodeC.id]); // минимальное расстояние до узла C
dijkstra(startNode) возвращает объект, где ключи —
идентификаторы узлов, а значения — минимальные расстояния от стартового
узла.A* расширяет алгоритм Дейкстры, используя эвристическую функцию
h(n), которая оценивает расстояние от узла до цели. Это
позволяет ускорить поиск в больших графах.
**Составляющие A*:**
Пример реализации в Mind.js:
const heuristic = (node, goal) => {
// пример: эвристика для координатной сетки
return Math.abs(node.x - goal.x) + Math.abs(node.y - goal.y);
};
const path = graph.aStar(nodeA, nodeC, heuristic);
console.log(path); // массив узлов, формирующих кратчайший путь
aStar(startNode, goalNode, heuristicFn) возвращает
массив узлов, составляющих оптимальный путь.Пример BFS:
const pathBFS = graph.bfs(nodeA, nodeC);
console.log(pathBFS); // кратчайший путь по количеству рёбер
Mind.js предоставляет методы для визуализации графа и отображения кратчайших путей:
graph.draw('#canvas'); // отрисовка графа в HTML-элементе
graph.highlightPath(path); // подсветка найденного пути