<!-- Computer Generated File, Do Not Edit! -->
<link rel="stylesheet" href="/css/toc.css">
<div id="toc" class="nav toc hidden-print">

  <p id="overview">
    <a data-toggle="collapse" class="menu collapsed" href="#collapse_overview">Overview</a>
  </p>
  <div class="collapse" id="collapse_overview">
    <li><a href="{{site.docs_dir}}/TheChallenge.html">The Challenge</a></li>
    <li><a href="{{site.docs_dir}}/MajorSketchFamilies.html">The Major Sketch Families</a></li>
    <li><a href="{{site.docs_dir}}/SketchOrigins.html">Sketch Origins</a></li>
    <li><a href="{{site.docs_dir}}/SketchElements.html">Sketch Elements</a></li>
    <li><a href="{{site.docs_dir}}/KeyFeatures.html">Key Features</a></li>
    <li><a href="{{site.docs_dir}}/LargeScale.html">Large Scale Computing</a></li>
    <li><a href="{{site.docs_dir}}/Architecture.html">Architecture</a></li>
    <li><a href="{{site.docs_dir}}/OrderSensitivity.html">Notes on Order Sensitivity</a></li>
    <li><a href="{{site.docs_dir}}/Concurrency.html">Notes on Concurrency</a></li>
    <li><a href="{{site.docs_pdf_dir}}/DataSketches_deck.pdf">Overview Slide Deck</a></li>
  </div>

  <p id="research">
    <a data-toggle="collapse" class="menu collapsed" href="#collapse_research">Research</a>
  </p>
  <div class="collapse" id="collapse_research">
    <li><a href="{{site.docs_dir}}/Research.html">Research</a></li>
  </div>

  <p id="distinct-counting">
    <a data-toggle="collapse" class="menu collapsed" href="#collapse_distinct_counting">Distinct Counting</a>
  </p>
  <div class="collapse" id="collapse_distinct_counting">

    <p id="hyperloglog-sketches">
      <a data-toggle="collapse" class="menu collapsed" href="#collapse_hyperloglog_sketches">HyperLogLog Sketches</a>
    </p>
    <div class="collapse" id="collapse_hyperloglog_sketches">
      <li><a href="{{site.docs_dir}}/HLL/HLL.html">HLL Sketch</a></li>
      <li><a href="{{site.docs_dir}}/HLL/Hll_vs_Hllpp.html">HLL vs HLL++</a></li>
      <li><a href="{{site.docs_dir}}/HLL/HllJavaExample.html">HLL Sketch Java Example</a></li>
      <li><a href="{{site.docs_dir}}/HLL/HllPigUDFs.html">HLL Sketch Pig UDFs</a></li>
      <li><a href="{{site.docs_dir}}/HLL/HllHiveUDFs.html">HLL Sketch Hive UDFs</a></li>
      <li><a href="{{site.docs_dir}}/HLL/HllMap.html">HLL Map Sketch</a></li>
      <li><a href="{{site.docs_dir}}/HLL/HllSketchVsDruidHyperLogLogCollector.html">HLL Sketch vs Druid HyperLogLogCollector</a></li>
    </div>

    <p id="theta-sketches">
      <a data-toggle="collapse" class="menu collapsed" href="#collapse_theta_sketches">Theta Sketches</a>
    </p>
    <div class="collapse" id="collapse_theta_sketches">
      <li><a href="{{site.docs_dir}}/Theta/ThetaSketchFramework.html">Theta Sketch Framework</a></li>
      <li><a href="{{site.docs_dir}}/Theta/ConcurrentThetaSketch.html">Concurrent Theta Sketch</a></li>
      <li><a href="{{site.docs_dir}}/Theta/ThetaJavaExample.html">Theta Sketch Java Example</a></li>
      <li><a href="{{site.docs_dir}}/Theta/ThetaSparkExample.html">Theta Sketch Spark Example</a></li>

      <p id="kmv-tutorial">
        <a data-toggle="collapse" class="menu collapsed" href="#collapse_kmv_tutorial">KMV Tutorial</a>
      </p>
      <div class="collapse" id="collapse_kmv_tutorial">
        <li><a href="{{site.docs_dir}}/Theta/InverseEstimate.html">The Inverse Estimate</a></li>
        <li><a href="{{site.docs_dir}}/Theta/KMVempty.html">Empty Sketch</a></li>
        <li><a href="{{site.docs_dir}}/Theta/KMVfirstEst.html">First Estimator</a></li>
        <li><a href="{{site.docs_dir}}/Theta/KMVbetterEst.html">Better Estimator</a></li>
        <li><a href="{{site.docs_dir}}/Theta/KMVrejection.html">Rejection Rules</a></li>
        <li><a href="{{site.docs_dir}}/Theta/KMVupdateVkth.html">Update V(kth) Rule</a></li>
      </div>

      <p id="set-operations">
        <a data-toggle="collapse" class="menu collapsed" href="#collapse_set_operations">Set Operations</a>
      </p>
      <div class="collapse" id="collapse_set_operations">
        <li><a href="{{site.docs_dir}}/Theta/ThetaSketchSetOps.html">Set Operations</a></li>
      </div>

      <p id="accuracy">
        <a data-toggle="collapse" class="menu collapsed" href="#collapse_accuracy">Accuracy</a>
      </p>
      <div class="collapse" id="collapse_accuracy">
        <li><a href="{{site.docs_dir}}/Theta/ThetaAccuracy.html">Basic Accuracy</a></li>
        <li><a href="{{site.docs_dir}}/Theta/ThetaAccuracyPlots.html">Accuracy Plots</a></li>
        <li><a href="{{site.docs_dir}}/Theta/ThetaErrorTable.html">Relative Error Table</a></li>
        <li><a href="{{site.docs_dir}}/Theta/ThetaSketchSetOpsAccuracy.html">SetOp Accuracy</a></li>
        <li><a href="{{site.docs_dir}}/Theta/AccuracyOfDifferentKUnions.html">Unions With Different k</a></li>
      </div>

      <p id="size">
        <a data-toggle="collapse" class="menu collapsed" href="#collapse_size">Size</a>
      </p>
      <div class="collapse" id="collapse_size">
        <li><a href="{{site.docs_dir}}/Theta/ThetaSize.html">Theta Sketch Size</a></li>
      </div>

      <p id="speed">
        <a data-toggle="collapse" class="menu collapsed" href="#collapse_speed">Speed</a>
      </p>
      <div class="collapse" id="collapse_speed">
        <li><a href="{{site.docs_dir}}/Theta/ThetaUpdateSpeed.html">Update Speed</a></li>
        <li><a href="{{site.docs_dir}}/Theta/ThetaMergeSpeed.html">Merge Speed</a></li>
      </div>

      <p id="large-scale-computing">
        <a data-toggle="collapse" class="menu collapsed" href="#collapse_large_scale_computing">Large Scale Computing</a>
      </p>
      <div class="collapse" id="collapse_large_scale_computing">
        <li><a href="{{site.docs_dir}}/Theta/ThetaPigUDFs.html">Theta Sketch Pig UDFs</a></li>
        <li><a href="{{site.docs_dir}}/Theta/ThetaHiveUDFs.html">Theta Sketch Hive UDFs</a></li>
        <li><a href="{{site.docs_dir}}/DruidIntegration.html">Integration with Druid</a></li>
        <li><a href="{{site.docs_dir}}/Memory/MemoryPackage.html">Memory Package</a></li>
        <li><a href="{{site.docs_dir}}/Theta/ThetaPSampling.html"><i>p</i>-Sampling</a></li>
      </div>

      <p id="theta-sketch-theory">
        <a data-toggle="collapse" class="menu collapsed" href="#collapse_theta_sketch_theory">Theta Sketch Theory</a>
      </p>
      <div class="collapse" id="collapse_theta_sketch_theory">
        <li><a href="{{site.docs_pdf_dir}}/ThetaSketchFramework.pdf">Theta Sketch Framework (PDF)</a></li>
        <li><a href="{{site.docs_pdf_dir}}/SketchEquations.pdf">Sketch Equations (PDF)</a></li>
        <li><a href="{{site.docs_pdf_dir}}/DataSketches.pdf">DataSketches (PDF)</a></li>
        <li><a href="{{site.docs_dir}}/Theta/ThetaConfidenceIntervals.html">Confidence Intervals Notes</a></li>
        <li><a href="{{site.docs_dir}}/Theta/ThetaMergingAlgorithm.html">Merging Algorithm Notes</a></li>
        <li><a href="{{site.docs_dir}}/Theta/ThetaReferences.html">Theta References</a></li>
      </div>
    </div>

    <p id="tuple-sketches">
      <a data-toggle="collapse" class="menu collapsed" href="#collapse_tuple_sketches">Tuple Sketches</a>
    </p>
    <div class="collapse" id="collapse_tuple_sketches">
      <li><a href="{{site.docs_dir}}/Tuple/TupleOverview.html">Tuple Sketch Overview</a></li>
      <li><a href="{{site.docs_dir}}/Tuple/TupleJavaExample.html">Tuple Sketch Java Example</a></li>
      <li><a href="{{site.docs_dir}}/Tuple/TuplePigUDFs.html">Tuple Sketch Pig UDFs</a></li>
      <li><a href="{{site.docs_dir}}/Tuple/TupleHiveUDFs.html">Tuple Sketch Hive UDFs</a></li>
    </div>
  </div>

  <p id="most-frequent">
    <a data-toggle="collapse" class="menu collapsed" href="#collapse_most_frequent">Most Frequent</a>
  </p>
  <div class="collapse" id="collapse_most_frequent">
    <li><a href="{{site.docs_dir}}/Frequency/FrequencySketchesOverview.html">Frequency Sketches Overview</a></li>

    <p id="frequent-item-sketches">
      <a data-toggle="collapse" class="menu collapsed" href="#collapse_frequent_item_sketches">Frequent Item Sketches</a>
    </p>
    <div class="collapse" id="collapse_frequent_item_sketches">
      <li><a href="{{site.docs_dir}}/Frequency/FrequentItemsOverview.html">Frequent Items Overview</a></li>
      <li><a href="{{site.docs_dir}}/Frequency/FrequentItemsJavaExample.html">Frequent Items Java Example</a></li>
      <li><a href="{{site.docs_dir}}/Frequency/FrequentItemsPigUDFs.html">Frequent Items Pig UDFs</a></li>
      <li><a href="{{site.docs_dir}}/Frequency/FrequentItemsHiveUDFs.html">Frequent Items Hive UDFs</a></li>
      <li><a href="{{site.docs_dir}}/Frequency/FrequentItemsErrorTable.html">Frequent Items Error Table</a></li>
      <li><a href="{{site.docs_dir}}/Frequency/FrequentItemsReferences.html">Frequent Items References</a></li>
    </div>

    <p id="frequent-distinct-sketches">
      <a data-toggle="collapse" class="menu collapsed" href="#collapse_frequent_distinct_sketches">Frequent Distinct Sketches</a>
    </p>
    <div class="collapse" id="collapse_frequent_distinct_sketches">
      <li><a href="{{site.docs_dir}}/Frequency/FrequentDistinctTuplesSketch.html">Frequent Distinct Tuples Sketch</a></li>
    </div>
  </div>

  <p id="quantiles-and-histograms">
    <a data-toggle="collapse" class="menu collapsed" href="#collapse_quantiles_and_histograms">Quantiles And Histograms</a>
  </p>
  <div class="collapse" id="collapse_quantiles_and_histograms">
    <li><a href="{{site.docs_dir}}/Quantiles/QuantilesOverview.html">Quantiles Overview</a></li>
    <li><a href="{{site.docs_dir}}/Quantiles/QuantilesAccuracy.html">Quantiles Accuracy and Size</a></li>
    <li><a href="{{site.docs_dir}}/Quantiles/QuantilesJavaExample.html">Quantiles Sketch Java Example</a></li>
    <li><a href="{{site.docs_dir}}/Quantiles/QuantilesPigUDFs.html">Quantiles Sketch Pig UDFs</a></li>
    <li><a href="{{site.docs_dir}}/Quantiles/QuantilesHiveUDFs.html">Quantiles Sketch Hive UDFs</a></li>

    <p id="quantiles-studies">
      <a data-toggle="collapse" class="menu collapsed" href="#collapse_quantiles_studies">Quantiles Studies</a>
    </p>
    <div class="collapse" id="collapse_quantiles_studies">
      <li><a href="{{site.docs_dir}}/Quantiles/KLLSketch.html">New KLL sketch and comparison with DoublesSketch</a></li>
      <li><a href="{{site.docs_dir}}/Quantiles/KllSketchVsTDigest.html">KLL sketch vs t-digest</a></li>
      <li><a href="{{site.docs_dir}}/Quantiles/DruidApproxHistogramStudy.html">Druid Approximate Histogram</a></li>
      <li><a href="{{site.docs_dir}}/Quantiles/MomentsSketchStudy.html">Moments Sketch Study</a></li>
      <li><a href="{{site.docs_dir}}/Quantiles/QuantilesStreamAStudy.html">Quantiles StreamA Study</a></li>
    </div>

    <p id="quantiles-sketch-theory">
      <a data-toggle="collapse" class="menu collapsed" href="#collapse_quantiles_sketch_theory">Quantiles Sketch Theory</a>
    </p>
    <div class="collapse" id="collapse_quantiles_sketch_theory">
      <li><a href="{{site.docs_pdf_dir}}/Quantiles_KLL.pdf">Optimal Quantile Approximation in Streams</a></li>
      <li><a href="{{site.docs_dir}}/Quantiles/QuantilesReferences.html">Quantiles References</a></li>
    </div>
  </div>

  <p id="sampling">
    <a data-toggle="collapse" class="menu collapsed" href="#collapse_sampling">Sampling</a>
  </p>
  <div class="collapse" id="collapse_sampling">
    <li><a href="{{site.docs_dir}}/Sampling/ReservoirSampling.html">Reservoir Sampling</a></li>
    <li><a href="{{site.docs_dir}}/Sampling/ReservoirSamplingPerformance.html">Reservoir Sampling Performance</a></li>
    <li><a href="{{site.docs_dir}}/Sampling/ReservoirSamplingJava.html">Reservoir Sampling Java Example</a></li>
    <li><a href="{{site.docs_dir}}/Sampling/ReservoirSamplingPigUDFs.html">Reservoir Sampling Pig UDFs</a></li>
    <li><a href="{{site.docs_dir}}/Sampling/VarOptSampling.html">VarOpt Sampling</a></li>
    <li><a href="{{site.docs_dir}}/Sampling/VarOptSamplingJava.html">VarOpt Sampling Java Example</a></li>
    <li><a href="{{site.docs_dir}}/Sampling/VarOptPigUDFs.html">VarOpt Sampling Pig UDFs</a></li>
  </div>

  <p id="memory-package">
    <a data-toggle="collapse" class="menu collapsed" href="#collapse_memory_package">Memory Package</a>
  </p>
  <div class="collapse" id="collapse_memory_package">
    <li><a href="{{site.docs_dir}}/Memory/MemoryPackage.html">Memory Package</a></li>
    <li><a href="{{site.docs_dir}}/Memory/MemoryPerformance.html">Memory Package Performance</a></li>
  </div>

  <p id="command-line">
    <a data-toggle="collapse" class="menu collapsed" href="#collapse_command_line">Command Line</a>
  </p>
  <div class="collapse" id="collapse_command_line">
    <li><a href="{{site.docs_dir}}/CommandLine/CommandLine.html">Creating Command Line Executables</a></li>
  </div>

  <p id="who-uses-and-license">
    <a data-toggle="collapse" class="menu collapsed" href="#collapse_who_uses_and_license">Who Uses And License</a>
  </p>
  <div class="collapse" id="collapse_who_uses_and_license">
    <li><a href="{{site.docs_dir}}/WhoUses.html">Who Uses</a></li>
    <li><a href="/LICENSE.html">License</a></li>
  </div>
</div>
<script>
  (function () {

    var findLineItem = function (path) {
      return document.querySelector(`[href="${path}"]`);
    };

    var highlighLineItem = function (element) {
      element.classList.add('highlight');
    };

    var checkHasClass = function (element, className) {
      return element.className.split(' ').find(function (item) { return item === className || '' })
    }

    var findAllCollapseParents = function (element) {
      var collapseMenus = [];
      var elementPointer = element;
      while (elementPointer !== document.body) {
        if (checkHasClass(elementPointer, 'collapse')) {
          collapseMenus.push(elementPointer);
        }
        elementPointer = elementPointer.parentElement
      }
      return collapseMenus
    };

    var findMatchingCollapseMenu = function (collapseItem) {
      return document.querySelector(`[href="#${collapseItem.id}"]`);
    };

    var findAllParentMenus = function (element) {
      var parentMenus = []
      var elementPointer = element;
      while (elementPointer !== document.body) {
        if (elementPointer.className.split(' ').indexOf('menu') > -1) {
          parentMenus.push(elementPointer);
        }
        elementPointer = elementPointer.parentElement;
      }
      return parentMenus;
    }

    var openMenuItem = function (element) {
      element.click();
    };

    var openAllFromList = function (elementList) {
      elementList.forEach(function (element) {
        console.log(element)
        openMenuItem(findMatchingCollapseMenu(element))
      });
    };

    var highlightAndOpenMenu = function () {
      var currentLineItem = findLineItem(document.location.pathname);
      highlighLineItem(currentLineItem)
      openAllFromList(findAllCollapseParents(currentLineItem));
    };

    $(highlightAndOpenMenu);

  }());
</script>

