Поиск равных или похожих последовательностей в списке - PullRequest
1 голос
/ 24 ноября 2011

Мне нужно преобразовать список в пустой, если у него есть две непересекающиеся последовательности с определенным свойством.Например, в этом случае, равно и с длиной> = 2)

mm[{___, b1__, ___, b1__, ___}] := {} /; Length[{b1}] >= 2

или, например, 2 подсписка, с функцией подобия, равной 0 и Legth = 4

mm[{___, b1__, ___, b2__, ___}] := {} /;
NeedlemanWunschSimilarity[{b1}, {b2}] == 0 && Length[{b1}] == 4 &&
Length[{b2}] == 4

и такна .....

Для mathematica, гуру, который знает внутренний алгоритм, есть ли более быстрый способ, возможно, с помощью PatternTest (?)?

1 Ответ

4 голосов
/ 24 ноября 2011

Я жду более полного описания того, что вы делаете, но в то же время:

mm2[{___, b1 : Repeated[_, {4}], ___, b2 : Repeated[_, {4}], ___}] := {} /; 
  NeedlemanWunschSimilarity[{b1}, {b2}] == 0

Используется Repeated для проверки только последовательностей правильной длины.

Вы можете указать минимальную и максимальную длину последовательности с помощью Repeated[_, {min, max}].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...