Forum » Programiranje » [C#] Horspoolov algoritem - predprocesiranje
[C#] Horspoolov algoritem - predprocesiranje
urosz ::
Implementirat moram Horspoolov algoritem za iskanje vzorca v besedilu in ne vem kako je najbolj elegantna implementacija za predprocesiranje.
Torej iščem zgolj idejo, kako najbolj elegantno sestavit tako tabelo, ki nastane pri pred procesiranju. Predvsem me zanima v kakšni obliki (polje, List, ...) naj predstavim tabelo, sam algoritem mi je jasen
rabil bi neke vrste asociativnostno polje, kot recimo omogoča php..
Preprocesiranje karakteristike slabega znaka je enostavno. Za vsak znak abecede , to je za vsak znak, ki nastopa v tekstu, poiščemo absolutno vrednost odmika od skrajno desnega znaka vzorca. Če se znak v vzorcu ne pojavlja, dobi vrednost odmika dolžino vzorca m.
ABACABA
A = 2;
B = 1;
C = 3;
vsi ostali: 7;
Torej iščem zgolj idejo, kako najbolj elegantno sestavit tako tabelo, ki nastane pri pred procesiranju. Predvsem me zanima v kakšni obliki (polje, List, ...) naj predstavim tabelo, sam algoritem mi je jasen
rabil bi neke vrste asociativnostno polje, kot recimo omogoča php..
- spremenil: urosz ()
egonk ::
v c-ju gre recimo takole
int off[256]; for(i=0; i<256; ++i) off[i] = 7; off['A'] = 2; off['B'] = 1; off['C'] = 3;da dobiš ven: off[(uint8_t)chr]
urosz ::
@Bojevnik: hvala, samo mam nova navodila, da mora biti c++, ne c#, tako da IDictionary odpade. pa tudi vprašanje je, kako je zadeva hitra če bi vključil tole.
@egonk: kaj pa če nabor ni zgolj 256 znakov? Če bi vzel zgolj angleško abesedo, potem bi šlo ja.
ty ;)
@egonk: kaj pa če nabor ni zgolj 256 znakov? Če bi vzel zgolj angleško abesedo, potem bi šlo ja.
ty ;)
egonk ::
Skonvertaj v utf8 in potem narediš kar binarno iskanje (256 = bajt -> uint8_t). Skratka, izhod iz utf8 privzameš, da je tipa uint8_t*
Zgodovina sprememb…
- spremenil: egonk ()
fiction ::
Jezik v bistvu tukaj ni relevanten. C++ v .NET okolju pa lahko uporabljaš zadeve, ki implementirajo IDictionary, sicer pa najbrž lahko uporabiš zadevo iz STL (std::map, če se ne motim).
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C] - Atmel AVROddelek: Programiranje | 1494 (520) | blay44 |
» | [C] LPC1343 - UART - AT commandsOddelek: Programiranje | 1127 (1017) | JanezovJanez |
» | C in funkcije ter #defineOddelek: Programiranje | 3938 (2299) | misek |
» | priklop lcd preko i2cOddelek: Elektrotehnika in elektronika | 1503 (1272) | cefizl88 |
» | c++ two dimensional array v classuOddelek: Programiranje | 1397 (1200) | Senitel |