Эффективное минимальное остовное дерево в метрическом пространстве - PullRequest
8 голосов
/ 17 января 2011

У меня есть большой набор точек (число> 10000) в некотором метрическом пространстве (например, оборудованный Расстояние Джакарта ). Я хочу связать их с минимальным остовным деревом, используя метрику в качестве веса по краям.

  • Существует ли алгоритм, который работает менее чем за O (n 2 ) времени?
  • Если нет, то существует ли алгоритм, который работает менее чем за O (n 2 ) среднего времени (возможно, с использованием рандомизации)?
  • Если нет, то существует ли алгоритм, который работает менее чем за O (n 2 ) времени и дает хорошее приближение минимального остовного дерева?
  • Если нет, есть ли причина, по которой такой алгоритм не может существовать?

Заранее спасибо!

Изменить для постеров ниже: Классические алгоритмы поиска минимального остовного дерева здесь не работают. У них есть фактор E в их времени выполнения, но в моем случае E = n 2 , так как я фактически рассматриваю полный граф. У меня также недостаточно памяти для хранения всех> 49995000 возможных ребер.

Ответы [ 2 ]

5 голосов
/ 17 января 2011

По-видимому, согласно этому: Оценка веса метрических минимальных остовных деревьев в сублинейное время нет детерминированного o (n ^ 2) (примечание: smallOh, что, вероятно, вы имели в виду под менее чемO (n ^ 2), я полагаю) алгоритм.В этой статье также приводится сублинейный рандомизированный алгоритм для остовного дерева минимального веса метрики.

Также посмотрите на эту статью: Оптимальный алгоритм минимального остовного дерева , который дает оптимальный алгоритм.В документе также утверждается, что сложность оптимального алгоритма еще не известна!

Ссылки в первой статье должны быть полезны, и эта статья, вероятно, наиболее актуальна для вашего вопроса.

Надеждаэто помогает.

4 голосов
/ 17 января 2011

Когда я смотрел на очень похожую проблему 3-4 года назад, я не мог найти идеального решения в литературе, на которую смотрел.

Я думаю, уловка состоит в том, чтобы найти «маленькое» подмножество«вероятно хороших» краев, по которым вы можете запустить старый добрый Kruskal.В целом, вероятно, что множество ребер MST можно найти среди множества ребер, которые соединяют каждую вершину с ее k ближайшими соседями, для некоторых небольших k .Эти ребра могут не охватывать график, но если они этого не делают, каждый компонент может быть свернут в одну вершину (выбранную случайным образом), и процесс повторяется.(Для большей точности вместо того, чтобы выбрать одного представителя, который станет новым "супервертексом", выберите небольшое число r представителей и в следующем раунде изучите все r ^ 2 расстояния между2 супервершин, выбирающих минимум.)

k алгоритмы ближайших соседей достаточно хорошо изучены для случая, когда объекты могут быть представлены как векторы в конечномерном евклидовом пространстве, поэтомуесли вы можете найти способ привязать ваши объекты к этому (например, с помощью многомерного масштабирования ), тогда вам может повезти.В частности, отображение в 2D позволяет вычислять диаграмму Вороного, и ребра MST всегда будут между смежными гранями.Но из того, что я прочитал, этот подход не всегда дает хорошие результаты.

В противном случае вы можете найти подходы кластеризации полезными: Кластеризация больших наборов данных в произвольных метрических пространствах - этоодна из немногих статей, которые я обнаружил, в которой явно рассматриваются объекты, которые не обязательно являются конечномерными векторами в евклидовом пространстве, и в котором рассматривается возможность использования вычислительно дорогих функций расстояния.

...