2014-01-12 4 views
0

Его о наивном союзном Найти алгоритм с использованием связанного список представление непересекающихся множеств:
Find_Set (х) операция возвращает указатель на представитель множества, содержащее элемент х , для которого требуется время O (1), поскольку узел, содержащий x, имеет указатель, непосредственно указывающий на представителя x. Но прежде, чем это нужно, нам нужно найти конкретный узел, содержащий элемент x среди всех непересекающихся множеств. Так что этот поиск не является O (1). Я не понимаю, как Find_set (x) является O (1) (как указано в книгах), когда мы не знаем, в каком непересекающемся множестве принадлежит узел, содержащий x.Disjoint Set Операция Find_Set (х) с использованием связанного списка

+0

Возможный дубликат [Как реализовать структуру данных с несвязанными наборами по связанным спискам?] (Http://stackoverflow.com/questions/20797313/how-to-implement-a-disjoint-set-data-structure- by-linked-list) –

+1

Эта ссылка не содержит правильного ответа на вопрос. Они просто предоставляют сравнение путей, а не список. – tanmoy

ответ

0

Предполагается, что каждый элемент содержит некоторый указатель/ссылку на набор, к которому он принадлежит (набор может быть фактически представлен одним из его элементов-членов). Поэтому при запросе Find_Set (x), поскольку у вас уже есть элемент x, вам просто нужно проконсультироваться с этим указателем/ссылкой, а операция - O (1). С реализацией связанного списка, где каждый набор хранится как связанный список элементов, каждый элемент содержит указатель на головку связанного списка, который выбирается как представительский элемент набора.

+0

«так как у вас уже есть элемент x» ....... моя проблема есть. Я знаю только значение x, но не конкретный узел. Мне нужно искать наборы, чтобы сначала найти узел. может быть сделано. После этого, чтобы найти представителя этого набора, просто нужно проконсультироваться с указателем/ссылкой, а операция - O (1), что я понимаю. – tanmoy

+0

@tan Не могли бы вы дать больше контекста, почему у вас есть только значения элементов, а не самих элементов? Вероятно, это то, что вам нужно исправить, чтобы заставить операции вести себя с их ожидаемыми теоретическими сложностями. Быстрое «грязное» исправление может состоять в том, чтобы сохранить хэш-карту от значения до узла. – user3146587

+0

http://stackoverflow.com/questions/1243331/disjoint-set-as-linked-list есть программа на C++, которая реализует алгоритм, но поскольку я не знаю C++, я не смог его захватить. – tanmoy