Строковая векторная сортировка - PullRequest
0 голосов
/ 09 февраля 2012

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

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

Например, если у меня есть строковый вектор, такой как "ABCD", "TGHI", "DADC", "IYUR", "CXYT" так что это будет организовано как "ABCD", тогда будет третья строка "DADC", тогда будет пятая строка "CXYT" и так далее Таким образом, результатом будет «ABCD», «DADC», «CXYT», «TGHI», «IYUR».

Теперь мне было интересно, было бы неплохо проверить каждую строку с другой строкой, если она «совместима» в соответствии с приведенными выше правилами ... так что если у меня есть 5 строк в векторе, то у меня будет 5+ 4 + 3 + 2 + 1 возможностей, и если, например, у меня есть 20 строк, это значительно увеличится, так что это хорошая идея или есть другое хорошее эффективное решение для этого ... Большое спасибо и надеюсь (большая часть), что вы понимаете.

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Представьте каждую букву как узел на графике. Каждое слово представляет собой направленный путь между двумя буквами в. "ACCA" определяет A-> A "BAAC" B -> C. На этом графике вы хотели бы найти Эйлерову дорожку. http://en.wikipedia.org/wiki/Eulerian_path. Эйлеровый путь определяется как путь, который посещает каждое ребро ровно один раз, и так как каждое ребро представляет собой слово, которое означает, что вы использовали все слова!

0 голосов
/ 09 февраля 2012

Лучшим подходом может быть построение ориентированного графа с использованием строк. От строки s1 до строки s2 будет ребро, если последний символ s1 совпадает с первым символом s2. Затем вы можете попытаться найти самый длинный путь на графике.

...