算法设计串匹配问题实验实现 BF 算法的c++代码
时间: 2024-10-17 09:11:48 浏览: 68
串匹配BF算法 蛮力法——C++代码
5星 · 资源好评率100%
Bloom Filter是一种空间效率很高的概率型数据结构,用于检测元素是否存在集合中,而不是精确查找。如果你想用BF算法(Bloom Filters)实现字符串匹配问题,通常是在搜索引擎或大规模数据去重场景中。下面是一个简单的C++代码示例,展示了如何使用BF算法检测一个字符串是否在一个给定集合中:
```cpp
#include <vector>
#include <cstdlib>
#include <ctime>
class BloomFilter {
public:
BloomFilter(size_t size, uint8_t hash_count) : m_size(size), m_bits(new bool[size]), m_hashes(hash_count) {}
void add(const std::string& str) {
for (uint8_t i = 0; i < m_hashes; ++i) {
uint32_t index = hash(str, i);
m_bits[index] = true;
}
}
bool contains(const std::string& str) const {
for (uint8_t i = 0; i < m_hashes; ++i) {
uint32_t index = hash(str, i);
if (!m_bits[index]) return false;
}
return true;
}
private:
size_t m_size;
std::vector<bool> m_bits;
uint8_t m_hashes;
// 使用哈希函数将字符串转换成数组索引
uint32_t hash(const std::string& str, uint8_t idx) const {
uint32_t seed = std::hash<std::string>()(str);
return static_cast<uint32_t>(std::hash<uint32_t>()(seed + idx) % m_size);
}
};
int main() {
size_t bloom_filter_size = 100000; // 例如设置大小为10万
uint8_t hash_count = 7; // 一般选取几个好的哈希函数
BloomFilter bf(bloom_filter_size, hash_count);
// 添加一些字符串到过滤器
std::vector<std::string> patterns = {"pattern1", "pattern2", "target"};
for (const auto& pattern : patterns) {
bf.add(pattern);
}
// 检查字符串是否存在于过滤器中
std::string test_str = "target";
if (bf.contains(test_str)) {
std::cout << test_str << " may be present.\n";
} else {
std::cout << test_str << " is not likely present.\n";
}
return 0;
}
```
阅读全文