Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26170
Рейтинг: 2127
#166: 2010-04-28 10:31:47 ЛС | профиль | цитата
Леонид писал(а):
не понятно почему

И чего там непонятного, так и должно быть -- при меньшем количестве букв, меньше максимальное относительное смещение, дольше поиск, а алгоритм-то не шибко короткий, вот и тратит время на лишние операции, с той же таблицей, например. Но ни в одном случае (кроме поиска одного символа), он не отличался сильно от asm-кода на Intel процессорах в самом худшем случае (у меня при двух символах)
карма: 22

0
Ответов: 8930
Рейтинг: 823
#167: 2010-04-28 20:41:15 ЛС | профиль | цитата
nesco, захотелось сравнить прямолинейный поиск - оказалось чистое время поиска всего в два раза больше, чем у штатного. code_18008.txt
карма: 19

0
файлы: 2position.jpg [70.5KB] [176], code_18008.txt [2.5KB] [234]
Разработчик
Ответов: 26170
Рейтинг: 2127
#168: 2010-04-28 21:10:10 ЛС | профиль | цитата
Ага, на длинных словах , аж на порядок, уступает АБМ
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#169: 2010-05-01 12:16:50 ЛС | профиль | цитата
nesco, зря ты послушался Assasin
Идея алгоритма БМ-поиска в том, что сравнению подвергаются не первые, а последние символы образца Р и очередного фрагмента строки S. Если они не равны, то сдвиг в строке S осуществляется сразу на всю длину образца. Если последние символы равны, то сравнению подвергаются предпоследние символы, и т. д. При несовпадении очередных символов величина сдвига извлекается из таблицы D, которая, таким образом, выполняет ключевую роль в этом алгоритме. Заполнение таблицы происходит на основе конкретной строки-образца Р следующим образом. Размер таблицы определяется размером алфавита, то есть количеством кодов символов, которые могут появляться в тексте. В этом случае под таблицу D память длиной, равной длине кодовой таблицы ASCII. Таким образом, строки S и Р могут содержать любые символы. Первоначально все байты кодовой таблицы заполняются значением, равным длине строки-образца для поиска Р. Далее последовательно извлекаются символы строки-образца Р начиная с первого. Для каждого символа определяется позиция его самого правого вхождения в строку-образец Р. Это значение и заносится в таблицу D на место, соответствующее этому символу


------------ Дoбавленo в 12.16:
Выходит правильным был твой первый вариант БМ
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#170: 2010-05-01 12:50:10 ЛС | профиль | цитата
Tad писал(а):
зря ты послушался Assasin-а

Он тут совсем не причем, это немного другой вариант алгоритма. И если бы я не нашел его, как реализацию к математическому обоснованию, я бы не послушал Assasin-а и не поставил бы его
Tad писал(а):
Выходит правильным был твой первый вариант БМ

Скорость поиска этого варианта ниже (почти, в два раза), чем последнего при любых количествах поисковых символов
карма: 22

0
170
Сообщение
...
Прикрепленные файлы
(файлы не залиты)