Реально ли ускорить Instr?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.10.2005 (Чт) 5:31

GSerg, у него файл сигнатур текстовый, и сами сигнатуры там в хексе: http://bbs.vbstreets.ru/viewtopic.php?p=154980#154980
Т.е. без перевода из хекса в строку/байтовый массив никак.
Изображение

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 06.10.2005 (Чт) 10:43

tyomitch писал(а):http://algolist.manual.ru/search/esearch/index.php


tyomitch, я именно эту ссылочку и имел в виду :)

Интересно, все-таки, по какому алгоритму InStr работает?..
Быть... или не быть. Вот. В чём вопрос?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.10.2005 (Чт) 11:43

99% что MS там не мудрили особо, и поставили SCASW ;-)
Вряд ли тот, кому нужно быстро найти подстроку в гигабайтной строке, будет писать это на VB :-)
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.10.2005 (Чт) 11:52

А какие могут быть методы, если исходная строка произвольна? Только перебор.
Lasciate ogni speranza, voi ch'entrate.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 06.10.2005 (Чт) 12:01

По-моему, мы друг друга не понимаем :)

По порядку: InStr ищет одну строку произвольной длины в другой строке произвольной длины. Если строка, которую ищут, имеет длину, больше 1, кроме SCAS нужно что-то еще - нужно же проверять не один символ, а несколько. Простейший алгоритм - пробежать по всем элементам строки, в которой ищешь, если символ совпадает с первым символом строки поиска - проверить следующий символ на совпадение со вторым символом строки поиска, и т. д. Если InStr работает по такому алгоритму, его, очевидно, можно улучшить - например, если строка поиска "abc", а 3ий символ строки, в которой ты ищешь - "d", то ни в 1ой, ни во 2ой, ни в 3ей позиции строка поиска находится не может. Я говорил именно о таком ускорении, с помощью другого алгоритма.
Быть... или не быть. Вот. В чём вопрос?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.10.2005 (Чт) 12:25

А, понял.
Я думаю, это учтено, это легко описать логикой и алгоритмом.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.10.2005 (Чт) 13:15

alibek писал(а):А какие могут быть методы, если исходная строка произвольна? Только перебор.

Перебор-то перебор, но и его можно существенно по-разному организовать. Сравни оценки сложности алгоритмов в таблице на http://algolist.manual.ru/search/esearch/index.php
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 06.10.2005 (Чт) 16:04

tyomitch писал(а):GSerg, у него файл сигнатур текстовый, и сами сигнатуры там в хексе: http://bbs.vbstreets.ru/viewtopic.php?p=154980#154980
Т.е. без перевода из хекса в строку/байтовый массив никак.


IMHO а что мешает иметь изначально бинарный файл сигнатур, чтобы сразу исключить все муки с их переводом? Причем это и проще - все сигнатуры держать в массиве, который и сбрасывать в файл...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 44

    TopList