Поиск ближайшей пары с помощью «Разделяй и властвуй»

В настоящее время мне поручено создать программу на С++ для поиска ближайшей пары точек в системе координат (x, y). Тем не менее, у меня много проблем, пытаясь понять одну вещь.

В каждом учебнике/руководстве, которое я читал о проблеме с ближайшей парой, мне предлагается отсортировать набор точек по координатам Y, но я не понимаю, в чем смысл этого? Может кто-нибудь объяснить мне, почему мы сортируем его по координатам Y и какой в ​​этом смысл? Я понимаю, что мы сортируем точки по X, чтобы получить L и X*, но я просто не понимаю, почему мы должны сортировать точки еще и по координатам Y.


person user3720526    schedule 16.11.2015    source источник
comment
Вы можете выполнить этап рекомбинации рекурсии за постоянное время, только если точки отсортированы; это сокращение отвечает за сокращение времени выполнения до O (nlogn).   -  person G Fetterman    schedule 16.11.2015


Ответы (1)


Вы этого не сделаете, но тогда ваше время работы не улучшится по сравнению с O(n2). Весь смысл в том, чтобы вычислять как можно меньше — исследуя как можно меньше точек, игнорируя те, которые, как вы знаете, не будут частью ответа. Сделайте это, отсортировав Y.

Вот довольно хорошее объяснение, которое я только что погуглил: http://www.cs.mcgill.ca/~cs251/ClosestPair/ClosestPairDQ.html

person Dúthomhas    schedule 16.11.2015