» »

[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.

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 ()

Bojevnik ::

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 ::

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] - Atmel AVR

Oddelek: Programiranje
71494 (520) blay44
»

[C] LPC1343 - UART - AT commands

Oddelek: Programiranje
91127 (1017) JanezovJanez
»

C in funkcije ter #define

Oddelek: Programiranje
463938 (2299) misek
»

priklop lcd preko i2c

Oddelek: Elektrotehnika in elektronika
141503 (1272) cefizl88
»

c++ two dimensional array v classu

Oddelek: Programiranje
111397 (1200) Senitel

Več podobnih tem