You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by le...@apache.org on 2021/01/10 23:47:26 UTC

[datasketches-java] 02/08: Fix conflicts with ReqExperiment

This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch ReqExperiment
in repository https://gitbox.apache.org/repos/asf/datasketches-java.git

commit eb97863d0a790de8feec06a3b79e9c09d891dfad
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Sun Jan 10 14:24:27 2021 -0800

    Fix conflicts with ReqExperiment
---
 .../org/apache/datasketches/req/ReqSketch.java     | 50 ++++++++++++++++++----
 1 file changed, 41 insertions(+), 9 deletions(-)

diff --git a/src/main/java/org/apache/datasketches/req/ReqSketch.java b/src/main/java/org/apache/datasketches/req/ReqSketch.java
index 9b99717..81039ac 100644
--- a/src/main/java/org/apache/datasketches/req/ReqSketch.java
+++ b/src/main/java/org/apache/datasketches/req/ReqSketch.java
@@ -39,17 +39,17 @@ import org.apache.datasketches.memory.Memory;
  * <ul>
  * <li>The algorithm requires no upper bound on the stream length.
  * Instead, each relative-compactor counts the number of compaction operations performed
- * so far (via variable state). Initially, the relative-compactor starts with 3 sections.
- * Each time the number of compactions (variable state) exceeds 2^{numSections - 1}, we double numSections.
- * Note that after merging the sketch with another one variable state may not correspond to the number of
- * compactions performed at a particular level, however, since the state variable never exceeds
- * the number of compactions, the guarantees of the sketch remain valid.</li>
+ * so far (via variable state). Initially, the relative-compactor starts with INIT_NUMBER_OF_SECTIONS.
+ * Each time the number of compactions (variable state) exceeds 2^{numSections - 1}, we double
+ * numSections. Note that after merging the sketch with another one variable state may not correspond
+ * to the number of compactions performed at a particular level, however, since the state variable
+ * never exceeds the number of compactions, the guarantees of the sketch remain valid.</li>
  *
  * <li>The size of each section (variable k and sectionSize in the code and parameter k in
  * the paper) is initialized with a value set by the user via variable k.
  * When the number of sections doubles, we decrease sectionSize by a factor of sqrt(2).
  * This is applied at each level separately. Thus, when we double the number of sections, the
- * nominal compactor size increases by a factor of approx. sqrt(2) (up to rounding issues).</li>
+ * nominal compactor size increases by a factor of approx. sqrt(2) (+/- rounding).</li>
  *
  * <li>The merge operation here does not perform "special compactions", which are used in the paper
  * to allow for a tight mathematical analysis of the sketch.</li>
@@ -74,9 +74,11 @@ import org.apache.datasketches.memory.Memory;
 public class ReqSketch extends BaseReqSketch {
   //static finals
   private static final String LS = System.getProperty("line.separator");
-  static final int INIT_NUMBER_OF_SECTIONS = 3;
-  static final int MIN_K = 4;
-  private static final double relRseFactor = sqrt(0.0512 / INIT_NUMBER_OF_SECTIONS);
+  static byte INIT_NUMBER_OF_SECTIONS = 3; // TODO: restore to final after eval
+  static int MIN_K = 4; // TODO: restore to final after eval
+  static float NOM_CAP_MULT = 2f; // TODO: restore to final after eval
+  private static boolean LAZY_COMPRESSION = true; //TODO: restore to final after eval
+  private static double relRseFactor; //TODO: restore final: = sqrt(0.0512 / INIT_NUMBER_OF_SECTIONS);
   private static final double fixRseFactor = .06;
   //finals
   private final int k;  //user config, default is 12 (1% @ 95% Conf)
@@ -96,6 +98,34 @@ public class ReqSketch extends BaseReqSketch {
   private final CompactorReturn cReturn = new CompactorReturn(); //used in compress()
 
   /**
+   * Temporary ctor for evaluation
+   * @param k blah
+   * @param highRankAccuracy blah
+   * @param reqDebug blah
+   * @param initNumSections blah
+   * @param minK blah
+   * @param nomCapMult blah
+   * @param lazyCompression blah
+   */
+  public ReqSketch(final int k, final boolean highRankAccuracy, final ReqDebug reqDebug,
+      final byte initNumSections, final int minK, final float nomCapMult,
+      final boolean lazyCompression) {
+    checkK(k);
+    this.k = k;
+    hra = highRankAccuracy;
+    retItems = 0;
+    maxNomSize = 0;
+    totalN = 0;
+    this.reqDebug = reqDebug;
+    INIT_NUMBER_OF_SECTIONS = initNumSections; //was 3
+    relRseFactor = sqrt(0.0512 / initNumSections);
+    MIN_K = minK; //was 4
+    NOM_CAP_MULT = nomCapMult; //was 2
+    LAZY_COMPRESSION = lazyCompression; //was true
+    grow();
+  }
+
+  /**
    * Normal Constructor used by ReqSketchBuilder.
    * @param k Controls the size and error of the sketch. It must be even and in the range
    * [4, 1024], inclusive.
@@ -185,6 +215,7 @@ public class ReqSketch extends BaseReqSketch {
         compactors.get(h + 1).getBuffer().mergeSortIn(promoted);
         retItems += cReturn.deltaRetItems;
         maxNomSize += cReturn.deltaNomSize;
+        if (LAZY_COMPRESSION && retItems < maxNomSize) { break; }
       }
     }
     aux = null;
@@ -514,6 +545,7 @@ public class ReqSketch extends BaseReqSketch {
     retItems++;
     totalN++;
     if (retItems >= maxNomSize) {
+      buf.sort();
       compress();
     }
     aux = null;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org