Функция оценки Best-First Search

Я реализую алгоритм поиска Best-First в C#. Это консольное приложение.

Структура данных, которую я использую - это дерево. Функцией оценки, которую я видел в этом алгоритме, было прямолинейное расстояние между двумя узлами (например, городами). Расстояние было вектором (длиной) на сетке в графическом приложении. Мое приложение находится в консоли, поэтому я не могу рассчитать векторы между узлами.

Как я могу рассчитать функцию оценки на моем пути реализации этого алгоритма?

РЕДАКТИРОВАТЬ (основываясь на идее Эндрю)

Я нарисовал дерево на листе бумаги и назначил координаты узлам. Начальная точка A (корень). Конечной точкой является L (пользователь выбирает цель в программе). Расстояние рассчитывается по евклидовой формуле для двух измерений:

d(p,q) = sqrt(pow((p1 - q1), 2) + pow((p2 - q2), 2)) 

Посмотрите на картинку: Best-First Search for Tree

Это хорошая идея?

1 ответ

Для функции оценки необходимо иметь уравнение линии, проходящей через две точки:

Уравнение прямой, проходящей через две разные точки P_0 = ( x_0, y_0) и P_1 = (x_1, y_1), можно записать в виде

(y - y_0)(x_1 - x_0) = (y_1 - y_0)(x - x_0). 

Рядом с ним ваш узел должен принадлежать этой строке.

То есть узел с координатами (x*, y*) должен удовлетворять уравнению:

(y* - y_0)(x_1 - x_0) = (y_1 - y_0)(x* - x_0)

Если две части уравнения оценивают разные значения, ваш узел (точка (x*,y*)) не находится на прямой линии между требуемыми точками (городами)

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