У меня есть большой набор точек (n> 10000 в количестве) в некотором метрическом пространстве (например, с Jaccard Distance). Я хочу связать их с минимальным связующим деревом, используя метрику как вес по краям.Эффективное минимальное остовное дерево в метрическом пространстве
- Есть ли алгоритм, который работает меньше, чем O (N 2 ) время?
- Если нет, существует ли алгоритм, который работает меньше, чем O (n) среднее время (возможно, с использованием рандомизации)?
- Если нет, существует ли алгоритм, который работает меньше, чем O (n) и дает хорошее приближение минимального остовного дерева?
- Если нет, есть ли причина, почему такой алгоритм не может существовать?
Благодарим вас заблаговременно!
Редактировать плакаты, указанные ниже: Классические алгоритмы поиска минимального связующего дерева здесь не работают. Они имеют E-фактор в своем времени работы, но в моем случае E = n , так как я фактически рассматриваю полный график. У меня также недостаточно памяти для хранения всех возможных краев> 49995000.
Вы читали хотя бы этот http://en.wikipedia.org/wiki/Minimum_spanning_tree#Algorithms? –
@ Николай: Конечно, я и сделал. И много бумаг тоже. – ybungalobill
Вам не нужно «хранить» ваши ребра 10^8. Вам понадобится бит-вектор, чтобы иметь возможность отмечать посещенные ребра, но этот бит-вектор будет использовать только 12 МБ или около того, что кажется доступным для памяти. –