@@ -16,19 +16,18 @@ void DNA_Analyzer::RabinKarpAlgorithm(const std::filesystem::path& path_1, const
1616 std::vector<std::size_t > hash_samp (samp_size + 1 , 0 );
1717 CalculateMassHash (samp, hash_samp, samp_size, exp);
1818
19- for (std::size_t i = 0 ; i + samp_size - 1 < text_size; ++i ) {
20- std::size_t hash_curr = (hash_text[i + samp_size] + rk_mod - hash_text[i ]) % rk_mod;
21- if ((hash_curr == (hash_samp[samp_size] * exp[i ] % rk_mod)) && text.substr (i , samp_size) == samp) {
22- std::cout << i << " " ;
19+ for (std::size_t idx = 0 ; idx + samp_size - 1 < text_size; ++idx ) {
20+ std::size_t hash_curr = (hash_text[idx + samp_size] + rk_mod - hash_text[idx ]) % rk_mod;
21+ if ((hash_curr == (hash_samp[samp_size] * exp[idx ] % rk_mod)) && text.substr (idx , samp_size) == samp) {
22+ std::cout << idx << " " ;
2323 }
2424 }
2525 std::cout << std::endl;
2626}
2727
2828void DNA_Analyzer::CalculateMassHash (const std::string &src, std::vector<std::size_t > &hash, const std::size_t size, const std::vector<std::size_t > &exp) {
29- static std::unordered_map<char , std::size_t > code{{' A' , 1 }, {' C' , 2 }, {' G' , 3 }, {' T' , 4 }};
3029 for (std::size_t i = 0 ; i < size; ++i) {
31- hash[i + 1 ] = (hash[i] + code[ src[i] ] * exp[i]) % rk_mod;
30+ hash[i + 1 ] = (hash[i] + src[i] * exp[i]) % rk_mod;
3231 }
3332}
3433
0 commit comments