Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск подмассива в массиве, Посоветуйте 
:(
    Опции темы
WERITAS
  Дата 18.6.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


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

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



Доброго времени суток. Требуется написать функцию, ищущую заданный образец в массиве байт. Читаю про методы поиска. В частности алгоритм Кнута-Мориса-Пратта и алгоритм Бойера-Мура, но никак не могу выбрать какой из них использовать. Может что-нибудь посоветуете 


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
Akina
Дата 18.6.2010, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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





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

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


Опытный
**


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

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



Алгоритм грубой силы. Берем первый байт из масива который ищем и идем по массиву в котором ищем пока он не встретится  потом проверяем весь массив до первого расхождения. Если не совпала дальше сдвигаем индекс на 1 и продолжаем поиск.

Если этот массив имет вероятность распределения всех чисел 1/256 то в срднем будем иметь сложность примерно такую Т(n)+Т(n/256*log(m))
Для текста 1/A A- число букв алфовита Т(n)+Т(n/A*m) 
Что несколько многовато. Зато если представить массивы не как массивы байт а как массивы слов и будем сравнивать по словам 
получим вероятности совподения  слов 1/65536 для текста 1/(A*A)  тут уже вторым членом можно принебречь в среднем имеем Т(n)
PM MAIL   Вверх
esperanto
Дата 21.6.2010, 04:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



предыдущее решение плохое
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
Pavia
Дата 21.6.2010, 05:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



esperanto
предложи лучшее? Чем плохое?
PM MAIL   Вверх
esperanto
Дата 21.6.2010, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Pavia @ 21.6.2010,  05:12)
esperanto
предложи лучшее? Чем плохое?

Если данные состоят из одной буквы одного вида.

То проверям состоит ли подмассив из этой буквы.


О(1).

КМП достаточно хорош тут.
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
Pavia
Дата 21.6.2010, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



esperanto
Такое мало вероятно. По закону энтропии системам стремится к уменьшению оной.  Отсюда большинство данных у нас сжаты.
А так как обращение к массиву индексов не может выполняться за нулевое время, то это отъедает тики поэтому КМП не так уж хорош.
PM MAIL   Вверх
Pavia
Дата 21.6.2010, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(esperanto @  21.6.2010,  08:34 Найти цитируемый пост)
Если данные состоят из одной буквы одного вида.

А откуда ,ты на перед это знаешь? Тебе придется проверить это. А проверка O(n) никак не O(1). O - число сравнений.

Это сообщение отредактировал(а) Pavia - 21.6.2010, 20:13
PM MAIL   Вверх
newert
Дата 9.7.2010, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Алгоритм грубой силы и правда здесь будет достаточно эффективен.
Однако КМП можно смело использовать, не так уж и много времени отъест обращение к массиву
PM MAIL   Вверх
esperanto
Дата 9.7.2010, 09:23 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Pavia @ 21.6.2010,  20:06)
Цитата(esperanto @  21.6.2010,  08:34 Найти цитируемый пост)
Если данные состоят из одной буквы одного вида.

А откуда ,ты на перед это знаешь? Тебе придется проверить это. А проверка O(n) никак не O(1). O - число сравнений.

А с чего вы взяли что данные равноверятны. 

Они могут быть распределены по закону Вайбула, Паретта, Коши , да кого угодно.

Упоминание закона энтропии тут с родни профанации.
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
Polesinskij
Дата 1.11.2013, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Модератор: Сообщение скрыто.

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

maxim1000

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


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

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


 




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


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

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