@iordania

Нахождение ближайшего соседа с более чем 1 параметром?

Всем привет! Участвую в одном из курсов Яндекса и есть одно из следующих заданий:
Реализовать алгоритм нахождения ближайшего соседа, где у каждого из ребер имеется 2 и более параметров

В качестве алгоритма нахождение ближайшего соседа использую алгоритм Дэйкстры
Входные параметры следующие:
const routs = {
  start: { a: 10, finish: 20, c: 9 },
  a: { b: 5 },
  b: { finish: 0.5 },
  c: { b: 35 },
  finish: {},
}

итог:
{ distance: 15.5, path: [ 'start', 'a', 'b', 'finish' ] }

С этими входными данными он справляется отлично, вопрос в реализации алгоритма для множества параметров.
5eaac424814a7400709183.png
Если к каждой из точек(значение рёбер) добавится ещё n-параметров, алгоритм будет эфективным в данном случае или есть другие реализации/алгоритмы ?
Входные данные с множеством параметров:
const routs = {
start: {
    a: { path: 10, price: 20, time: 5 },
    finish: { path: 20, price: 9, time: 45 },
    c: { path: 9, price: 8, time: 12 },
},
a: {
    b: { path: 5, price: 1, time: 8 },
},
b: {
    finish: { path: 0.5, price: 0.2, time: 2 },
},
c: { b: { path: 35, price: 35, time: 1 } },
finish: {},
}

Теперь, помимо path добавилась цена(price) и время ожидания такси(time).
В теперешней моей реализации алгоритм высчитывает только по одному параметру, для вычесления со множеством параметров данный алгоритм подходит или есть более лучшее решение ?
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
@dmshar
Вы специально всех пытаетесь запутать?
Во-первых, алгоритм Дейкстры никак НЕ "алгоритм нахождения ближайшего соседа". Это алгоритм нахождения кратчайшего пути. Что вовсе не одно и тоже. Отсюда первый вопрос - так что-же на самом деле вы там ищете?

Во-вторых, первый пример ну никак не согласуется с приведенной картинкой. Даже по одному параметру. Что вы этим хотели сказать/показать?

В-третьих. Наличие нескольких параметров у веток графа приводит к двум различным постановкам задачи поиска кратчайшего пути (относительно вашей задачи сомнения - см. выше) .
Первая - это поиск отдельных кратчайших путей по каждому из показателей (пример - поиск ближайшего пути из города А в город Б по цене, расстоянию, времени в пути - ясно что это РАЗНЫЕ задачи).
Вторая постановка - если вы как-то обобщаете свои три (или сколько-там) параметров в один (ну, например, используя метру расстояния Эвклида, манхетенскую, Хэмминга, Махаланобиса или какую другую) и уже по этой обобщенной мере ищите алгоритмом Дейкстры минимальный путь. Все зависит от постановки задачи.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Нужно заранее найти значения для идеального случая и для наихудшего по одной и той же формуле.

Попарные отношения коэффициентов одного предложения друг к другу в рекурсии дадут общий "вес" предложения (каждый шаг - по той же формуле, что и для идеального и наихудшего случая).

Потом - расположить все предложения от наихудшего к наилучшему и взять оптимальное: "вес" предложения, ближайшего к наилучшему предложению.
Всё..
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы