Сейчас на форуме: Magister Yoda, subword, rtsgreg1989 (+9 невидимых) |
eXeL@B —› Основной форум —› Нужен алгоритм |
Посл.ответ | Сообщение |
|
Создано: 04 июля 2008 09:22 · Личное сообщение · #1 |
|
Создано: 04 июля 2008 09:37 · Личное сообщение · #2 Вот мой алго на си. Требует доработки и оптимизации, но работает При желании его можно скомпилить в базонезависимый вариант и выложить в соседнем топике fbfa_03.07.2008_CRACKLAB.rU.tgz - BinarySearch.txt ----- все багрепорты - в личные сообщения |
|
Создано: 04 июля 2008 09:58 · Личное сообщение · #3 HandMill пишет: Вот мой алго на си. Уважаемый HandMill я Вас безмерно уважаю но все таки про алгоритм поиска по HandMill я весь инет перерыл но не нашел инфы. Еще раз спасибо но нужно что то покруче чем просто перебор я конечно же имею в виду скорость и устойчивость от размера искомой строки и основного массива. |
|
Создано: 04 июля 2008 10:01 · Поправил: 4kusNick · Личное сообщение · #4 |
|
Создано: 04 июля 2008 10:05 · Поправил: Medsft · Личное сообщение · #5 |
|
Создано: 04 июля 2008 11:21 · Личное сообщение · #6 |
|
Создано: 04 июля 2008 11:42 · Поправил: Medsft · Личное сообщение · #7 |
|
Создано: 04 июля 2008 11:56 · Личное сообщение · #8 Medsft пишет: конкретным видам алго используемых на практике участниками форума ну не знаю, как кто - я просто проверяю по DWORD'у и если он совпадает, то проверяю весь кусок памяти.. прекрасно компилируется VS в код с использованием REP STOS. Реализация нужна или это не достойно? ----- invoke OpenFire |
|
Создано: 04 июля 2008 11:58 · Личное сообщение · #9 Творил годика два назад типа этого. Юзается "?" вместо 1 символа, а не "??". MemC - так, не оптимизированый прототипчик, мона юзать pbyte() и т.п. Function MemC(Var Buffer; xpos : LongWord) : Char; Var Xchar : Char; Begin asm push edi lea edi,Buffer mov edi,dword ptr [edi] add edi,xpos mov al,byte ptr [edi] mov Xchar,al pop edi end; MemC:=Xchar; End; Function FindMaskedCode(seq : String; buf : Pointer; bsize,firstpos : LongWord) : LongWord; Var found : Boolean; i1 : LongWord; i2,lsize : Word; Begin lsize:=length(seq); i2:=0; found:=false; for i1:=firstpos to bsize-1do begin if(MemC(buf^,i1)=seq[1])or(seq[1]='?')then for i2:=2to lsize do if(seq[i2]<>'?')and(MemC(buf^,i1+i2-1)<>seq[i2])then break; if i2>lsize then begin found:=true; break end; end; if not found then i1:=0; FindMaskedCode:=i1; End; ----- От многой мудрости много скорби, и умножающий знание умножает печаль |
|
Создано: 04 июля 2008 12:07 · Личное сообщение · #10 |
|
Создано: 04 июля 2008 13:16 · Личное сообщение · #11 |
|
Создано: 04 июля 2008 14:02 · Личное сообщение · #12 |
|
Создано: 04 июля 2008 16:16 · Личное сообщение · #13 Вкусно разобрана тема регулярных выражений с классами на С++ (Лаборатория ЧПУ "СТАНКИН") --> Link 1<-- http://www.ncsystems.ru/ru/programming/libs/regexp_filter/ --> Link 2<-- http://www.ncsystems.ru/ru/programming/libs/search_regexp/ --> Link 3<-- http://www.ncsystems.ru/ru/programming/libs/regexp_utility/ ----- 127.0.0.1, sweet 127.0.0.1 |
|
Создано: 04 июля 2008 16:37 · Личное сообщение · #14 OKOB Ничего так сайт , подобных сайтов очень много =) уже видел на си на делфе , на си шарп на бэйсике даже =) , а на МАСМ нету , вообще тема легкая , просто так лениво все это разбирать , как рутинная работа. Или хотябы либ статическую на си делали с определением функций. Кто знает достойные продукты арены REGEXP ? или их просто нет =) мне тут советовали как то на си шарп. Выглядела супер по возможностям а на деле отстой, половино не работает коректно )))) а потом тот кто советовал сам выкинул этот код. Вручную парсинг сделал и все. Vovan666 ай неважно , там ссылка сюда всеравно идет , по поиску найдут кому надо. ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 04 июля 2008 23:21 · Личное сообщение · #15 mak, regex работает с ascii текстом а не байтами. Минимальная версия - regex.c из вроде из glibc компилится на VC++ после мелких фиксов. Ессно google найдёт тебе много производных. Ну а про оригинальный вопрос - частный случай когда только один pattern (шаблон) можно реализовать поиском первого байта и последующей проверкой всей последовательности. Это, думаю, самый простой и быстрый вариант. На много быстрее regex, кста. Ну а обобщённая версия задачи, с несколькими шаблонами и модификаторами типа ?+* - тут совсем другой разговор. Тут будет либо быстро и простые шаблоны, либо медленно с гибким интерпретатором сложного выражения - а ля полный posix regex. |
|
Создано: 05 июля 2008 13:32 · Поправил: Wyfinger · Личное сообщение · #16 |
|
Создано: 05 июля 2008 17:02 · Личное сообщение · #17 |
eXeL@B —› Основной форум —› Нужен алгоритм |