internal CountMinSketch(CountMinSketchState state) { this.epsilon = state.Epsilon; this.delta = state.Delta; this.Width = (uint)(Math.Ceiling(Math.E / state.Epsilon)); this.Depth = (uint)(Math.Ceiling(Math.Log(1 / state.Delta))); lock (_lock) { this.Matrix = state.Matrix; } this.Hash = Defaults.GetDefaultHashAlgorithm(); }
public CountMinSketch Deserialize(Stream stream) { using (var br = new BinaryReader(stream)) { int dataFormatMajorVersion = br.ReadUInt16(); int dataFormatMinorVersion = br.ReadUInt16(); AssertDataVersionCanBeRead(dataFormatMajorVersion, dataFormatMinorVersion); var count = br.ReadUInt64(); var epsilon = br.ReadDouble(); var delta = br.ReadDouble(); var width = (uint)(Math.Ceiling(Math.E / epsilon)); var depth = (uint)(Math.Ceiling(Math.Log(1 / delta))); var matrix = new ulong[depth][]; for (var i = 0; i < depth; i++) { matrix[i] = new ulong[width]; for (var j = 0; j < width; j++) { var element = br.ReadUInt64(); matrix[i][j] = element; } } var data = new CountMinSketchState { Count = count, Epsilon = epsilon, Delta = delta, Matrix = matrix }; var result = new CountMinSketch(data); return(result); } }