Programa Original C
Using c Syntax Highlighting
- void HORSPOOL(char *tupla, int mida_tupla, char *cadena, int mida_cadena) {
- int j, bmBc[ASIZE];
- char c;
- /* Preprocessing */
- preBmBc(tupla, mida_tupla, bmBc);
- /* Searching */
- j = 0;
- while (j <= mida_cadena - mida_tupla) {
- c = cadena[j + mida_tupla - 1];
- if (tupla[mida_tupla - 1] == c && memcmp(tupla, cadena + j, mida_tupla - 1) == 0)
- OUTPUT(j);
- j += bmBc[c];
- }
- }
- void preBmBc(char *tupla, int mida_tupla, int bmBc[]) {
- int i;
- for (i = 0; i < ASIZE; ++i)
- bmBc[i] = mida_tupla;
- for (i = 0; i < mida_tupla - 1; ++i)
- bmBc[tupla[i]] = mida_tupla - i - 1;
- }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Mi Horspool en "mi" Perl...
Using perl Syntax Highlighting
- my ( $j, $c, $k );
- #### Preprocessat
- preBmBc();
- #### Cerca
- $j = 0;
- while ( $j <= $mida_cadena - $mida_tupla ) {
- $c = $cadena[ $j + $mida_tupla - 1 ];
- $k = $j + $mida_tupla - 1;
- my $part_a_comparar = join( '', @cadena[ $j .. $k ] );
- if ( ( $tupla[ $mida_tupla - 1 ] eq $c ) and ( $part_a_comparar eq $tupla ) ) {
- $trobada = 1;
- $freq_trobades = $freq_trobades + 1; # augmentem la freqüència
- push( @posicions, $j );
- }
- $j = $j + $bmbc{$c};
- }
- sub preBmBc() #ordre ==> a c g t
- {
- %bmbc = (
- 'A' => $mida_tupla,
- 'C' => $mida_tupla,
- 'G' => $mida_tupla,
- 'T' => $mida_tupla,
- );
- for ( my $i = 0; $i < $mida_tupla - 1; ++$i ) {
- $bmbc{ $tupla[$i] } = $mida_tupla - $i - 1;
- }
- } # sub preBmBc
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4