Я пытаюсь сопоставить "necklaces" символов в Python, просматривая их линейные представления, для которых я использую обычные строки. Например, строки "AABC"
, "ABCA"
, "BCAA"
, "CAAB"
все представляют такое же ожерелье (на фото).Нормализовать строки, представляющие (комбинаторные) ожерелья
Для того, чтобы получить обзор, я храню только один эквивалентных строк данного ожерелье в качестве «представителя». Что касается проверки того, что я сохранил ожерелье кандидата, мне нужна функция для нормализации любого заданного строкового представления. Как своего рода псевдо-код, я написал функцию в Python:
import collections
def normalized(s):
q = collections.deque(s)
l = list()
l.append(''.join(q))
for i in range(len(s)-1):
q.rotate(1)
l.append(''.join(q))
l.sort()
return l[0]
Для всех строковых представлений в приведенном выше примере ожерелье, эта функция возвращает "AABC"
, который приходит первым в алфавитном порядке.
Поскольку я относительно новичок в Python, мне интересно - если я начну внедрять приложение в Python - будет ли эта функция уже «достаточно хороша» для производственного кода? Другими словами: может ли опытный программист Python использовать эту функцию или есть очевидные недостатки?
'шаблоны [abc] [bca] [cab] должны считаться идентичными. Хорошо, но ваша программа возвращает строку ... Почему? – thefourtheye
Я не понял, что вы имеете в виду? –
Извините, это было действительно немного запутанно. Надеюсь, теперь лучше. – Wolf