Найти интересные анаграммы
-
16-10-2019 - |
Вопрос
Скажите, что $ a_1a_2 ldots a_n $ и $ b_1b_2 ldots b_n $ - две строки одинаковой длины. Атмосфера Анаграмирование из двух строк - это биктивное отображение $ p: [1 ldots n] to [1 ldots n] $ такая, что $ a_i = b_ {p (i)} $ для каждого $ i $.
Там может быть более одного анаграмма для той же пары струн. Например, если $ a = $ `abcab` и $ b = $cabab
У нас есть $ P_1 [1,2,3,4,5] до [4,5,1,2,3] $ и $ P_2 [1,2,3,4,5] до [2,5, 1,4,3] $, среди прочих.
Мы скажем, что масса $ w (p) $ of anagramming $ p $ - это количество сокращений, которые необходимо сделать в первой строке, чтобы получить куски, которые можно переставить, чтобы получить вторую строку. Формально это количество значений $ i in [1 ldots n-1] $, для которых $ p (i) +1 ne p (i+1) $. То есть это количество очков, на которых делает $ p $ нет Увеличьте ровно на 1. Например, $ w (p_1) = 1 $ и $ w (p_2) = 4 $, потому что $ p_1 $ cuts 12345
Однажды, в куски 123
а также 45
, и $ p_2 $ сокращения 12345
Четыре раза, в пять кусков.
Предположим, что существует анаграммы для двух строк $ a $ и $ b $. Затем, по крайней мере, у одного анаграммы должно быть наименьший вес. Допустим, это это самый легкий. Анкет (Там может быть несколько самых легких анагромов; мне все равно, потому что меня интересует только веса.)
Вопрос
Я хочу алгоритм, который, учитывая две строки, для которых существует анаграммирование, эффективно дает точный вес самого легкого анаграммы из двух строк. Все в порядке, если алгоритм также дает самое легкое анаграммы, но это не должно.
Это довольно просто, чтобы генерировать все анаграммы и взвесить их, но может быть много, поэтому я бы предпочел метод, который находит легкие анаграммы напрямую.
Мотивация
Причина, по которой эта проблема представляет интерес, заключается в следующем. Очень легко заставить компьютер искать в словаре и найти анаграммы, пары слов, которые содержат точно одинаковые буквы. Но многие произведенные анаграммы неинтересны. Например, самые длинные примеры, которые можно найти во втором международном словаре Вебстера:
холецистодуоденостомия
двенадцатиперстная кишка
Проблема должна быть ясной: это неинтересно, потому что они признают очень легкое анаграмму, которое просто обменивается cholecysto
, duedeno
, а также stomy
Разделы, для веса 2. С другой стороны, этот гораздо более короткий пример гораздо более удивителен и интересен:
береговая линия
раздел
Здесь самый легкий анаграммы имеет вес 8.
У меня есть программа, которая использует этот метод для поиска интересных анаграмм, а именно те, для которых все анаграммы имеют большой вес. Но это делает это путем создания и взвешивания всех возможных анагромов, что является медленным.
Решение
Эта проблема известна как «минимальная общая проблема раздела строкости». (Точнее, ответ в минимальной проблеме общего строкости равен ответу в вашей проблеме плюс 1.) К сожалению, он является NP-Hard, даже с ограничением, что каждая буква происходит не более дважды в каждой из входных строк, как доказано Гольдштейном, Килманом и Чжэн [GKZ05]. Это означает, что алгоритм полиномиального времени не существует, если P = np. (Конечно, если каждая буква происходит не более одного раза, то проблема тривиальна, потому что есть только одно анаграммы.)
С положительной стороны те же авторы [GKZ05] дают алгоритм полиномиального времени 1,1037-апепцимации под тем же ограничением. (A «1.1037-Алгоритм приближения”Означает алгоритм, который может не вывести правильный ответ А но гарантированно выведет значение Беременный так что А ≤ Беременный ≤ 1.1037А.) Они также дают алгоритм линейного времени 4-аппксимации под более слабым ограничением, что каждая буква встречается не более трех раз в каждой из входных строк.
GKZ05] Авраам Гольдштейн, Петр Колман и Цзе Чжэн. Минимальная общая задача раздела строкости: твердость и приближения. Электронный журнал комбинаторики, 12, статья R50, 2005. http://www.combinatorics.org/ojs/index.php/eljc/article/view/v12i1r50
Другие советы
Это продолжение Tsuyoshi Ito's Ответ выше, суммирование наиболее актуальной части GKZ05 бумага он процитировал.
Документ доказывает сокращение максимального независимого набора (Мимо) проблема. Построить график $ g $, вершины которых являются парами $ (i, j) $ так, что $ a_i = b_j $ и $ a_ {i+1} = b_ {j+1} $. Подключите вершины $ (i, j) $ и $ (k, ell) $ (где $ i≤k $) с преимуществом всякий раз, когда невозможно, чтобы анаграммирование могло отобразить все $ i mapsto j $ и $ i+ 1 mapsto j+1 $ и $ k mapsto ell $ и $ k+1 mapsto ell+1 $. Это легко обнаружить; Такое отображение невозможно точно, если одно из следующих
- $ i = k $ и $ j ne ell $
- $ i+1 = k $ и $ j+1 ne ell $
- $ i+1
Скажем, полученный график $ G $ имеет максимальный независимый набор размеров $ S $. Тогда минимальный вес анаграммирования-$ NS-1 $, где $ n $-это продолжительность струн $ A $ и $ B $. (Конверс также содержит: анаграммирование низкого веса переводится непосредственно в большой MIS для $ G $. Для получения подробной информации см. Стр. 4–5 бумаги.)
Например, рассмотрим две строки yttrious
а также touristy
. Анкет Соответствующий график имеет две вершины, одна для общих ou
пара и один для общего ri
пара. Между вершинами нет преимущества, потому что можно иметь анаграмму, которое отображает оба ou
к ou
а также ri
к ri
; Или можно проверить, что три условия, прежде всего, терпят неудачу. Таким образом, график, очевидно, имеет неправильный размер $ s = 2 $, а минимальный вес анаграммирования действительно 8-2-1 = 5, что соответствует анаграмму y|t|t|ri|ou|s
↔ t|ou|ri|s|t|y
.'
С другой стороны, рассмотрим derater
а также treader
. Анкет На этот раз график имеет три вершины:
DErater
+treaDEr
dERater
+treadER
deratER
+treadER
2 и 3 несовместимы, а 1 и 3 несовместимы, но 1 и 2 совместимы. Таким образом, уникальный MIS имеет размер $ s = 2 $ и содержит вершины 1 и 2. Соответствующее анаграммирование веса 7-2-1 = 4-это der|a|t|e|r
↔ t|r|e|a|der
.
Это не охватывает точный алгоритм, который вы имели в виду (который Tsuyoshi Ito's Ответ делает), но пытаюсь понять основную проблему найти «интересную» анаграммы ...
Моя первая мысль заключалась в том, чтобы использовать некоторые различия в редактировании, где атомные изменения взвешены в соответствии с их «интересностью», а не с обычной «сложности» или взвешиванием «запутанности». Конечно, кажется маловероятным, что вы можете эффективно кодировать действительно интересные преобразования таким образом, поскольку они, вероятно, будут нелокальными и, следовательно, столкнулись с проблемами MIS и т. Д.
Таким образом, вторая мысль будет заключаться в том, чтобы построить выравнивание буквы в букву буквы между словами (à la машинного перевода), а затем сами оценить выравнивания за «интересность» (например, подсчет выравниваний, которые принимают смежные буквы, не является не Смежные буквы, или сколько выравниваний пересекают каждое выравнивание и т. Д., А затем объединяют их все через логическую модель или тому подобное).
Третья идея состоит в том, чтобы полностью отказаться от взгляда на структуру самого анаграммы, и вместо этого взглянуть на семантику слов. Часто то, что делает анаграмму «интересной», - это несоответствие между значениями задействованных слов. Так что попробуйте что -то вроде вычисления их расстояния в Wordnet или подобном.
Проблема может быть сформулирована с точки зрения Группы перестановки.
Теперь группа перестановки содержит все «анааграмма движения», как примитивные (обмениваясь двумя буквами), так и составной последовательности примитивных движений. Кажется, что вы заинтересованы только в подмножестве возможных перестановки. Я попытаюсь определить это.
Во-первых, вспомните обозначения для перестановки, а именно, так называемые Цикл нотации:
- $ () $ означает отсутствие перестановки.
- $ (1) $ означает 1 замену 1, что также не является перестановкой.
- $ (12) $ означает, что 1 и 2 поменяются.
- $ (123) $ означает 1 заменяет 2, что заменяет 3, что заменяет 1 (вращение).
- И так
Эти простые «циклы» состоят для описания более сложных перестановок.
Кажется, что вам интересны ходы (для слова длины $ n $):
- Смена пар одиночных символов: это свопы, такие как $ (12) $
- Образцы паров из 2 последовательных символов: это перестановка формы $ (a b) (a+1 b+1) $, где $ a> 0 $ и $ b
- ...
- Образцы паров n последовательных символов: это перестановки формы $ (a b) (a+1 b+1) cdots (a+i-1 b+i-1) $, где $ a> 0 $, $ a+i-1 le b $ и $ b+i-1 le n $.
Эти движения составляют основу для вашего алгоритма. Вас заинтересован в том, чтобы найти наименьшую последовательность этих движений, чтобы перейти от одного слова к другому.
Я не знаю никакого алгоритма для вычисления этого, кроме поиска грубой силы, но, по крайней мере, теперь есть более четкое (я надеюсь) описание того, что представляет собой примитивные движения. (И, возможно, какой -то теоретик группы среди нас может указать на соответствующий алгоритм.)
Для холецистодуоденостомии/двенадцатиперстной кишки/двенадцатиперстной кишки я замечаю, что если вы назначили число показателю каждому персонажу, описывающему, насколько он был перемещен как дельта, у вас будет что -то вроде 7 7, тогда 8 -7s, затем 6 0. Это неправильно, потому что некоторые ChARS, возможно, были повторены (второй C перемещался только вперед 2, а не обратно 7) и т. Д., Но все же очень «длина прогона», потому что вы видите те же дельты подряд.
Сравните с береговой линией/секцией, где вы видите что-то вроде (+2) (+5) (+5) (-3) (-1) (+3) .... гораздо меньше «длины прогона».
Возможно, случайность Дельт может дать вам «счет» относительно того, насколько интересна анаграмма?