#pragma once
#include <vector>
class CountMinSketch
{
public:
CountMinSketch(int w, int d) :width(w), depth(d), table(d, std::vector<int>(w, 0)){}
~CountMinSketch();
void update(int item) {
for (int i = 0; i < depth; ++i)
{
table[i][hashFunc(item + i) % width]++;
}
}
void update(std::string item) {
for (int i = 0; i < depth; ++i)
{
table[i][hashFuncSring(item) % width]++;
}
}
int estimateFrequency(int item) {
int minFrequency = INT_MAX;
for (int i = 0; i < depth; i++) {
minFrequency = std::min(minFrequency, table[i][hashFunc(item + i) % width]);
}
return minFrequency;
}
int estimateFrequency(std::string item) {
int minFrequency = INT_MAX;
for (int i = 0; i < depth; i++) {
minFrequency = std::min(minFrequency, table[i][hashFuncSring(item) % width]);
}
return minFrequency;
}
private:
int width, depth;
std::vector<std::vector<int>> table;
std::hash<int> hashFunc;
std::hash<std::string> hashFuncSring;
};
CountMinSketch::~CountMinSketch()
{
}
CountMinSketch C++实现
最新推荐文章于 2024-09-11 09:57:21 发布