Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
HammingBitParalelism.h
Go to the documentation of this file.
1
6#pragma once
7
8#include <exception>
9#include <string/LinearString.h>
10
11#include "BitParalelism.h"
12
13namespace stringology {
14
15namespace simulations {
16
18public:
19 template <class SymbolType>
20 static ext::set<unsigned int> search(const string::LinearString<SymbolType> & text, const string::LinearString<SymbolType> & pattern, unsigned int errors);
21};
22
23
24template <class SymbolType>
26 // preparation stage
27 ext::set<SymbolType> common_alphabet = text.getAlphabet();
28 common_alphabet.insert(pattern.getAlphabet().begin(), pattern.getAlphabet().end());
29
31
32 // computation part
34
36 for(unsigned int i=0; i<=errors; i++) {
37 B_vectors.push_back(ext::vector<bool>(pattern.getContent().size(), 1));
38 }
39
40 for(unsigned int i=0; i<text.getContent().size(); i++) {
41 ext::vector< ext::vector<bool> > previous_B_vectors = B_vectors;
42
43 B_vectors[0] = (B_vectors[0] << 1) | D_vectors[text.getContent()[i]];
44
45 for(unsigned int j=1; j<=errors; j++) {
46 B_vectors[j] = ( (B_vectors[j] << 1) | D_vectors[text.getContent()[i]] ) & (previous_B_vectors[j-1] << 1);
47 }
48
49 for(const auto & B_vector : B_vectors) {
50 if ( ! B_vector [ pattern.getContent ( ).size ( ) - 1 ] ) {
51 result.insert(i + 1);
52 break;
53 }
54 }
55 }
56
57 return result;
58}
59
60} // namespace simulations
61
62} // namespace stringology
63
Class extending the map class from the standard library. Original reason is to allow printing of the ...
Definition: map.hpp:48
Definition: set.hpp:44
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
Linear string.
Definition: LinearString.h:57
const ext::set< SymbolType > & getAlphabet() const &
Definition: LinearString.h:103
const ext::vector< SymbolType > & getContent() const &
Definition: LinearString.h:238
static ext::map< SymbolType, ext::vector< bool > > constructDVectors(const ext::set< SymbolType > &alphabet, const string::LinearString< SymbolType > &pattern)
Definition: BitParalelism.h:22
Definition: HammingBitParalelism.h:17
static ext::set< unsigned int > search(const string::LinearString< SymbolType > &text, const string::LinearString< SymbolType > &pattern, unsigned int errors)
Definition: HammingBitParalelism.h:25
int i
Definition: AllEpsilonClosure.h:118
for(const StateType &state :fsm.getStates()) renamingData.insert(std Rename::RenamedAutomaton< T > result(renamingData.at(fsm.getInitialState()))
Definition: Rename.h:253
Definition: ArithmeticCompression.h:18