Ночные похождения. Построение на асме (fasm), обёртка на Си (VC). С оптимизацией пока что - косяки (от предложений, что и где улучшить не откажусь).... p.s. только не спрашивайте меня что такое суф. дерево....
Поскольку википедия ничего не сказала (Там на непонятном языке), я все-таки спрошу. Что это и для чего нужно? В нескольких простых словах.
Очень быстрый поиск (всех/самых длинных) подстрок в тексте, сохраненном как Suff.Tree, за счет немыслимого расхода памяти (обычно, порядка двух дюжин байт на один символ исходного текста). "Текст" может быть и бинарным. Обычно, используется как индекс/замена хэш-таблиц (линейное время поиска).
Не знаю... Куда торкнуло, туда и запостил. К тому же мне не очень понравился результат, над ним ещё думать надо много...
Есть поправочка: Код (Text): proc Find pattern,size ... mov edx,[edx+edi*4+link_st.p1] .3: ... Надо заменить на Код (Text): mov edx,[edx+edi*4+link_st.p2] .3: ... Иначе на большом алфавите, будет облом. Я попросту не компилировал текст после того как изменял поиск в узлах. Поганые привычки.... p.s. первый пост, перезалил...
Архиватор это скушно. Скажем так: 'для прикола написал'. Думал дальше функциональность развивать, сделать дерево для множества строк или скользящие окна. Но потом подумал: во первых скорость меня не радует, думал что быстрее получится (её бы хотя бы раза в полтора повысить), во вторых я ей пользоваться в обозримом будущем не собирался (да и не знаю что с ней делать можно полезного).... Так что пока просто лежит....
Если какой-нибудь хафман или LZ писать то как раз не сложная (несколько строк в этот же код добавить). А вот если нормальный архиватор, чьё сжатие меня хоть чуть чуть устраивает. То я сомневаюсь что я его придумаю, тем более при ограниченном времени. А сложных задач мне хватает выше крыши)) На архиватор просто времени жалко.
Proteus я тоже занимаюсь задачами аля миссия невыполнима, но даже, если не смогу решить, зато тренировка мозга хорошая)
У меня тут ещё графическая обёртка, завалялась. Правда писалась она в пьяном угаре, поэтому работает не очень хорошо.
Новая версия.... приспособлена для работы со множеством строк. Если раньше каждый вызов MakeTree создавал независимое дерево. Теперь получается общее дерево множества строк.....