Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сколько раз встречается последовательность, в другой последовательности? 
:(
    Опции темы
tishaishii
Дата 27.4.2006, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Длина двоичной последовательности "A" - m символов.
Длина двоичной последовательности "B" - n символов.

Известно, что m гораздо меньше n (т.е. на грани сравнимости, ну, например, 10^6<n/m<10^7).
Сколько раз встречается последовательность A в последовательности B? 
PM MAIL ICQ Skype   Вверх
Fin
Дата 27.4.2006, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



Можно сделать так:
1. Сделать логическое И последовательности А и B (A & B)
2. Проверить на равенство результата коньюнкции с B (Результат == B)
    Если равно то увеличить счетчик на 1
3. Сделать логический сдвиг вправа последовательности B на 1 шаг (B << 1)
4. Перейти к шагу 1, если мы не вышли за граници
 


--------------------
Пролетал мимо.
PM MAIL   Вверх
Breed
Дата 27.4.2006, 05:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 6.4.2006

Репутация: нет
Всего: нет



Для ускорения поиска можно сдвигать не на один бит а на определенные заранее К бит.

Для этого надо найти в посл-ти А максимальную подпоследовательность начинающуюся с начала и равную подпоследовательности той же длины на которую заканчивается А.
То есть
если А = 110110, то надо сдвигать на 3 символа за каждое сравнение, 
если например А = 100001, то можно сдвигать на 5 символов,
а если А = 111111, то придется сдвигать на 1 символ...

 
PM MAIL   Вверх
Akina
Дата 27.4.2006, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mes
Дата 27.4.2006, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



Цитата(Breed @  27.4.2006,  05:56 Найти цитируемый пост)
Для ускорения поиска можно сдвигать не на один бит а на определенные заранее К бит.

Для этого надо найти в посл-ти А максимальную подпоследовательность начинающуюся с начала и равную подпоследовательности той же длины на которую заканчивается А.
То есть
если А = 110110, то надо сдвигать на 3 символа за каждое сравнение, 



Предположим, что А=110110 последовательность В = 11101100000,
Если мы будем сдвигать по три бита, то получим следующие варианты цепочки В:

1. 111011 (00000)  - в скобках остаток цепочки В, который длиней А.
2. 011000 (00)
3. 00000
Т.е ни одного совпадения. 

Давайте проверим если будем сдвигать на один бит:

1. 111011(00000)
2. 110110(0000) -! Совпадение.
3. 101100(000)
4. 011000(00)
5. 110000(0)
6. 100000

Как видим два варианта дают различный вариант, а значит один из них не верный. Конечно есть третий вариант - при неудачном сравнении сдвигать на 1 бит, при совпадении на несколько. Но есть "но". Будет хорошо если последовательность А заранее известна, и можно заранее определить кол-во сдвиговых бит. А если она не определена заранее, то определение длины максимально длиного сдвига, может занять дольше времени, чем проверка с малым сдвигом.


 


--------------------
PM MAIL WWW   Вверх
SoWa
Дата 27.4.2006, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Составляешь конечный автомат по искомой последовательности и ищешь. Сложность- линейная. 


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
esperant0
Дата 27.4.2006, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



Цитата(SoWa @ 27.4.2006,  19:42)
Составляешь конечный автомат по искомой последовательности и ищешь. Сложность- линейная.

Простите, линейная от чего:?

 


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
tishaishii
Дата 28.4.2006, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Ну так сколько раз? Формула бывает? 
PM MAIL ICQ Skype   Вверх
Breed
Дата 28.4.2006, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 6.4.2006

Репутация: нет
Всего: нет



Цитата(mes @  27.4.2006,  17:55 Найти цитируемый пост)
Конечно есть третий вариант - при неудачном сравнении сдвигать на 1 бит, при совпадении на несколько. 


Вобщем-то это я и имел в виду, только как-то написал не так... :-)

Цитата(mes @  27.4.2006,  17:55 Найти цитируемый пост)
А если она не определена заранее, то определение длины максимально длиного сдвига, может занять дольше времени, чем проверка с малым сдвигом.


Я думаю, что при условии
"Известно, что m гораздо меньше n (т.е. на грани сравнимости, ну, например, 10^6<n/m<10^7)."
(Описано автором) эта оптимизация может очень даже пригодиться. 
PM MAIL   Вверх
mes
Дата 2.5.2006, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



Кстати всю строку Б каждый раз сравнивать не обязательно. Например для 8битного сравнения достаточно сравнивать по одному байту,
до тех пор пока совпадают. Как только обнаружили разницу, дальше проверять не имеет смысла, поетому сдвигаем цепочку на один байт и начинаем заново побайтово проверять цепочку Б.

П.С. Надеюсь я понятно выразился, если нет попытаюсь заново.  

Это сообщение отредактировал(а) mes - 2.5.2006, 23:48


--------------------
PM MAIL WWW   Вверх
Alagert
Дата 3.5.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 25.8.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Цитата(esperant0 @  27.4.2006,  22:59 Найти цитируемый пост)
Простите, линейная от чего:?

От входной длины. Только нужен не обыкновенный автомат, а машина Тьюринга. Тк у простого КА нет памяти. 
--------------------
[color=blue]BORN TO BE ROOT#[/color]  
PM MAIL ICQ   Вверх
SoWa
Дата 3.5.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Такой не знаю. Могу предположить, что это КА с памятью smile
Просто счетчик, и чего мудрить? 


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Alagert
Дата 4.5.2006, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 25.8.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Вообщем то так и есть. У классического КА нет памяти. Либо семмантики навешивать, те юзать счетчик в нужном состоянии. 
--------------------
[color=blue]BORN TO BE ROOT#[/color]  
PM MAIL ICQ   Вверх
SoWa
Дата 4.5.2006, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Можно использовать КА со стеком, из которого не будем ничего убирать, а приписывать только единицы.
Вроде, задачу решили. 


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0584 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.