def __init__(self, n, delta): delta_filter = delta / 2.0 delta_decode = delta / 2.0 self.s = 3 * (1 - int(math.ceil(math.log(delta_filter, 2)))) self.k = (1 + int(math.ceil(math.log(n)))) # print "RecGeneral({0})".format(self.k) self.n = n self.h = HashK(n**3, self.s) self.sketch = [ RecS(self.n, self.s, delta_decode) for i in xrange(self.k) ]
def __init__(self, n, delta): delta_filter = delta / 2.0 delta_decode = delta / 2.0 self.s = 3 * (1 - int(math.ceil(math.log(delta_filter, 2)))) self.k = (1 + int(math.ceil(math.log(n)))) # print "RecGeneral({0})".format(self.k) self.n = n self.h = HashK(n**3, self.s) self.sketch = [RecS(self.n, self.s, delta_decode) for i in xrange(self.k)]
def __init__(self, n, s, delta): delta_collision = delta / 2.0 self.cnt = 0 self.n = n self.s = s self.k = 1 - 2 * int(math.ceil(math.log(delta_collision, 2))) # print "RecS({0}, {1})".format(self.s, self.k) delta_decoder = delta / (2.0 * self.k * self.s) self.sketch = [[Rec1(n, delta_decoder) for j in xrange(2 * s)] for i in xrange(self.k)] self.hashes = [HashK(2 * s) for i in xrange(self.k)]
class RecGeneral: def __init__(self, n, delta): delta_filter = delta / 2.0 delta_decode = delta / 2.0 self.s = 3 * (1 - int(math.ceil(math.log(delta_filter, 2)))) self.k = (1 + int(math.ceil(math.log(n)))) # print "RecGeneral({0})".format(self.k) self.n = n self.h = HashK(n**3, self.s) self.sketch = [ RecS(self.n, self.s, delta_decode) for i in xrange(self.k) ] def copy(self): result = RecGeneral(self.n, 1.0) result.s = self.s result.k = self.k result.n = self.n result.h = self.h result.sketch = [self.sketch[i].copy() for i in xrange(self.k)] return result def update(self, ind, val): for i in xrange(self.k): if self.h.at(ind) % (2**i) == 0: self.sketch[i].update(ind, val) def sample(self): for i in xrange(self.k): result = self.sketch[self.k - 1 - i].recover() if len(result) > 0: ind = random.choice(result.keys()) return ind, result[ind] return 0, 0 def sum(self, rhs): result = self.copy() result.sketch = [ self.sketch[i].sum(rhs.sketch[i]) for i in xrange(rhs.k) ] return result
class RecGeneral: def __init__(self, n, delta): delta_filter = delta / 2.0 delta_decode = delta / 2.0 self.s = 3 * (1 - int(math.ceil(math.log(delta_filter, 2)))) self.k = (1 + int(math.ceil(math.log(n)))) # print "RecGeneral({0})".format(self.k) self.n = n self.h = HashK(n**3, self.s) self.sketch = [RecS(self.n, self.s, delta_decode) for i in xrange(self.k)] def copy(self): result = RecGeneral(self.n, 1.0) result.s = self.s result.k = self.k result.n = self.n result.h = self.h result.sketch = [self.sketch[i].copy() for i in xrange(self.k)] return result def update(self, ind, val): for i in xrange(self.k): if self.h.at(ind) % (2**i) == 0: self.sketch[i].update(ind, val) def sample(self): for i in xrange(self.k): result = self.sketch[self.k - 1 - i].recover() if len(result) > 0: ind = random.choice(result.keys()) return ind, result[ind] return 0, 0 def sum(self, rhs): result = self.copy() result.sketch = [self.sketch[i].sum(rhs.sketch[i]) for i in xrange(rhs.k)] return result