2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Проверка слова на маску.
Сообщение11.01.2011, 16:42 
Задача такая(если это программирование перенесите тему туда).
Есть слово W из маленьких английских букв длинны m, и слово S из n больших английских букв.
Надо проверить можно ли получить W из S, заменив большие буквы словами из маленьких букв маленькими.
Одинаковые буквы должны заменяться одинаковыми словами.
Пример:
S=AA
слова aa,abab,cdccdc -представимы, ab,aba,acacac -нет.
S=ABA
Любое слово представимо если A - пустое.
S=ABBA
abbbab,cc -представимы, aba,abbaab,bbaababa -нет.

Лучше перебора по длинам заменяющих слов не придумывается. Как это сделать быстрее?
n<10..15 m<1000..5000

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 18:04 
Может быть попробовать что-нибудь вроде Z-функции?

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 19:05 
Это сильно смахивает на pattern-matching.

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 19:48 
Аватара пользователя
Я вот тут недавно читал Yacc is dead, мб тут тоже можно этот метод прикрутить?
Например, если мы хотим сматчить $ABCABC$ и прочитали первую букву $x$, то оставшееся должно сматчиться с $A'BCxA'BC$ либо (если $A$ пустое) с $B'CxB'C$, либо с $C'xC'$

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 19:55 
Xaositect в сообщении #398230 писал(а):
Например, если мы хотим сматчить $ABCABС$
Первая мысль - если хоть один символ в маске встречается только один раз, то эта маска подходит к любому слову.

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 19:58 
Аватара пользователя
Ой, у меня первая C правильная, а вторая почему-то русская.

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 20:07 
В вашем алгоритме на каждом шаге варианты множатся. $2^m$ - больно много.

А если завести массив размера $O(m^2 n^2)$ где $a[i,j,k,l]$- можно ли получить слово $W[i..j]$ из маски $S[k..l]$, только он очень большой и его считать долго.

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 20:26 
Аватара пользователя
Null в сообщении #398243 писал(а):
В вашем алгоритме на каждом шаге варианты множатся. $2^m$ - больно много.
В конкретно этом случае не множатся, если еще немного подумать. Там все мои три варианта на самом деле являются частными случаями первого. Но вполне возможно, что иногда будут, да.

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 20:28 
Xaositect в сообщении #398260 писал(а):
Null в сообщении #398243 писал(а):
В вашем алгоритме на каждом шаге варианты множатся. $2^m$ - больно много.
В конкретно этом случае не множатся, если еще немного подумать. Там все мои три варианта на самом деле являются частными случаями первого. Но вполне возможно, что иногда будут, да.


Это потому что ваша маска эквивалентна $AA$ или я чего-то не понял?

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 20:29 
Аватара пользователя
Null в сообщении #398264 писал(а):
Xaositect в сообщении #398260 писал(а):
Null в сообщении #398243 писал(а):
В вашем алгоритме на каждом шаге варианты множатся. $2^m$ - больно много.
В конкретно этом случае не множатся, если еще немного подумать. Там все мои три варианта на самом деле являются частными случаями первого. Но вполне возможно, что иногда будут, да.


Это потому что ваша маска эквивалентна $AA$ или я чего-то не понял?
Да, Вы правы, предложенный мной подход тут не сработает.

-- Вт янв 11, 2011 20:58:21 --

Null в сообщении #398243 писал(а):
А если завести массив размера $O(m^2 n^2)$ где $a[i,j,k,l]$- можно ли получить слово $W[i..j]$ из маски $S[k..l]$, только он очень большой и его считать долго.
Тут кстати все равно перебор нужен, так как если добавляется буква, которая уже была, то надо знать не только, что слово можно получить, но и как его можно получить.

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 21:05 

(Оффтоп)

Joker_vD в сообщении #398202 писал(а):
Это сильно смахивает на pattern-matching.
Мне тоже так кажется. А там есть готовые решения?

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 21:07 
А давайте строить ДКА для строчки из больших букв, и скармливать ему строчку из маленьких?

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 21:15 
Аватара пользователя
Так не конечный же автомат будет.

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 21:30 
А почему не будет-то?

 
 
 
 Re: Проверка слова на маску.
Сообщение11.01.2011, 21:35 
Аватара пользователя
Joker_vD в сообщении #398324 писал(а):
А почему не будет-то?
Так ведь даже $\{ww|w\in A^*\}$ - нерегулярный язык, а дальше - больше. $\{www|w\in A^*\}$ даже не контекстно-свободный.

 
 
 [ Сообщений: 26 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group