Сложный алгоритм для сортировки символов в массиве с сохранением отношений через порядок

Проблема

У меня есть несколько групп, которые определяют отношения символов .. например:

[A B C]

[A D E]

[X Y Z]

Эти группы означают, что (для первая группа) символы A, B и C связаны друг с другом. (Вторая группа) Символы A, D, E связаны друг с другом ... и т. Д.

Учитывая все эти данные, мне нужно было бы поместить все уникальные символы в 1- массив измерений, в котором символы, которые так или иначе связаны друг с другом, будут расположены ближе друг к другу. Учитывая приведенный выше пример, результат должен быть примерно таким:

[B C A D E X Y Z]

или

[X Y Z D E A B C]

В этом результирующем массиве, поскольку символ A имеет несколько отношений (а именно с B и C в одной группе и с D и E в другой), он теперь расположены между этими символами, в некоторой степени сохраняя связь.

Обратите внимание, что порядок не важен. В результате X Y Z может быть размещен первым или последним, поскольку эти символы не связаны ни с какими другими символами. Однако важна близость связанных символов.

Мне нужна помощь в

Мне нужна помощь в определении алгоритма, который принимает группы символьных отношений, а затем выводит одномерный массив, используя приведенную выше логику. Я пытаюсь понять, как это сделать, поскольку с реальными данными количество символов в группе отношений может варьироваться, также нет ограничений на количество групп отношений, и символ может иметь отношения с любым другим символом.

Дополнительный пример

Чтобы еще больше проиллюстрировать сложность моей дилеммы, ЕСЛИ вы добавите еще одну группу отношений к приведенному выше примеру. Скажем:

[C Z]

Результат должен быть примерно таким:

[X Y Z C B A D E]

Обратите внимание, что символы Z и C теперь ближе друг к другу, поскольку их связь была усилена дополнительными данными. Все предыдущие отношения сохраняются и в результате.

6
задан Benjamin Intal 22 September 2011 в 15:32
поделиться