<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Algorithms</journal-id>
<journal-title>Algorithms</journal-title>
<issn pub-type="epub">1999-4893</issn>
<publisher>
<publisher-name>Molecular Diversity Preservation International (MDPI)</publisher-name></publisher></journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3390/a4030200</article-id>
<article-id pub-id-type="publisher-id">algorithms-04-00200</article-id>
<article-categories>
<subj-group>
<subject>Article</subject></subj-group></article-categories>
<title-group>
<article-title>Approximating Frequent Items in Asynchronous Data Stream over a Sliding Window</article-title></title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Ting</surname><given-names>Hing-Fung</given-names></name><xref ref-type="aff" rid="af1-algorithms-04-00200"><sup>1</sup></xref><xref ref-type="corresp" rid="c1-algorithms-04-00200"><sup>*</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Lee</surname><given-names>Lap-Kei</given-names></name><xref ref-type="aff" rid="af2-algorithms-04-00200"><sup>2</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Chan</surname><given-names>Ho-Leung</given-names></name><xref ref-type="aff" rid="af1-algorithms-04-00200"><sup>1</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Lam</surname><given-names>Tak-Wah</given-names></name><xref ref-type="aff" rid="af1-algorithms-04-00200"><sup>1</sup></xref></contrib></contrib-group>
<aff id="af1-algorithms-04-00200">
<label>1</label> Department of Computer Science, University of Hong Kong, Pokfulam, Hong Kong, China; E-Mails: <email>hlchan@cs.hku.hk</email> (H.-L.C.); <email>twlam@cs.hku.hk</email> (T.-W.L.)</aff>
<aff id="af2-algorithms-04-00200">
<label>2</label> MADALGO (Center for Massive Data Algorithmics, a Center of the Danish National Research Foundation), Department of Computer Science, Aarhus University, Aarhus C DK-8000, Denmark; E-Mail: <email>lklee@madalgo.au.dk</email></aff>
<author-notes>
<corresp id="c1-algorithms-04-00200">
<label>*</label>Author to whom correspondence should be addressed; E-Mail: <email>hfting@cs.hku.hk</email>; Tel.:+852-2859-8944; Fax: +852-2549-7908.</corresp></author-notes>
<pub-date pub-type="collection">
<year>2011</year></pub-date>
<pub-date pub-type="epub">
<day>22</day>
<month>09</month>
<year>2011</year></pub-date>
<volume>4</volume>
<issue>3</issue>
<fpage>200</fpage>
<lpage>222</lpage>
<history>
<date date-type="received">
<day>23</day>
<month>06</month>
<year>2011</year></date>
<date date-type="rev-recd">
<day>23</day>
<month>06</month>
<year>2011</year></date>
<date date-type="accepted">
<day>10</day>
<month>09</month>
<year>2011</year></date></history>
<permissions>
<copyright-statement>© 2011 by the authors; licensee MDPI, Basel, Switzerland.</copyright-statement>
<copyright-year>2011</copyright-year>
<license>
<p>This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution license (http://creativecommons.org/licenses/by/3.0/).</p></license></permissions>
<abstract>
<p>In an asynchronous data stream, the data items may be out of order with respect to their original timestamps. This paper studies the space complexity required by a data structure to maintain such a data stream so that it can approximate the set of frequent items over a sliding time window with sufficient accuracy. Prior to our work, the best solution is given by Cormode <italic>et al.</italic> [<xref ref-type="bibr" rid="b1-algorithms-04-00200">1</xref>], who gave an 
<inline-formula>
<mml:math id="mm1" display="inline">
<mml:semantics id="sm1">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>min</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>U</mml:mi>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>-space data structure that can approximate the frequent items within an <italic>∊</italic> error bound, where <italic>W</italic> and <italic>B</italic> are parameters of the sliding window, and <italic>U</italic> is the set of all possible item names. We gave a more space-efficient data structure that only requires 
<inline-formula>
<mml:math id="mm2" display="inline">
<mml:semantics id="sm2">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> space.</p></abstract>
<kwd-group>
<kwd>asynchronous data streams</kwd>
<kwd>frequent items</kwd>
<kwd>sliding window</kwd>
<kwd>space complexity</kwd></kwd-group></article-meta></front>
<body>
<sec sec-type="intro">
<label>1.</label>
<title>Introduction</title>
<p>Identifying frequent items in a massive data stream has many applications in data mining and network monitoring, and the problem has been studied extensively [<xref ref-type="bibr" rid="b2-algorithms-04-00200">2</xref>-<xref ref-type="bibr" rid="b5-algorithms-04-00200">5</xref>]. Recent interest has been shifted from the statistics of the whole data stream to that of a sliding window of recent data [<xref ref-type="bibr" rid="b6-algorithms-04-00200">6</xref>-<xref ref-type="bibr" rid="b9-algorithms-04-00200">9</xref>]. In most applications, the amount of data in a window is gigantic when compared with the amount of memory available in the processing units. It is impossible to store all the data and then find the exact frequent items. Existing research has focused on designing space-efficient data structures to support finding the <italic>approximate</italic> frequent items. The key concern is how to minimize the space so as to achieve a required level of accuracy.</p>
<sec sec-type="methods">
<label>1.1.</label>
<title>Asynchronous Data Stream</title>
<p>Most of the previous work on data streams assume that items in a data stream are synchronous in the sense that the order of their arrivals is the same as the order of their creations. This synchronous model is however not suitable to applications that are distributed in nature. For example, in a sensor network, the sink collects data transmitted from sensors over a large area, and the data transmitted from different sensors would suffer different delay. It is possible that an item created at time <italic>t</italic> at a certain sensor may arrive at the sink later than an item created after <italic>t</italic> at another sensor. From the sink's viewpoint, items in the data stream are out of order with respect to their creation times. Yet the statistics to be computed are usually based on the creation times. More specifically, an <italic>asynchronous data stream</italic> (a.k.a. <italic>out-of-order data stream</italic>) [<xref ref-type="bibr" rid="b1-algorithms-04-00200">1</xref>,<xref ref-type="bibr" rid="b10-algorithms-04-00200">10</xref>,<xref ref-type="bibr" rid="b11-algorithms-04-00200">11</xref>] can be considered as a sequence (<italic>a</italic><sub>1</sub>, <italic>t</italic><sub>1</sub>), (<italic>a</italic><sub>2</sub>, <italic>t</italic><sub>2</sub>), (<italic>a</italic><sub>3</sub>, <italic>t</italic><sub>3</sub>), …, where <italic>a<sub>i</sub></italic> is the name of a data item chosen from a fixed universe <italic>U</italic>, and <italic>t<sub>i</sub></italic> is an integer timestamp recording the creation time of this item. Items arriving at the data stream are in arbitrary order regarding their timestamps, and it is possible that more than one data item has the same timestamp.</p></sec>
<sec>
<label>1.2.</label>
<title>Previous Work on Approximating Frequent Items</title>
<p>Consider a data stream and, in particular, those data items whose timestamps fall into the last <italic>W</italic> time units (<italic>W</italic> is the size of the sliding window). An item (or precisely, an item name) is said to be a frequent item if its count (<italic>i.e.</italic>, the number of occurrences) exceeds a certain required threshold of the total item count. Arasu and Manku [<xref ref-type="bibr" rid="b6-algorithms-04-00200">6</xref>] were the first to study approximating frequent items over a sliding window under the synchronous model, in which data items arrive in non-decreasing order of timestamps. The space complexity of their data structure is 
<inline-formula>
<mml:math id="mm3" display="inline">
<mml:semantics id="sm3">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>log</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, where <italic>∊</italic> is a user-specified error bound and <italic>B</italic> is the maximum number of items with timestamps falling into the same sliding window. Their work was later improved by Lee and Ting [<xref ref-type="bibr" rid="b7-algorithms-04-00200">7</xref>] to 
<inline-formula>
<mml:math id="mm4" display="inline">
<mml:semantics id="sm4">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> space. Recently, Cormode <italic>et al.</italic> [<xref ref-type="bibr" rid="b1-algorithms-04-00200">1</xref>] initiated the study of frequent items under the asynchronous model, and gave a solution with space complexity 
<inline-formula>
<mml:math id="mm5" display="inline">
<mml:semantics id="sm5">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>min</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>U</mml:mi>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, where <italic>U</italic> is the set of possible item names. Later, Cormode <italic>et al.</italic> [<xref ref-type="bibr" rid="b12-algorithms-04-00200">12</xref>] gave a hashing-based randomized solution using 
<inline-formula>
<mml:math id="mm6" display="inline">
<mml:semantics id="sm6">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msup>
<mml:mi>∊</mml:mi>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>U</mml:mi>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> space. The space complexity is quadratic in 
<inline-formula>
<mml:math id="mm7" display="inline">
<mml:semantics id="sm7">
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula>, which is less preferred, but that is a general solution that can solve other problems like finding the sum and quantiles.</p>
<p>The earlier work on asynchronous data stream focused on a relatively simpler problem called <italic>∊</italic>-approximate basic counting [<xref ref-type="bibr" rid="b10-algorithms-04-00200">10</xref>,<xref ref-type="bibr" rid="b11-algorithms-04-00200">11</xref>]. Cormode <italic>et al.</italic> [<xref ref-type="bibr" rid="b1-algorithms-04-00200">1</xref>] improved the space complexity of basic counting to. 
<inline-formula>
<mml:math id="mm8" display="inline">
<mml:semantics id="sm8">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> Notice that under the synchronous model, the best data structure requires 
<inline-formula>
<mml:math id="mm9" display="inline">
<mml:semantics id="sm9">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> space [<xref ref-type="bibr" rid="b9-algorithms-04-00200">9</xref>]. It is believed that there is roughly a gap of log<italic>W</italic> between the synchronous model to the asynchronous model. Yet, for frequent items, the asynchronous result of Cormode <italic>et al.</italic> [<xref ref-type="bibr" rid="b1-algorithms-04-00200">1</xref>] has space complexity way bigger than that of the best synchronous result, which is 
<inline-formula>
<mml:math id="mm10" display="inline">
<mml:semantics id="sm10">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> [<xref ref-type="bibr" rid="b7-algorithms-04-00200">7</xref>]. This motivates us to study more space-efficient solutions for approximating frequent items in the asynchronous model.</p></sec>
<sec>
<label>1.3.</label>
<title>Formal Definition of Approximate Frequent Item Set</title>
<p>For any time interval <italic>I</italic> and any data item <italic>a</italic>, let <italic>f<sub>a</sub></italic>(<italic>I</italic>) denote the frequency of item <italic>a</italic> in interval <italic>I, i.e.</italic>, the number of arrived items named <italic>a</italic> with timestamps falling into <italic>I</italic>. Define <italic>f</italic><sub>*</sub>(<italic>I</italic>) = Σ<sub><italic>a</italic>∈<italic>U</italic></sub> <italic>f<sub>a</sub></italic>(<italic>I</italic>) to be the total number of all arrived items with timestamps within <italic>I</italic>.</p>
<p>Given a user-specified error bound <italic>∊</italic> and a window size <italic>W</italic>, we want to maintain a data structure to answer any <italic>∊</italic>-approximate frequent item set query for any sub-window (specified at query time), which is in the form (<italic>ϕ, W</italic>′) where <italic>ϕ</italic> ∈ [<italic>∊</italic>, 1] is the required threshold and <italic>W</italic>′ ≤ <italic>W</italic> is the sub-window size. Suppose that <italic>τ</italic><sub>cur</sub> is the current time. The answer to such a query is a set <italic>S</italic> of item names satisfying the following two conditions:
<list list-type="simple">
<list-item>
<p>(C1) <italic>S</italic> contains every item <italic>a</italic> whose frequency in interval <italic>I</italic> = [<italic>τ</italic><sub>cur</sub> − <italic>W</italic>′ + 1, <italic>τ</italic><sub>cur</sub>] is at least <italic>ϕf</italic><sub>*</sub>(<italic>I</italic>), <italic>i.e., f<sub>a</sub></italic>(<italic>I</italic>) ≥ <italic>ϕf</italic><sub>*</sub>(<italic>I</italic>).</p></list-item>
<list-item>
<p>(C2) For any item <italic>a</italic> in <italic>S</italic>, its frequency in interval <italic>I</italic> is at least (<italic>ϕ</italic> − <italic>∊</italic>)<italic>f</italic><sub>*</sub>(<italic>I</italic>),<italic>i.e., f<sub>a</sub></italic>(<italic>I</italic>) ≥ (<italic>ϕ</italic> − <italic>∊</italic>)<italic>f</italic><sub>*</sub>(<italic>I</italic>).</p></list-item></list></p>
<p>The set <italic>S</italic> is also called an <italic>∊</italic>-approximate <italic>ϕ</italic>-frequent item set. For example, assume <italic>∊</italic> = 1%, then the query (10%, 10, 000) would return all items whose frequencies in the last 10, 000 time units are each at least 10% of the total item count, plus possibly some other items with frequency at least 9% of the total count.</p></sec>
<sec>
<label>1.4.</label>
<title>Our Contribution</title>
<p>This paper gives a more space-efficient data structure for answering any <italic>∊</italic>-approximate frequent item set query. Our data structure uses 
<inline-formula>
<mml:math id="mm11" display="inline">
<mml:semantics id="sm11">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> words, which is significantly smaller than the one given by Cormode <italic>et al.</italic> [<xref ref-type="bibr" rid="b1-algorithms-04-00200">1</xref>] (see <xref rid="t1-algorithms-04-00200" ref-type="table">Table 1</xref>). Furthermore, this space complexity is larger than the best synchronous solution by only a factor of <italic>O</italic>(log<italic>W</italic> log log<italic>W</italic>), which is close to the expected gap of <italic>O</italic>(log<italic>W</italic>). Similar to existing data structures for this problem, it takes time linear to the data structure's size to answer an <italic>∊</italic>-approximate frequent item set query. Furthermore, it takes 
<inline-formula>
<mml:math id="mm12" display="inline">
<mml:semantics id="sm12">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>+</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> time to modify the data structure for a new data item. Occasionally, we might need to clean up some old data items that are no longer significant to the approximation; in the worst case, this takes time linear to the size of the data structure, and thus is no bigger than the query time. As a remark, the solution of Cormode <italic>et al.</italic> [<xref ref-type="bibr" rid="b1-algorithms-04-00200">1</xref>] requires 
<inline-formula>
<mml:math id="mm13" display="inline">
<mml:semantics id="sm13">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>U</mml:mi>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> time for an update.</p>
<p>In the asynchronous model, if a data item has a delay more than <italic>W</italic> time units, it can be discarded immediately when it arrives. In many applications, the delay is usually small. This motivates us to extend the asynchronous model to consider data items that have a bounded delay. We say that an asynchronous data stream has tardiness <italic>d</italic><sub>max</sub> if a data item created at time <italic>t</italic> must arrive at the stream no later than time <italic>t</italic> + <italic>d</italic><sub>max</sub>. If we set <italic>d</italic><sub>max</sub> = 0, the model becomes the synchronous model. If we allow <italic>d</italic><sub>max</sub> ≥ <italic>W</italic>, this is in essence the asynchronous model studied above. We adapt our data structure to take advantage of small tardiness such that when <italic>d</italic><sub>max</sub> is small, it uses smaller space (see <xref rid="t1-algorithms-04-00200" ref-type="table">Table 1</xref>) and support faster update time (which is 
<inline-formula>
<mml:math id="mm14" display="inline">
<mml:semantics id="sm14">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>+</mml:mo>
<mml:mo>log</mml:mo>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> In particular, when <italic>d</italic><sub>max</sub> = Θ(1), the size and update time of our data structure match those of the best data structure for synchronous data stream.</p>
<sec>
<title>Remark</title>
<p>This paper is a corrected version of a paper with the same title in WAOA 2009 [<xref ref-type="bibr" rid="b13-algorithms-04-00200">13</xref>]; in particular, the error bound on the estimates was given incorrectly before and is fixed in this version.</p></sec></sec>
<sec>
<label>1.5.</label>
<title>Technical Digest</title>
<p>To solve the frequent item set problem, we need to estimate the frequency of any item with relative error <italic>∊f</italic><sub>*</sub>(<italic>I</italic>) where <italic>I</italic> = [<italic>τ</italic><sub>cur</sub> − <italic>W</italic> + 1, <italic>τ</italic><sub>cur</sub>] is the interval covered by the sliding window. To this end, we first propose a simple data structure for estimating the frequency of a fixed item over the sliding window. Then, we adapt a technique of Misra and Gries [<xref ref-type="bibr" rid="b14-algorithms-04-00200">14</xref>] to extend our data structure to handle any item. The result is an <italic>O</italic>(<italic>f</italic><sub>*</sub>(<italic>I</italic>))/<italic>λ</italic>)-space data structure that allows us to obtain an estimate for any item with an error bound of about <italic>λ</italic> log<italic>W</italic>. Here <italic>λ</italic> is a design parameter. To ensure <italic>λ</italic> log<italic>W</italic> to be no greater than <italic>∊f</italic><sub>*</sub>(<italic>I</italic>), we should set <italic>λ</italic> ≤ <italic>∊f</italic><sub>*</sub>(<italic>I</italic>)/log<italic>W</italic>. Since <italic>f</italic>*(<italic>I</italic>) can be as small as 
<inline-formula>
<mml:math id="mm15" display="inline">
<mml:semantics id="sm15">
<mml:mrow>
<mml:mi mathvariant="normal">Θ</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> (the case for smaller <italic>f</italic><sub>*</sub>(<italic>I</italic>) can be handled by brute-force), we need to be conservative and set <italic>λ</italic> to some constant. But then the size of the data structure can be Θ(<italic>B</italic>) because <italic>f</italic><sub>*</sub>(<italic>I</italic>) can be as large as <italic>B</italic>. To reduce space, we introduce a multi-resolution approach. Instead of using one single data structure, we maintain a collection of <italic>O</italic>(log<italic>B</italic>) copies of our data structure, each uses a distinct, carefully chosen parameter <italic>λ</italic> so that it could estimate the frequent item set with sufficient accuracy when <italic>f</italic><sub>*</sub>(<italic>I</italic>) is in a particular range. The resulting data structure uses 
<inline-formula>
<mml:math id="mm16" display="inline">
<mml:semantics id="sm16">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> space.</p>
<p>Unfortunately, a careful analysis of our data structure reveals that in the worst case, it can only guarantee estimates with an error bound of <italic>∊f<sub>*</sub></italic>(<italic>H</italic> ∪ <italic>I</italic>) where <italic>H</italic> = [<italic>τ</italic><sub>cur</sub> − 2<italic>W</italic> + 1, <italic>τ</italic><sub>cur</sub> − <italic>W</italic>], not the required <italic>∊f</italic><sub>*</sub>(<italic>I</italic>). The reason is that the error of its estimates over <italic>I</italic> depend on the number of updates made during <italic>I</italic>, and unlike synchronous data stream, this number for asynchronous data stream can be significantly larger than <italic>f</italic><sub>*</sub>(<italic>I</italic>). For example, at time <italic>τ</italic><sub>cur</sub> − <italic>W</italic> + 1, there may still be many new items (<italic>a, u</italic>) with timestamps <italic>u</italic> ∈ <italic>H</italic>, for which we must update our data structure to get good estimates when the sliding window is at earlier positions. Indeed, the number of updates during <italic>I</italic> can be as large as <italic>f</italic><sub>*</sub>(<italic>H</italic> ∪ <italic>I</italic>), and this gives an error bound of <italic>∊f</italic><sub>*</sub>(<italic>H</italic> ∪ <italic>I</italic>).</p>
<p>To reduce the error bound to <italic>∊f</italic><sub>*</sub>(<italic>I</italic>), we introduce a novel algorithm to split the data structure into independent smaller ones at appropriate times. For example, at time <italic>τ</italic><sub>cur</sub> − <italic>W</italic> + 1, we can split our data structure into two smaller ones <italic>D<sub>H</sub></italic> and <italic>D<sub>I</sub></italic>, and we will only update <italic>D<sub>H</sub></italic> for items (<italic>a, u</italic>) with <italic>u</italic> ∈ <italic>H</italic> and update <italic>D<sub>I</sub></italic> for those with <italic>u</italic> ∈ <italic>I</italic>. Then, when we need to find an estimate on <italic>I</italic> at time <italic>τ</italic><sub>cur</sub>, we only need to consult <italic>D<sub>I</sub></italic>, and the number of updates made to it is <italic>f</italic><sub>*</sub>(<italic>I</italic>). In this paper, we develop sophisticated procedures to decide when and how to split the data structure so as to enable us to get good enough estimates when sliding window moves continuously. The resulting data structure has size 
<inline-formula>
<mml:math id="mm17" display="inline">
<mml:semantics id="sm17">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> Then, we further make the data structure adaptive to the input size, allowing us to reduce the space to 
<inline-formula>
<mml:math id="mm18" display="inline">
<mml:semantics id="sm18">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>.</p></sec></sec>
<sec>
<label>2.</label>
<title>Preliminaries</title>
<p>Our data structures for the frequent item set problem depends on data structures for the following two related data stream problems. Let 0 &lt; <italic>∊</italic> &lt; 1 be any real number, and <italic>τ</italic><sub>cur</sub> be the current time.</p>
<list list-type="bullet">
<list-item>
<p>The <italic>∊-approximate basic counting</italic> problem asks for data structure that allows us to obtain, for any interval <italic>I</italic> = [<italic>τ</italic><sub>cur</sub> − <italic>W</italic>′ + 1, <italic>τ</italic><sub>cur</sub>] where <italic>W</italic>′ ≤ <italic>W</italic>, an estimate <italic>f̂</italic><sub>*</sub>(<italic>I</italic>) of <italic>f</italic><sub>*</sub>(<italic>I</italic>) such that |<italic>f̂</italic><sub>*</sub>(<italic>I</italic>) − <italic>f</italic><sub>*</sub>(<italic>I</italic>)| ≤ <italic>∊f</italic><sub>*</sub>(<italic>I</italic>).</p></list-item>
<list-item>
<p>The <italic>∊-approximate counting</italic> problem asks for data structure that allows us to obtain, for any item <italic>a</italic> and any interval <italic>I</italic> = [<italic>τ</italic><sub>cur</sub> − <italic>W</italic>′ + 1, <italic>τ</italic><sub>cur</sub>] where <italic>W</italic>′ ≤ <italic>W</italic>, an estimate <italic>f̂<sub>a</sub></italic>(<italic>I</italic>) of <italic>f<sub>a</sub></italic>(<italic>I</italic>) such that | <italic>f̂<sub>a</sub></italic>(<italic>I</italic>) − <italic>f<sub>a</sub></italic>(<italic>I</italic>)|≤ <italic>∊f</italic><sub>*</sub>(<italic>I</italic>).</p></list-item></list>
<p>As mentioned in Section 1, Cormode <italic>et al.</italic> [<xref ref-type="bibr" rid="b1-algorithms-04-00200">1</xref>] gave an 
<inline-formula>
<mml:math id="mm19" display="inline">
<mml:semantics id="sm19">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>-space data structure 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/><italic><sub>∊</sub></italic> for solving the <italic>∊</italic>-approximate basic counting problem. In this paper, we give an 
<inline-formula>
<mml:math id="mm20" display="inline">
<mml:semantics id="sm20">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>-space data structure 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><italic><sub>∊</sub></italic> for solving the harder <italic>∊</italic>-approximate counting problem. The theorem below shows how to use these two data structures to answer <italic>∊</italic>-approximate frequent item set query.</p>
<sec>
<title>Theorem 1</title>
<p>Let <italic>∊</italic><sub>0</sub> = <italic>∊</italic>/4. Given 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/><italic><sub>∊<sub>o</sub></sub></italic> and 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><italic><sub>∊<sub>o</sub></sub></italic>, we can answer any <italic>∊</italic>-approximate frequent item set query. The total space required is 
<inline-formula>
<mml:math id="mm21" display="inline">
<mml:semantics id="sm21">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<sec>
<title>Proof</title>
<p>The space requirement is obvious. Consider any <italic>∊</italic>-approximate frequent item set query (<italic>ϕ, W</italic>′) where <italic>∊</italic> ≤ <italic>ϕ</italic> ≤ 1 and <italic>W</italic>′ ≤ <italic>W</italic>. Let <italic>I</italic> = [<italic>τ</italic><sub>cur</sub> − <italic>W</italic>′ + 1, <italic>τ</italic><sub>cur</sub>]. Since <italic>∊<sub>o</sub></italic> = <italic>∊</italic>/4, the estimates given by 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/><italic><sub>∊<sub>o</sub></sub></italic> satisfy 
<inline-formula>
<mml:math id="mm22" display="inline">
<mml:semantics id="sm22">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, and for any item <italic>a</italic>, the estimates given by 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><italic><sub>∊<sub>o</sub></sub></italic> satisfy 
<inline-formula>
<mml:math id="mm23" display="inline">
<mml:semantics id="sm23">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> To answer the query (<italic>ϕ, W</italic>′), we return the set
<disp-formula id="FD1">
<mml:math id="mm24" display="block">
<mml:semantics id="sm24">
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mi>ϕ</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≥</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>ϕ</mml:mi>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>which satisfies the required conditions (C1) and (C2) because
<list list-type="bullet">
<list-item>
<p>for any item <italic>a</italic> with <italic>f<sub>a</sub></italic>(<italic>I</italic>) ≥ <italic>ϕf</italic><sub>*</sub>(<italic>I</italic>), 
<inline-formula>
<mml:math id="mm25" display="inline">
<mml:semantics id="sm25">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≥</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≥</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>ϕ</mml:mi>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac>
<mml:mo stretchy="false">)</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≥</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>ϕ</mml:mi>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac>
<mml:mo stretchy="false">)</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>+</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≥</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>ϕ</mml:mi>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac>
<mml:mo stretchy="false">)</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≥</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>ϕ</mml:mi>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:mo stretchy="false">)</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, and <italic>a</italic> ∈ <italic>S<sub>ϕ</sub></italic>; thus (C1) is satisfied, and</p></list-item>
<list-item>
<p>for every <italic>a</italic> ∈ <italic>S<sub>ϕ</sub></italic>, we have 
<inline-formula>
<mml:math id="mm26" display="inline">
<mml:semantics id="sm26">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≥</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≥</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>ϕ</mml:mi>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:mo stretchy="false">)</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≥</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>ϕ</mml:mi>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac>
<mml:mo stretchy="false">)</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≥</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>ϕ</mml:mi>
<mml:mo>−</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>; thus (C2) is satisfied.</p></list-item></list></p>
<p>The building block of 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><italic><sub>∊</sub></italic> is a data structure that counts items over some fixed interval (instead of the sliding window). For any interval <italic>I</italic> = [<italic>ℓ<sub>I</sub>, r<sub>I</sub></italic>] of size <italic>W</italic>, Theorem 4 in Section 4 gives a data structure 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><italic><sub>I,∊</sub></italic> that uses 
<inline-formula>
<mml:math id="mm27" display="inline">
<mml:semantics id="sm27">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> space, supports 
<inline-formula>
<mml:math id="mm28" display="inline">
<mml:semantics id="sm28">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>⋅</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>+</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> update time, and enables us to obtain, for any item <italic>a</italic> and any time <italic>t</italic> ∈ <italic>I</italic>, an estimate <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) of <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) such that
<disp-formula id="FD2">
<label>(1)</label>
<mml:math id="mm29" display="block">
<mml:semantics id="sm29">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mi>∊</mml:mi>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Given 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><sub><italic>I</italic><sub>1</sub>,<italic>∊</italic></sub>, 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><sub><italic>I</italic><sub>2</sub>,<italic>∊</italic></sub>, … where <italic>I<sub>i</sub></italic> = [(<italic>i</italic> − 1)<italic>W</italic> + 1, <italic>iW</italic>], we can obtain, for any <italic>W</italic>′ ≤ <italic>W</italic>, an estimate <italic>f̂<sub>a</sub></italic>([<italic>s, τ</italic><sub>cur</sub>]) of <italic>f<sub>a</sub></italic>([<italic>s, τ</italic><sub>cur</sub>]) where <italic>s</italic> = <italic>τ</italic><sub>cur</sub> − <italic>W</italic>′ + 1 as follows.</p>
<list list-type="bullet">
<list-item>
<p>Let <italic>I<sub>i</sub></italic> and <italic>I<sub>i</sub></italic><sub>+1</sub> be the intervals such that [<italic>s, τ</italic><sub>cur</sub>] ⊂ <italic>I<sub>i</sub></italic> ∪ <italic>I<sub>i</sub></italic><sub>+1</sub>.</p></list-item>
<list-item>
<p>Use 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><sub><italic>I<sub>i</sub>,∊</italic></sub> to get an estimate <italic>f̂<sub>a</sub></italic>([<italic>s, iW</italic>]) of <italic>f<sub>a</sub></italic>([<italic>s, iW</italic>]), and 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><sub><italic>I</italic><sub><italic>i</italic>+1</sub>,<italic>∊</italic></sub> an estimate <italic>f̂</italic><sub>a</sub>([<italic>iW</italic> + 1, (<italic>i</italic> + 1)<italic>W</italic>]) of <italic>f<sub>a</sub></italic>([<italic>iW</italic> + 1, (<italic>i</italic> + 1)<italic>W</italic>]).</p></list-item>
<list-item>
<p>Our estimate <italic>f̂<sub>a</sub></italic>([<italic>s, τ</italic><sub>cur</sub>]) = <italic>f̂<sub>a</sub></italic>([<italic>s, iW</italic>]) + <italic>f̂<sub>a</sub></italic>([<italic>iW</italic> + 1, (<italic>iW</italic> + 1)<italic>W</italic>]).</p></list-item></list>
<p>By <xref rid="FD2" ref-type="disp-formula">Equation (1)</xref>, we have
<disp-formula id="FD3">
<label>(2)</label>
<mml:math id="mm30" display="block">
<mml:semantics id="sm30">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mi>∊</mml:mi>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>and
<disp-formula id="FD4">
<label>(3)</label>
<mml:math id="mm31" display="block">
<mml:semantics id="sm31">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>i</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>i</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mi>∊</mml:mi>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>i</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Observe that any item that arrives at or before the current time <italic>τ</italic><sub>cur</sub> must have timestamp no greater than <italic>τ</italic><sub>cur</sub>; hence <italic>f<sub>a</sub></italic>([<italic>iW</italic> + 1, (<italic>i</italic> + 1)<italic>W</italic>]) = <italic>f<sub>a</sub></italic>([<italic>iW</italic> + 1, <italic>τ</italic><sub>cur</sub>]) and <italic>f</italic><sub>*</sub>([<italic>iW</italic> + 1, (<italic>i</italic> + 1)<italic>W</italic>]) = <italic>f<sub>*</sub></italic>([<italic>iW</italic> +1, <italic>τ</italic><sub>cur</sub>]), and <xref rid="FD4" ref-type="disp-formula">Equation (3)</xref> is equivalent to
<disp-formula id="FD5">
<label>(4)</label>
<mml:math id="mm32" display="block">
<mml:semantics id="sm32">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>i</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>i</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mtext>cur</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mi>∊</mml:mi>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>i</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mtext>cur</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Adding <xref rid="FD3" ref-type="disp-formula">Equations (2)</xref> and <xref rid="FD5" ref-type="disp-formula">(4)</xref>, we conclude |<italic>f̂<sub>a</sub></italic>([<italic>s, τ</italic><sub>cur</sub>]) − <italic>f<sub>a</sub></italic>([<italic>s, τ</italic><sub>cur</sub>])| ≤ <italic>∊f</italic><sub>*</sub>([<italic>s, τ</italic><sub>cur</sub>]), as required.</p>
<p>Our data structure 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><italic><sub>∊</sub></italic> is just the collection of 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><sub><italic>I</italic><sub>1</sub>,<italic>∊</italic></sub>, 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><sub><italic>I</italic><sub>2</sub>,<italic>∊</italic></sub>, …. Note that we only need to physically store in 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><italic><sub>∊</sub></italic> the data structures 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><sub><italic>I</italic><sub><italic>i</italic></sub>,<italic>∊</italic></sub> and 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><sub><italic>I</italic><sub><italic>i</italic>+1</sub>,<italic>∊</italic></sub> where [<italic>τ</italic><sub>cur</sub> − <italic>W</italic> + 1,<italic>τ</italic><sub>cur</sub>] ⊆ <italic>I<sub>i</sub></italic> ∪ <italic>I<sub>i</sub></italic><sub>+1</sub>. The intervals of the earlier ones will no longer be covered by the sliding window and the corresponding 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><italic><sub>I,∊</sub></italic>'s can be thrown away. Together with Theorem 4, we have the following theorem.</p></sec></sec>
<sec>
<title>Theorem 2</title>
<p>The data structure 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><sub><italic>∊</italic></sub> solves the <italic>∊</italic>-approximate counting problem. The space usage is 
<inline-formula>
<mml:math id="mm33" display="inline">
<mml:semantics id="sm33">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> and it supports 
<inline-formula>
<mml:math id="mm34" display="inline">
<mml:semantics id="sm34">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>⋅</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>+</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> update time.</p></sec></sec>
<sec sec-type="methods">
<label>3.</label>
<title>A Simple Data Structure For Frequency Estimation</title>
<p>Let <italic>I</italic> = [<italic>ℓ<sub>I</sub>, r<sub>I</sub></italic>] be any interval of size <italic>W</italic>. To simplify notation, we assume that <italic>W</italic> is a power of 2, so that log<italic>W</italic> is an integer and we can avoid the floor or the ceiling functions. In this section, we describe a simple data structure 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic> that enables us to obtain, for any item <italic>a</italic>, a good estimate of <italic>a</italic>'s frequency over <italic>I</italic>. The parameters <italic>λ</italic> and <italic>κ</italic> determine its accuracy and space usage. However, its accuracy is not enough for answering any <italic>∊</italic>-approximate frequent item set query. We will explain how to improve the accuracy in the next section.</p>
<p>Roughly speaking, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic> is a set of queues 
<inline-formula>
<mml:math id="mm35" display="inline">
<mml:semantics id="sm35">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> i.e., 
<inline-formula>
<mml:math id="mm36" display="inline">
<mml:semantics id="sm36">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">∣</mml:mo>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>∈</mml:mo>
<mml:mi>U</mml:mi></mml:mrow></mml:mrow>
<mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>. For an item <italic>a</italic>, the queue 
<inline-formula>
<mml:math id="mm37" display="inline">
<mml:semantics id="sm37">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> keeps track of the occurrences of <italic>a</italic> in <italic>I</italic>. Each node <italic>N</italic> in 
<inline-formula>
<mml:math id="mm38" display="inline">
<mml:semantics id="sm38">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is associated with an interval <italic>i</italic>(<italic>N</italic>), a value <italic>v</italic>(<italic>N</italic>), and a debit <italic>d</italic>(<italic>N</italic>); <italic>v</italic>(<italic>N</italic>) counts the number of arrived items (<italic>a, u</italic>) with <italic>u</italic> ∈ <italic>i</italic>(<italic>N</italic>), and <italic>d</italic>(<italic>N</italic>) is for implementing a space reduction technique. Initially, 
<inline-formula>
<mml:math id="mm39" display="inline">
<mml:semantics id="sm39">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> has only one node <italic>N</italic> with <italic>i</italic>(<italic>N</italic>) = <italic>I</italic>, and <italic>v</italic>(<italic>N</italic>) = <italic>d</italic>(<italic>N</italic>) = 0. In general, 
<inline-formula>
<mml:math id="mm40" display="inline">
<mml:semantics id="sm40">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is a queue 〈<italic>N</italic><sub>1</sub>, <italic>N</italic><sub>2</sub>, …, <italic>N<sub>k</sub></italic>〉 of nodes whose intervals form a partition of <italic>I, i.e.</italic>,
<disp-formula id="FD6">
<mml:math id="mm41" display="block">
<mml:semantics id="sm41">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>where <italic>q</italic><sub><italic>i</italic>−1</sub> + 1 = <italic>p<sub>i</sub></italic> ≤ <italic>q<sub>i</sub></italic> and ∪<sub>1≤<italic>i</italic>≤<italic>k</italic></sub>[<italic>p<sub>i</sub>, q<sub>i</sub></italic>] = <italic>I</italic>. When an item (<italic>a, u</italic>) with <italic>u</italic> ∈ <italic>I</italic> arrives, we update 
<inline-formula>
<mml:math id="mm42" display="inline">
<mml:semantics id="sm42">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> as follows.</p>
<array>
<tbody>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr>
<tr>
<td align="left" valign="top" colspan="2">
<mml:math id="mm43" display="inline">
<mml:semantics id="sm43">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math>.Debit( )</td></tr>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr>
<tr>
<td align="right" valign="top">1:</td>
<td align="left" valign="top">find the unique node <italic>N</italic> in 
<mml:math id="mm44" display="inline">
<mml:semantics id="sm44">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math> with <italic>u</italic> ∈ <italic>i</italic>(<italic>N</italic>) = <italic>J</italic> = [<italic>p, q</italic>],</td></tr>
<tr>
<td align="right" valign="top">2:</td>
<td align="left" valign="top">increase the value of <italic>N</italic> by 1, <italic>i.e., v</italic>(<italic>N</italic>) = <italic>v</italic>(<italic>N</italic>) + 1;</td></tr>
<tr>
<td align="right" valign="top">3:</td>
<td align="left" valign="top"><bold>if</bold> (|<italic>J</italic>| &gt; 1 <bold>and</bold> <italic>λ</italic> units have been added to <italic>v</italic>(<italic>N</italic>) since <italic>J</italic> is assigned to <italic>i</italic>(<italic>N</italic>)) <bold>then</bold></td></tr>
<tr>
<td align="right" valign="top">4:</td>
<td align="left" valign="top"> /* refine <italic>J</italic> */</td></tr>
<tr>
<td align="right" valign="top">5:</td>
<td align="left" valign="top"> create a new node <italic>N</italic>′ and insert it to the left of <italic>N</italic>;</td></tr>
<tr>
<td align="right" valign="top">6:</td>
<td align="left" valign="top"> let <italic>i</italic>(<italic>N</italic>′) = [<italic>p, m</italic>], <italic>i</italic>(<italic>N</italic>) = [<italic>m</italic> + 1, <italic>q</italic>] where <italic>m</italic> = ⌊(<italic>p</italic> + <italic>q</italic>)/2⌋;</td></tr>
<tr>
<td align="right" valign="top">7:</td>
<td align="left" valign="top"> let <italic>v</italic>(<italic>N</italic>′) = 0 and <italic>d</italic>(<italic>N</italic>′) = 0;</td></tr>
<tr>
<td align="right" valign="top">8:</td>
<td align="left" valign="top"> /* we make no change to <italic>v</italic>(<italic>N</italic>) and <italic>d</italic>(<italic>N</italic>) */</td></tr>
<tr>
<td align="right" valign="top">9:</td>
<td align="left" valign="top"><bold>end if</bold></td></tr>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr></tbody></array>
<p><xref ref-type="fig" rid="f1-algorithms-04-00200">Figure 1</xref> gives an example on how 
<inline-formula>
<mml:math id="mm45" display="inline">
<mml:semantics id="sm45">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is updated using the procedure.</p>
<p>Obviously, a direct implementation of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic> uses too much space. We now extend a technique of Misra and Gries [<xref ref-type="bibr" rid="b14-algorithms-04-00200">14</xref>] to reduce the space requirement. For any 
<inline-formula>
<mml:math id="mm46" display="inline">
<mml:semantics id="sm46">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, we say that 
<inline-formula>
<mml:math id="mm47" display="inline">
<mml:semantics id="sm47">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is <italic>trivial</italic> if the queue contains only a single node <italic>N</italic> with (i) <italic>i</italic>(<italic>N</italic>) = <italic>I</italic>, and (ii) <italic>v</italic>(<italic>N</italic>) = <italic>d</italic>(<italic>N</italic>) = 0. Every queue in 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic> is trivial initially. The key for reducing the space complexity of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic> is to maintain the following invariant throughout the execution:
<list list-type="simple">
<list-item>
<p>(*) There are at most <italic>κ</italic> non-trivial queues in 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic>.</p></list-item></list></p>
<p>We call <italic>κ</italic> the <italic>capacity</italic> of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic>. The invariant helps us save space because we do not need to store trivial queues physically in memory. To maintain (*), each queue 
<inline-formula>
<mml:math id="mm48" display="inline">
<mml:semantics id="sm48">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> supports the following procedure, which is called only when 
<inline-formula>
<mml:math id="mm49" display="inline">
<mml:semantics id="sm49">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, the total values of the nodes in 
<inline-formula>
<mml:math id="mm50" display="inline">
<mml:semantics id="sm50">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, is strictly greater than 
<inline-formula>
<mml:math id="mm51" display="inline">
<mml:semantics id="sm51">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, the total debits of the nodes in 
<inline-formula>
<mml:math id="mm52" display="inline">
<mml:semantics id="sm52">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<array>
<tbody>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr>
<tr>
<td align="left" valign="top" colspan="2">
<mml:math id="mm53" display="inline">
<mml:semantics id="sm53">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math>.Debit( )</td></tr>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr>
<tr>
<td align="right" valign="top">1:</td>
<td align="left" valign="top"><bold>if</bold> (
<mml:math id="mm54" display="inline">
<mml:semantics id="sm54">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math>) <bold>then</bold></td></tr>
<tr>
<td align="right" valign="top">2:</td>
<td align="left" valign="top"> return error;</td></tr>
<tr>
<td align="right" valign="top">3:</td>
<td align="left" valign="top"><bold>else</bold></td></tr>
<tr>
<td align="right" valign="top">4:</td>
<td align="left" valign="top"> find an arbitrary node <italic>N</italic> of 
<mml:math id="mm55" display="inline">
<mml:semantics id="sm55">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math> with <italic>v</italic>(<italic>N</italic>) &gt; <italic>d</italic>(<italic>N</italic>);</td></tr>
<tr>
<td align="right" valign="top">5:</td>
<td align="left" valign="top"> /* such a node must exist because 
<mml:math id="mm56" display="inline">
<mml:semantics id="sm56">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>&gt;</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math> */</td></tr>
<tr>
<td align="right" valign="top">6:</td>
<td align="left" valign="top"><italic>d</italic>(<italic>N</italic>) = <italic>d</italic>(<italic>N</italic>) + 1;</td></tr>
<tr>
<td align="right" valign="top">7:</td>
<td align="left" valign="top"><bold>end if</bold></td></tr>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr></tbody></array>
<p>Note from the implementation of Debit( ) that 
<inline-formula>
<mml:math id="mm57" display="inline">
<mml:semantics id="sm57">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> is always no smaller than 
<inline-formula>
<mml:math id="mm58" display="inline">
<mml:semantics id="sm58">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, and for each node <italic>N</italic> of 
<inline-formula>
<mml:math id="mm59" display="inline">
<mml:semantics id="sm59">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>N</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≥</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>N</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>. Furthermore, if 
<inline-formula>
<mml:math id="mm60" display="inline">
<mml:semantics id="sm60">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, then <italic>v</italic>(<italic>N</italic>) = <italic>d</italic>(<italic>N</italic>) for every node <italic>N</italic> in 
<inline-formula>
<mml:math id="mm61" display="inline">
<mml:semantics id="sm61">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. To maintain (*), 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic> processes a newly arrived item (<italic>a, u</italic>) with <italic>u</italic> ∈ <italic>I</italic> as follows.</p>
<array>
<tbody>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr>
<tr>
<td colspan="2" align="left" valign="top">
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic>.Process((<italic>a, u</italic>))</td></tr>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr>
<tr>
<td align="right" valign="top">1:</td>
<td align="left" valign="top">update 
<mml:math id="mm62" display="inline">
<mml:semantics id="sm62">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math> by calling 
<mml:math id="mm63" display="inline">
<mml:semantics id="sm63">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math>.Update((<italic>a, u</italic>));</td></tr>
<tr>
<td align="right" valign="top">2:</td>
<td align="left" valign="top"><bold>if</bold> (after the update the number of non-trivial queues becomes <italic>κ</italic>) <bold>then</bold></td></tr>
<tr>
<td align="right" valign="top">3:</td>
<td align="left" valign="top"> <bold>for each</bold> 
<mml:math id="mm64" display="inline">
<mml:semantics id="sm64">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math> with 
<mml:math id="mm65" display="inline">
<mml:semantics id="sm65">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>&gt;</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math> <bold>do</bold> 
<mml:math id="mm66" display="inline">
<mml:semantics id="sm66">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math>.Debit( );</td></tr>
<tr>
<td align="right" valign="top">4:</td>
<td align="left" valign="top"> <bold>for each</bold> non-trivial queues 
<mml:math id="mm67" display="inline">
<mml:semantics id="sm67">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math> with 
<mml:math id="mm68" display="inline">
<mml:semantics id="sm68">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math> <bold>do</bold></td></tr>
<tr>
<td align="right" valign="top">5:</td>
<td align="left" valign="top">  delete all nodes of 
<mml:math id="mm69" display="inline">
<mml:semantics id="sm69">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math> and make it a trivial queue;</td></tr>
<tr>
<td align="right" valign="top">6:</td>
<td align="left" valign="top"> /* Note that each deleted node <italic>N</italic> satisfies <italic>v</italic>(<italic>N</italic>) = <italic>d</italic>(<italic>N</italic>). */</td></tr>
<tr>
<td align="right" valign="top">7:</td>
<td align="left" valign="top"><bold>end if</bold></td></tr>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr></tbody></array>
<p>It is easy to see that Invariant (*) always holds: Initially the number <italic>m</italic> of non-trivial queues is zero, and <italic>m</italic> increases only when Process((<italic>a, u</italic>)) is on some trivial 
<inline-formula>
<mml:math id="mm70" display="inline">
<mml:semantics id="sm70">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>; in such case 
<inline-formula>
<mml:math id="mm71" display="inline">
<mml:semantics id="sm71">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> becomes 1 and 
<inline-formula>
<mml:math id="mm72" display="inline">
<mml:semantics id="sm72">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> remains 0. If <italic>m</italic> becomes <italic>κ</italic> after this increase, we will debit, among other queues, 
<inline-formula>
<mml:math id="mm73" display="inline">
<mml:semantics id="sm73">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and its 
<inline-formula>
<mml:math id="mm74" display="inline">
<mml:semantics id="sm74">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> becomes 1 too. It follows that 
<inline-formula>
<mml:math id="mm75" display="inline">
<mml:semantics id="sm75">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, and Lines 4–5 will make 
<inline-formula>
<mml:math id="mm76" display="inline">
<mml:semantics id="sm76">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> trivial and <italic>m</italic> becomes less than <italic>κ</italic> again.</p>
<p>We are now ready to define 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic>'s estimate <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) of <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) and analyze its accuracy. We need some definitions. For any interval <italic>J</italic> = [<italic>p, q</italic>] and any <italic>t</italic> ∈ <italic>I</italic>, we say that <italic>J covers t</italic> if <italic>t</italic> ∈ [<italic>p, q</italic>], is <italic>to the right</italic> of <italic>t</italic> if <italic>t</italic> &lt; <italic>p</italic>, and is <italic>to the left</italic> of <italic>t</italic> otherwise. For any item <italic>a</italic> and any <italic>t</italic> ∈ <italic>I</italic> = [<italic>ℓ<sub>I</sub>, r<sub>I</sub></italic>], 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic>'s estimate of <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) is
<list list-type="simple">
<list-item>
<p><italic>f̂a</italic>([<italic>t, r<sub>I</sub></italic>]) = the value sum of the nodes <italic>N</italic> currently in 
<inline-formula>
<mml:math id="mm77" display="inline">
<mml:semantics id="sm77">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> whose <italic>i</italic>(<italic>N</italic>) covers or is to the right of <italic>t</italic>.</p></list-item></list></p>
<p>For example, in <xref ref-type="fig" rid="f1-algorithms-04-00200">Figure 1</xref>, after the update of the last item (<italic>a</italic>, 1), we can obtain the estimate <italic>f̂<sub>a</sub></italic>([2, 8]) = 0 + 4 + 5 = 9.</p>
<p>Given any node <italic>N</italic> of 
<inline-formula>
<mml:math id="mm78" display="inline">
<mml:semantics id="sm78">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, we say that <italic>N</italic> is monitoring <italic>a</italic> over <italic>J</italic>, or simply <italic>N</italic> is monitoring <italic>J</italic> if <italic>i</italic>(<italic>N</italic>) = <italic>J</italic>. Note that a node may monitor different intervals during different periods of execution, and the size of these intervals are monotonically decreasing. Observe that although there are about <italic>W</italic><sup>2</sup>/2 possible sub-intervals of size-<italic>W</italic> interval <italic>I</italic>, there are only about 2<italic>W</italic> of them that would be monitored by some nodes: there is only one such interval of size <italic>W</italic>, namely <italic>I</italic> = [<italic>ℓ<sub>I</sub>, r<sub>I</sub></italic>], which gives birth to two such intervals of size <italic>W</italic>/2, namely [<italic>ℓ<sub>I</sub>, m</italic>] and [<italic>m</italic> + 1, <italic>r<sub>I</sub></italic>] where <italic>m</italic> = ⌊(<italic>ℓ<sub>I</sub></italic> + <italic>r<sub>I</sub></italic>)/2⌋, and so on. We call these <italic>O</italic>(<italic>W</italic>) intervals <italic>interesting intervals</italic>. For any two interesting intervals <italic>J</italic> and <italic>H</italic> such that <italic>J</italic> ⊂ <italic>H</italic>, we say that <italic>J</italic> is a <italic>descendant</italic> of <italic>H</italic>, and <italic>H</italic> is an <italic>ancestor</italic> of <italic>J</italic>. <xref ref-type="fig" rid="f2-algorithms-04-00200">Figure 2</xref> shows all the interesting intervals for <italic>I</italic> = [1, 8], as well as their ancestor-descendant relationship. The following important fact is easy to verify by induction.</p>
<sec>
<title>Fact 1</title>
<p>Any two interesting intervals <italic>J</italic> and <italic>H</italic> do not cross, although one can contain another, i.e., either <italic>J</italic> ⊂ <italic>H</italic>, or <italic>H</italic> ⊂ <italic>J</italic>, or <italic>J</italic> ∩ <italic>H</italic> = ∅. Furthermore, any interesting interval has at most log<italic>W</italic> ancestors.</p>
<p>For any node <italic>N</italic>, let 
<inline-graphic xlink:href="algorithms-04-00200i4.gif"/>(<italic>N</italic>) be the set of intervals that have been monitored by <italic>N</italic> so far. The following fact can be verified from the update procedure.</p></sec>
<sec>
<title>Fact 2</title>
<p>Consider a node <italic>N</italic> in 
<inline-formula>
<mml:math id="mm79" display="inline">
<mml:semantics id="sm79">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, where <italic>i</italic>(<italic>N</italic>) = <italic>J</italic>.</p>
<list list-type="bullet">
<list-item>
<p>If <italic>J</italic> covers or is to the right of <italic>t</italic>, then all intervals in 
<inline-graphic xlink:href="algorithms-04-00200i4.gif"/>(<italic>N</italic>) cover or are to the right of <italic>t</italic>.</p></list-item>
<list-item>
<p>If <italic>J</italic> is to the left of <italic>t</italic>, then all intervals in 
<inline-graphic xlink:href="algorithms-04-00200i4.gif"/>(<italic>N</italic>) are to the left of <italic>t</italic>.</p></list-item></list>
<p>We say that <italic>N covers or is to the right of t</italic> if the intervals in 
<inline-graphic xlink:href="algorithms-04-00200i4.gif"/>(<italic>N</italic>) cover or are to the right of <italic>t</italic>; otherwise, <italic>N</italic> is <italic>to the left of t</italic>. For any queue 
<inline-formula>
<mml:math id="mm80" display="inline">
<mml:semantics id="sm80">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, let alive 
<inline-formula>
<mml:math id="mm81" display="inline">
<mml:semantics id="sm81">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> be the set of nodes currently in 
<inline-formula>
<mml:math id="mm82" display="inline">
<mml:semantics id="sm82">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, dead 
<inline-formula>
<mml:math id="mm83" display="inline">
<mml:semantics id="sm83">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> be those nodes of 
<inline-formula>
<mml:math id="mm84" display="inline">
<mml:semantics id="sm84">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> that have already been deleted (because of Line 5 of the procedure Process( )), and node 
<inline-formula>
<mml:math id="mm85" display="inline">
<mml:semantics id="sm85">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>∪</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>. Note that the estimate <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>i</sub></italic>]) is the value sum of the nodes in alive 
<inline-formula>
<mml:math id="mm86" display="inline">
<mml:semantics id="sm86">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> that cover or are to the right of <italic>t</italic>. For simplicity, we need to express it more succinctly. Let
<disp-formula id="FD7">
<mml:math id="mm87" display="block">
<mml:semantics id="sm87">
<mml:mrow>
<mml:mtext>alive</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mo>∪</mml:mo>
<mml:mo stretchy="false">{</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">∣</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mtext>Q</mml:mtext>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo></mml:mrow></mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>be the set of nodes currently in 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic>. Define dead(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic>) and node(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic>) similarly. For any item <italic>a</italic> and any subset <italic>X</italic> ⊆ node(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic>), let <italic>X<sup>a</sup></italic> be the set of nodes in <italic>X</italic> that are monitoring <italic>a</italic> (and thus are the nodes from 
<inline-formula>
<mml:math id="mm88" display="inline">
<mml:semantics id="sm88">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>). For any <italic>t</italic> ∈ <italic>I</italic>, let <italic>X</italic><sub>≥<italic>t</italic></sub> denote the set of nodes in <italic>X</italic> that cover or are to the right of <italic>t</italic>. Define <italic>v</italic>(<italic>X</italic>) = Σ<sub><italic>N</italic>∈<italic>X</italic></sub> <italic>v</italic>(<italic>N</italic>) and <italic>d</italic>(<italic>X</italic>) = Σ<sub><italic>N</italic>∈<italic>X</italic></sub> <italic>d</italic>(<italic>N</italic>). Then, <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) can be expressed as follows:
<disp-formula id="FD8">
<mml:math id="mm89" display="block">
<mml:semantics id="sm89">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The following theorem analyzes its accuracy, as well as gives the size of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic>.</p></sec>
<sec>
<title>Lemma 3</title>
<p>For any <italic>t</italic> ∈ <italic>I</italic>, <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) − 
<inline-formula>
<mml:math id="mm90" display="inline">
<mml:semantics id="sm90">
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>κ</mml:mi></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula><italic>f</italic><sub>*</sub>(<italic>I</italic>) ≤ <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) ≤ <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) + <italic>λ</italic> log<italic>W</italic>. Furthermore, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>I,λ,κ</italic></sub> has size <italic>O</italic>(<italic>f</italic><sub>*</sub>(<italic>I</italic>)/<italic>λ</italic> + <italic>κ</italic>) words.</p>
<sec>
<title>Proof</title>
<p>Recall that 
<inline-formula>
<mml:math id="mm91" display="inline">
<mml:semantics id="sm91">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>. Consider any node <italic>N</italic> ∈ alive 
<inline-formula>
<mml:math id="mm92" display="inline">
<mml:semantics id="sm92">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula>. Note that <italic>v</italic>(<italic>N</italic>) = Σ<sub><italic>J</italic>∈
<inline-graphic xlink:href="algorithms-04-00200i5.gif"/>(<italic>N</italic>)</sub> <italic>v</italic><sub>add</sub>(<italic>N, J</italic>) where <italic>v</italic><sub>add</sub>(<italic>N, J</italic>) is the value added to <italic>v</italic>(<italic>N</italic>) during the period when <italic>i</italic>(<italic>N</italic>) = <italic>J</italic>. By Fact 2, we can divide it as <italic>v</italic>(<italic>N</italic>) = Σ{<italic>v</italic><sub>add</sub>(<italic>N, J</italic>) | <italic>J</italic> covers <italic>t</italic>} + Σ {<italic>v</italic><sub>add</sub>(<italic>N, J</italic>) | <italic>J</italic> is to the right of <italic>t</italic>}. It follows that
<disp-formula id="FD9">
<label>(5)</label>
<mml:math id="mm93" display="block">
<mml:semantics id="sm93">
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>∈</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>N</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left"/>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>∈</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mtext>add</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>N</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>J</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">∣</mml:mo>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mspace width="0.2em"/>
<mml:mtext>covers</mml:mtext>
<mml:mspace width="0.2em"/>
<mml:mi>t</mml:mi></mml:mrow></mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>∈</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mtext>add</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>N</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>J</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">∣</mml:mo>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mspace width="0.2em"/>
<mml:mtext>is to the right of</mml:mtext>
<mml:mspace width="0.2em"/>
<mml:mi>t</mml:mi></mml:mrow></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Note that 
<inline-formula>
<mml:math id="mm94" display="inline">
<mml:semantics id="sm94">
<mml:mrow>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>∈</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mtext>add</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>N</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>J</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">∣</mml:mo>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mspace width="0.2em"/>
<mml:mtext>is to the right of</mml:mtext>
<mml:mspace width="0.2em"/>
<mml:mi>t</mml:mi></mml:mrow></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, because if an arrived item (<italic>a, u</italic>) causes an increase of <italic>v</italic><sub>add</sub>(<italic>N, J</italic>) for some <italic>J</italic> that is to the right of <italic>t</italic>, then <italic>u</italic> must be in [<italic>t, r<sub>I</sub></italic>]. By <xref rid="FD9" ref-type="disp-formula">Equation (5)</xref>, to show the second inequality of the lemma, it suffices to show that 
<inline-formula>
<mml:math id="mm95" display="inline">
<mml:semantics id="sm95">
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mi>o</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>∈</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mtext>add</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>N</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>J</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">∣</mml:mo>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mspace width="0.2em"/>
<mml:mtext>covers</mml:mtext>
<mml:mspace width="0.2em"/>
<mml:mi>t</mml:mi></mml:mrow></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mtext>add</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mtext>add</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mtext>add</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi>κ</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>κ</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> is no greater than <italic>λ</italic> log<italic>W</italic>, as follows.</p>
<p>Without loss of generality, suppose |<italic>J</italic><sub>1</sub>| ≥ |<italic>J</italic><sub>2</sub>| ≥ ⋯≥ |<italic>J<sub>κ</sub></italic>|. It can be verified that once an interval <italic>J</italic> is assigned to a node, it will not be assigned to other nodes; thus the <italic>J<sub>i</sub></italic>'s are distinct. Furthermore, note that for 1 ≤ <italic>i</italic> &lt; <italic>k, J<sub>κ</sub></italic> ⊂ <italic>J<sub>i</sub></italic> because (i) <italic>t</italic> is in both <italic>J<sub>i</sub></italic> and <italic>J<sub>κ</sub></italic>; (ii) <italic>J<sub>κ</sub></italic> is the smallest interval; and (iii) interesting intervals do not cross; thus <italic>J<sub>κ</sub></italic> is a descendant of <italic>J<sub>i</sub></italic>, and together with Fact 1, <italic>k</italic> ≤ log<italic>W</italic>. By Line 3 of the procedure Update( ), <italic>v</italic><sub>add</sub>(<italic>N<sub>i</sub>, J<sub>i</sub></italic>) ≤ <italic>λ</italic> for 1 ≤ <italic>i</italic> ≤ <italic>k</italic>. It follows that <italic>S<sub>o</sub></italic> ≤ <italic>λ</italic> log<italic>W</italic>.</p>
<p>For the first inequality of the lemma, it is clearer to use 
<inline-formula>
<mml:math id="mm96" display="inline">
<mml:semantics id="sm96">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>. Note that every arrived item (<italic>a, u</italic>) with <italic>u</italic> ∈ [<italic>t, r<sub>I</sub></italic>] increments the value of some node in node 
<inline-formula>
<mml:math id="mm97" display="inline">
<mml:semantics id="sm97">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>; thus 
<inline-formula>
<mml:math id="mm98" display="inline">
<mml:semantics id="sm98">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>node</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> and
<disp-formula id="FD10">
<mml:math id="mm99" display="block">
<mml:semantics id="sm99">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>node</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>From Lines 4–6 of the procedure Process( ), when we delete a node <italic>N, v</italic>(<italic>N</italic>) = <italic>d</italic>(<italic>N</italic>). Hence, 
<inline-formula>
<mml:math id="mm100" display="inline">
<mml:semantics id="sm100">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, which is equal to the total number of debit operations made to these dead nodes. Since whenever we make a debit operation to 
<inline-formula>
<mml:math id="mm101" display="inline">
<mml:semantics id="sm101">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, we will make a debit operation to <italic>κ</italic> − 1 other queues,
<disp-formula id="FD11">
<label>(6)</label>
<mml:math id="mm102" display="block">
<mml:semantics id="sm102">
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>node</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>node</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>In summary, we have 
<inline-formula>
<mml:math id="mm103" display="inline">
<mml:semantics id="sm103">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>/</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>, and the first inequality of the lemma follows.</p>
<p>For the space, we say that a node is born-rich if it is created because of Line 5 of the procedure Update( ) (and thus has <italic>λ</italic> items under its belt); otherwise it is born-poor. Obviously, there are at most <italic>f</italic><sub>*</sub>(<italic>I</italic>)/<italic>λ</italic> born-rich nodes. For born-poor nodes, we need to store at most <italic>κ</italic> of them because every queue has one born-poor node (the rightmost one), and we only need to store at most <italic>κ</italic> non-trivial queues; the space bound follows.</p>
<p>If we set <italic>λ</italic> = <italic>λ<sub>i</sub></italic> = <italic>∊</italic>2<sup><italic>i</italic></sup>/log<italic>W</italic> and 
<inline-formula>
<mml:math id="mm104" display="inline">
<mml:semantics id="sm104">
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula>, then Lemma 3 asserts that 
<inline-formula>
<mml:math id="mm105" display="inline">
<mml:semantics id="sm105">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>λ</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula> is an 
<inline-formula>
<mml:math id="mm106" display="inline">
<mml:semantics id="sm106">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:msup>
<mml:mn>2</mml:mn>
<mml:mi>i</mml:mi></mml:msup></mml:mrow></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo>+</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>-space data structure that enables us to obtain, for any item <italic>a</italic> ∈ <italic>U</italic> and any timestamp <italic>t</italic> ∈ <italic>I</italic>, an estimate <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) that satisfies
<disp-formula id="FD12">
<mml:math id="mm107" display="block">
<mml:semantics id="sm107">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mi>∊</mml:mi>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mi>∊</mml:mi>
<mml:msup>
<mml:mn>2</mml:mn>
<mml:mi>i</mml:mi></mml:msup></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>If <italic>f</italic><sub>*</sub>(<italic>I</italic>) does not vary too much, we can determine the <italic>i</italic> such that <italic>f</italic><sub>*</sub> (<italic>I</italic>) ≈ 2<italic><sup>i</sup></italic>, and 
<inline-formula>
<mml:math id="mm108" display="inline">
<mml:semantics id="sm108">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula> is an 
<inline-formula>
<mml:math id="mm109" display="inline">
<mml:semantics id="sm109">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> space data structure that guarantees an error bound of <italic>O</italic>(<italic>∊f</italic><sub>*</sub>(<italic>I</italic>)). However, this approach has two obvious shortcomings:
<list list-type="order">
<list-item>
<p><italic>f</italic><sub>*</sub>(<italic>I</italic>) may vary from some small value to a value as large as <italic>B</italic>, the maximum number of items falling in a window of size <italic>W</italic>; hence, there may not be any fixed <italic>i</italic> that always satisfies <italic>f</italic><sub>*</sub> (<italic>I</italic>) ≈ 2<italic><sup>i</sup></italic></p></list-item>
<list-item>
<p>To estimate <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]), we need an error bound of <italic>∊f</italic><sub>*</sub>([<italic>t, r<sub>I</sub></italic>]), not <italic>∊f</italic><sub>*</sub>(<italic>I</italic>).</p></list-item></list></p>
<p>We will explain how to overcome these two shortcomings in the next section.</p></sec></sec></sec>
<sec sec-type="methods">
<label>4.</label>
<title>Our Data Structure for <italic>∊</italic>-approximate Counting</title>
<p>The first shortcoming of the approach given in Section 3 is easy to overcome: a natural idea is to maintain 
<inline-formula>
<mml:math id="mm110" display="inline">
<mml:semantics id="sm110">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula> for different <italic>λ<sub>i</sub></italic> to handle different possible values of <italic>f</italic><sub>*</sub>(<italic>I</italic>). The second shortcoming is more fundamental. To overcome it, we need to modify 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic> substantially The result is a new and complicated data structure 
<inline-formula>
<mml:math id="mm111" display="inline">
<mml:semantics id="sm111">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, where <italic>Y</italic> is an integer determining the accuracy As asserted in Theorem 7 below, this data structure uses 
<inline-formula>
<mml:math id="mm112" display="inline">
<mml:semantics id="sm112">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> space, supports 
<inline-formula>
<mml:math id="mm113" display="inline">
<mml:semantics id="sm113">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>+</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> update time, and for any <italic>t</italic> ∈ <italic>I</italic>, it offers the following special guarantee:
<list list-type="bullet">
<list-item>
<p>When 
<inline-formula>
<mml:math id="mm114" display="inline">
<mml:semantics id="sm114">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mi>Y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> can return, for any item <italic>a</italic>, an estimate <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) of <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) such that |<italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>])−<italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>])|≤<italic>∊Y</italic>.</p></list-item>
<list-item>
<p>When 
<inline-formula>
<mml:math id="mm115" display="inline">
<mml:semantics id="sm115">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>&gt;</mml:mo>
<mml:mi>Y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> does not have any error bound on its estimate <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]).</p></list-item></list></p>
<p>Before giving the details of 
<inline-formula>
<mml:math id="mm116" display="inline">
<mml:semantics id="sm116">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, let us explain how to use it to build the data structure 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><italic><sub>I,∊</sub></italic> mentioned in Section 2 for the <italic>∊</italic>-approximate counting problem. To build 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><italic><sub>I,∊</sub></italic>, we need another 
<inline-formula>
<mml:math id="mm117" display="inline">
<mml:semantics id="sm117">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>-space data structure 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/><italic><sub>I,∊</sub></italic>, which is a simple adaption of the data structure 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/><italic><sub>∊</sub></italic> of Cormode <italic>et al.</italic> [<xref ref-type="bibr" rid="b1-algorithms-04-00200">1</xref>] for the <italic>∊</italic>-approximate basic counting problem; 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/><italic><sub>I,∊</sub></italic> enables us to find, for any <italic>t</italic> ∈ <italic>I</italic>, an estimate <italic>f̂</italic><sub>*</sub>([<italic>t, r<sub>I</sub></italic>]) of <italic>f</italic><sub>*</sub>([<italic>t, r<sub>I</sub></italic>]) such that
<disp-formula id="FD13">
<label>(7)</label>
<mml:math id="mm118" display="block">
<mml:semantics id="sm118">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>+</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/><italic><sub>I,∊</sub></italic> is implemented as follows. During execution, we maintain the data structure 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/><italic><sub>∊</sub></italic><sub>/4</sub> of Cormode <italic>et al.</italic> to count the items in the sliding window. When <italic>τ</italic><sub>cur</sub> = <italic>r<sub>I</sub></italic>, we duplicate 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/><italic><sub>∊</sub></italic><sub>/4</sub> and get 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/>′. Then, 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/>′ is updated as if <italic>τ</italic><sub>cur</sub> was fixed at <italic>r<sub>I</sub></italic>. To get the estimate <italic>f̂<sub>*</sub></italic>([<italic>t, r<sub>I</sub></italic>]), we first obtain an estimate <italic>f</italic>′ of <italic>f<sub>*</sub></italic>([<italic>t, r<sub>I</sub></italic>]) from 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/>′, which satisfies 
<inline-formula>
<mml:math id="mm119" display="inline">
<mml:semantics id="sm119">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mi>f</mml:mi>
<mml:mo>′</mml:mo></mml:msup>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>. Then, 
<inline-formula>
<mml:math id="mm120" display="inline">
<mml:semantics id="sm120">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo>−</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mo>/</mml:mo>
<mml:mn>4</mml:mn></mml:mrow></mml:mfrac>
<mml:msup>
<mml:mi>f</mml:mi>
<mml:mo>′</mml:mo></mml:msup></mml:mrow></mml:semantics></mml:math></inline-formula>. It can be verified that <italic>f̂</italic><sub>*</sub>([<italic>t, r<sub>I</sub></italic>]) satisfies <xref rid="FD13" ref-type="disp-formula">Equation (7)</xref>. Our data structure 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><italic><sub>I,∊</sub></italic> is composed of (i) 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/><italic><sub>I,∊</sub></italic>, and (ii) 
<inline-formula>
<mml:math id="mm121" display="inline">
<mml:semantics id="sm121">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mo>/</mml:mo>
<mml:mn>4</mml:mn></mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mn>2</mml:mn>
<mml:mi>i</mml:mi></mml:msup></mml:mrow></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> for each integer <italic>i</italic> from 
<inline-formula>
<mml:math id="mm122" display="inline">
<mml:semantics id="sm122">
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mspace width="0.2em"/>
<mml:mtext>to</mml:mtext>
<mml:mo>log</mml:mo>
<mml:mi>B</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>. It also maintains a brute-force 
<inline-formula>
<mml:math id="mm123" display="inline">
<mml:semantics id="sm123">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>-space data structure for remembering the 
<inline-formula>
<mml:math id="mm124" display="inline">
<mml:semantics id="sm124">
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula> items (<italic>a, u</italic>) with the largest <italic>u</italic> ∈ <italic>I</italic>; this brute-force data structure will be used for finding <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) only when 
<inline-formula>
<mml:math id="mm125" display="inline">
<mml:semantics id="sm125">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<sec>
<title>Theorem 4</title>
<list list-type="roman-lower">
<list-item>
<p>The data structure 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><sub><italic>I,∊</italic></sub> has size 
<inline-formula>
<mml:math id="mm126" display="inline">
<mml:semantics id="sm126">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> words, and supports 
<inline-formula>
<mml:math id="mm127" display="inline">
<mml:semantics id="sm127">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>+</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> update time.</p></list-item>
<list-item>
<p>Given 
<inline-graphic xlink:href="algorithms-04-00200i2.gif"/><sub><italic>I,∊</italic></sub>, we can find, for any <italic>a</italic> ∈ Σ and <italic>t</italic> ∈ <italic>I</italic>, an estimate of <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) of <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) such that |<italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) − <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>])| ≤ <italic>∊f</italic><sub>*</sub>([<italic>t, r<sub>I</sub></italic>]).</p></list-item></list>
<sec>
<title>Proof</title>
<p>Statement (i) is straightforward because there are 
<inline-formula>
<mml:math id="mm128" display="inline">
<mml:semantics id="sm128">
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>B</mml:mi>
<mml:mo>−</mml:mo>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> different 
<inline-formula>
<mml:math id="mm129" display="inline">
<mml:semantics id="sm129">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, each has size 
<inline-formula>
<mml:math id="mm130" display="inline">
<mml:semantics id="sm130">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> and takes 
<inline-formula>
<mml:math id="mm131" display="inline">
<mml:semantics id="sm131">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>+</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> time for an update. For Statement (ii), we describe how to get the estimate and analyze its accuracy.</p>
<p>First, we use 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/><italic><sub>I,∊</sub></italic> to get the estimate <italic>f̂</italic><sub>*</sub>([<italic>t, r<sub>I</sub></italic>]). If 
<inline-formula>
<mml:math id="mm132" display="inline">
<mml:semantics id="sm132">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>, then 
<inline-formula>
<mml:math id="mm133" display="inline">
<mml:semantics id="sm133">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula> and we can use the brute-force data structure to find <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) exactly. Otherwise, we determine the <italic>i</italic> with 2<italic><sup>i</sup></italic><sup>−1</sup> &lt; <italic>f̂<sub>*</sub></italic>([<italic>t, r<sub>I</sub></italic>]) ≤ 2<italic><sup>i</sup></italic>. Note that
<list list-type="bullet">
<list-item>
<p>
<inline-formula>
<mml:math id="mm134" display="inline">
<mml:semantics id="sm134">
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>≥</mml:mo>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:semantics></mml:math></inline-formula> and we have the data structure 
<inline-formula>
<mml:math id="mm135" display="inline">
<mml:semantics id="sm135">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac></mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mn>2</mml:mn>
<mml:mi>i</mml:mi></mml:msup></mml:mrow></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, and</p></list-item>
<list-item>
<p><italic>f</italic><sub>*</sub>([<italic>t, r<sub>I</sub></italic>]) ≤ <italic>f̂</italic><sub>*</sub>([<italic>t, r<sub>I</sub></italic>]) ≤ 2<italic><sup>i</sup></italic>.</p></list-item></list></p>
<p>We use 
<inline-formula>
<mml:math id="mm136" display="inline">
<mml:semantics id="sm136">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac></mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mn>2</mml:mn>
<mml:mi>i</mml:mi></mml:msup></mml:mrow></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> to obtain an estimate <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) with 
<inline-formula>
<mml:math id="mm137" display="inline">
<mml:semantics id="sm137">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:msup>
<mml:mn>2</mml:mn>
<mml:mi>i</mml:mi></mml:msup></mml:mrow></mml:semantics></mml:math></inline-formula>. By <xref rid="FD13" ref-type="disp-formula">Equation (7)</xref>, 2<italic><sup>i</sup></italic><sup>−1</sup> &lt; <italic>f̂</italic><sub>*</sub>([<italic>t, r<sub>I</sub></italic>]) ≤ (1 + <italic>∊</italic>)<italic>f</italic><sub>*</sub>([<italic>t, r<sub>I</sub></italic>]). Combining the two inequalities we have
<disp-formula id="FD14">
<mml:math id="mm138" display="block">
<mml:semantics id="sm138">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>−</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mn>2</mml:mn>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mn>2</mml:mn>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>&lt;</mml:mo>
<mml:mn>2</mml:mn>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mi>∊</mml:mi>
<mml:mn>4</mml:mn></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>+</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mi>∊</mml:mi>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>We now describe the construction of 
<inline-formula>
<mml:math id="mm139" display="inline">
<mml:semantics id="sm139">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. First, we describe an 
<inline-formula>
<mml:math id="mm140" display="inline">
<mml:semantics id="sm140">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>-space version of the data structure. Then, we show in the next section how to reduce the space to 
<inline-formula>
<mml:math id="mm141" display="inline">
<mml:semantics id="sm141">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>. In our discussion, we fix <italic>λ</italic> = <italic>∊Y</italic>/log<italic>W</italic> and 
<inline-formula>
<mml:math id="mm142" display="inline">
<mml:semantics id="sm142">
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>4</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<p>Initially, 
<inline-formula>
<mml:math id="mm143" display="inline">
<mml:semantics id="sm143">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is just the data structure 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic>. By Lemma 3, we know that its size is 
<inline-formula>
<mml:math id="mm144" display="inline">
<mml:semantics id="sm144">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi>λ</mml:mi></mml:mfrac>
<mml:mo>+</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo>+</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, which is 
<inline-formula>
<mml:math id="mm145" display="inline">
<mml:semantics id="sm145">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> when <italic>f</italic><sub>*</sub>(<italic>I</italic>) ≤ <italic>Y</italic>. However, it is much larger than 
<inline-formula>
<mml:math id="mm146" display="inline">
<mml:semantics id="sm146">
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula> when <italic>f</italic><sub>*</sub>(<italic>I</italic>) ≫ <italic>Y</italic>, and to maintain small space usage in such case, we trim 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic> by throwing away a significant number of nodes. This is acceptable because 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic> only guarantees good estimates for those <italic>t</italic> ∈ <italic>I</italic> with <italic>f</italic><sub>*</sub>([<italic>t, r<sub>I</sub></italic>]) ≤ <italic>Y</italic>. The trimming process is rather tricky. The natural idea of throwing away all the nodes to the left of <italic>t</italic> when we find <italic>f</italic><sub>*</sub>([<italic>t, r<sub>I</sub></italic>]) &gt; <italic>Y</italic> does not work because the resulting data structure may return estimates with error larger than the required <italic>∊Y</italic> bound. For example, let <italic>I</italic> = [1, <italic>W</italic>]. For each item <italic>a<sub>i</sub></italic> ∈ {<italic>a</italic><sub>1</sub>, <italic>a</italic><sub>2</sub>, …, <italic>a</italic><sub><italic>κ</italic>−1</sub>}, there are <italic>m</italic> = <italic>Y/κ</italic> copies of (<italic>a<sub>i</sub>, t</italic> + 1) arrive at time <italic>W</italic> + <italic>t</italic> for every <italic>t</italic> ∈ [0, <italic>W</italic> − 1]. Also, there are <italic>m</italic> copies of (<italic>a, W</italic>) arrive at time <italic>W</italic> + <italic>t</italic> for every <italic>t</italic> ∈ [0, <italic>W</italic> − 1]. Hence, at each time <italic>W</italic> + <italic>t</italic>, there are <italic>mκ</italic> = <italic>Y</italic> items with timestamps in [<italic>t, W</italic>] arrives, <italic>m</italic> items for each of the <italic>κ</italic> item name in {<italic>a, a</italic><sub>1</sub>, …, <italic>a</italic><sub><italic>κ</italic>−1</sub>}. We are interested in the accuracy of the estimate <italic>f̂<sub>a</sub></italic>([<italic>W, W</italic>]). It can be verified that at each time <italic>W</italic> + <italic>t</italic>, Lines 4–5 of the procedure Process( ) will eventually trivialize 
<inline-formula>
<mml:math id="mm147" display="inline">
<mml:semantics id="sm147">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and thus <italic>f̂<sub>a</sub></italic>([<italic>W, W</italic>]) = 0. Since <italic>f<sub>a</sub></italic>([<italic>W, W</italic>]) = (<italic>t</italic> + 1)<italic>m</italic>, |<italic>f̂<sub>a</sub></italic>([<italic>W, W</italic>]) − <italic>f<sub>a</sub></italic>([<italic>W, W</italic>])| = (<italic>t</italic> + 1)<italic>m</italic>. When <italic>t</italic> = 2<italic>∊Y/m</italic> − 1, the absolute error is 2<italic>∊Y</italic> which is larger than the required error bound <italic>∊Y</italic>.</p>
<p>To describe the right trimming procedure, we need some basic operations. Consider any 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> where <italic>J</italic> = [<italic>p, q</italic>]. The following operation splits 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> into two smaller data structures 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>ℓ</sub>,λ,κ</sub></italic> and 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>r</sub>,λ,κ</sub></italic> where <italic>J<sub>t</sub></italic> = [<italic>p, m</italic>] and <italic>J<sub>r</sub></italic> = [<italic>m</italic>+ 1, <italic>q</italic>] with <italic>m</italic> = ⌊(<italic>p</italic> + <italic>q</italic>)/2⌋.</p>
<array>
<tbody>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr>
<tr>
<td align="left" valign="top" colspan="2">
<mml:math id="mm148" display="inline">
<mml:semantics id="sm148">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math>.Split(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>)</td></tr>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr>
<tr>
<td align="right" valign="top">1:</td>
<td align="left" valign="top"><bold>for each</bold> non-trivial queue 
<mml:math id="mm149" display="inline">
<mml:semantics id="sm149">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mo>κ</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math> <bold>do</bold></td></tr>
<tr>
<td align="right" valign="top">2:</td>
<td align="left" valign="top"> <bold>if</bold> (
<mml:math id="mm150" display="inline">
<mml:semantics id="sm150">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math> has only one node <italic>N</italic> monitoring the whole interval <italic>J</italic>) <bold>then</bold></td></tr>
<tr>
<td align="right" valign="top">3:</td>
<td align="left" valign="top">  /* refine <italic>J</italic> */</td></tr>
<tr>
<td align="right" valign="top">4:</td>
<td align="left" valign="top">  insert a new node <italic>N</italic>′ immediately to the left of <italic>N</italic> with <italic>v</italic>(<italic>N</italic>′) = <italic>d</italic>(<italic>N</italic>′) = 0;</td></tr>
<tr>
<td align="right" valign="top">5:</td>
<td align="left" valign="top">  <italic>i</italic>(<italic>N</italic>′) = <italic>J<sub>ℓ</sub></italic>, and <italic>i</italic>(<italic>N</italic>) = <italic>J<sub>r</sub></italic>;</td></tr>
<tr>
<td align="right" valign="top">6:</td>
<td align="left" valign="top"> <bold>end if</bold></td></tr>
<tr>
<td align="right" valign="top">7:</td>
<td align="left" valign="top"> divide 
<mml:math id="mm151" display="inline">
<mml:semantics id="sm151">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math> into two sub-queues 
<mml:math id="mm152" display="inline">
<mml:semantics id="sm152">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mo>ℓ</mml:mo></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math> and 
<mml:math id="mm153" display="inline">
<mml:semantics id="sm153">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math> where</td></tr>
<tr>
<td align="right" valign="top">8:</td>
<td align="left" valign="top">  
<mml:math id="mm154" display="inline">
<mml:semantics id="sm154">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mo>ℓ</mml:mo></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math> contains the nodes monitoring some sub-intervals of <italic>J<sub>ℓ</sub></italic>, and</td></tr>
<tr>
<td align="right" valign="top">9:</td>
<td align="left" valign="top">  
<mml:math id="mm155" display="inline">
<mml:semantics id="sm155">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math> contains those monitoring some sub-intervals of <italic>J<sub>r</sub></italic>;</td></tr>
<tr>
<td align="right" valign="top">10:</td>
<td align="left" valign="top"> put 
<mml:math id="mm156" display="inline">
<mml:semantics id="sm156">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mo>ℓ</mml:mo></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math> in 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>ℓ</sub>,λ,κ</sub></italic> and 
<mml:math id="mm157" display="inline">
<mml:semantics id="sm157">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math> in 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>r</sub>,λ,κ</sub></italic>.</td></tr>
<tr>
<td align="right" valign="top">11:</td>
<td align="left" valign="top"><bold>end for</bold></td></tr>
<tr>
<td align="right" valign="top">12:</td>
<td align="left" valign="top">/* For a trivial 
<mml:math id="mm158" display="inline">
<mml:semantics id="sm158">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math>, its two children in 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>ℓ</sub>,λ,κ</sub></italic> and 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>r</sub>,λ,κ</sub></italic> are also trivial. */</td></tr>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr></tbody></array>
<p>We say that 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>ℓ</sub>,λ,κ</sub></italic> and 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>r</sub>,λ,κ</sub></italic> are the left and right child of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>r</sub>,λ,κ</sub></italic>, respectively. <xref ref-type="fig" rid="f3-algorithms-04-00200">Figure 3</xref> gives an example of Split(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[1,8],<italic>λ,κ</italic></sub>), the split of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[1,8],<italic>λ,κ</italic></sub>, which has three non-trivial queues 
<inline-formula>
<mml:math id="mm159" display="inline">
<mml:semantics id="sm159">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, 
<inline-formula>
<mml:math id="mm160" display="inline">
<mml:semantics id="sm160">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>b</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and 
<inline-formula>
<mml:math id="mm161" display="inline">
<mml:semantics id="sm161">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, into 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[1, 4],<italic>λ,κ</italic></sub> and 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[5, 8],<italic>λ,κ</italic></sub>. Note that the queues for <italic>b</italic> and <italic>c</italic> in 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[1, 4],<italic>λ,κ</italic></sub> are trivial and we have not stored them.</p>
<p>Using Split( ), we can trim, for example, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[</sub><italic><sub>p,p</sub></italic><sub>+1],<italic>λ,κ</italic></sub> into 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[</sub><italic><sub>p</sub></italic><sub>+1,<italic>p</italic>+1],<italic>λ,κ</italic></sub> as follows: Split 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[<italic>p,p</italic>+1],<italic>λ,κ</italic></sub> into 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[<italic>p,p</italic>],<italic>λ,κ</italic></sub> and 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[<italic>p</italic>+1,<italic>p</italic>+1],<italic>λ,κ</italic></sub>, and throw away 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[<italic>p, p</italic>],<italic>λ,κ</italic></sub>. The following recursive procedure LeftRefine( ) generalizes this idea for larger <italic>J</italic>: Given 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> = 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[<italic>p, q</italic>],<italic>λ,κ</italic></sub>, it returns a list 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>0</sub>,<italic>λ,κ</italic></sub>,
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic></sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>m</sub>,λ,κ</sub></italic>〉 where the <italic>J<sub>i</sub></italic>'s form a partition of [<italic>p, q</italic>], and <italic>J</italic><sub>0</sub> = [<italic>p, p</italic>]. Throwing away 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>0</sub>,<italic>λ,κ</italic></sub>, and the remaining 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J<sub>i</sub>,λ,κ</italic></sub>'s all together monitor [<italic>p</italic> + 1, <italic>q</italic>].</p>
<array>
<tbody>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr>
<tr>
<td align="left" valign="top" colspan="2">
<mml:math id="mm162" display="inline">
<mml:semantics id="sm162">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math>.LeftRefine (
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[<italic>p,q</italic>],<italic>λ,κ</italic></sub>)</td></tr>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr>
<tr>
<td align="right" valign="top">1:</td>
<td align="left" valign="top"><bold>if</bold> (|[<italic>p, q</italic>]| = |[<italic>p, p</italic>]| = 1) <bold>then</bold></td></tr>
<tr>
<td align="right" valign="top">2:</td>
<td align="left" valign="top"> return 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[<italic>p,p</italic>],<italic>λ,κ</italic></sub>〉;</td></tr>
<tr>
<td align="right" valign="top">3:</td>
<td align="left" valign="top"><bold>else</bold></td></tr>
<tr>
<td align="right" valign="top">4:</td>
<td align="left" valign="top"> split 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[<italic>p,q</italic>],<italic>λ,κ</italic></sub> into its left child 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[<italic>p, m</italic>],<italic>λ,κ</italic></sub> and right child 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[<italic>m</italic>+1,<italic>q</italic>],<italic>λ,κ</italic></sub></td></tr>
<tr>
<td align="right" valign="top">5:</td>
<td align="left" valign="top"> /* where <italic>m</italic> = ⌊(<italic>p</italic> + <italic>q</italic>)/2⌋ */;</td></tr>
<tr>
<td align="right" valign="top">6:</td>
<td align="left" valign="top"> <italic>L</italic> = LeftRefine(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[<italic>p, m</italic>],<italic>λ,κ</italic></sub>);</td></tr>
<tr>
<td align="right" valign="top">7:</td>
<td align="left" valign="top"> suppose <italic>L</italic> = 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>0</sub>,<italic>λ,κ</italic></sub>, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic></sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J<sub>k</sub>,λ,κ</italic></sub>〉;</td></tr>
<tr>
<td align="right" valign="top">8:</td>
<td align="left" valign="top"> return 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>0</sub>,<italic>λ,κ</italic></sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>k</sub>,λ,κ</sub></italic> 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[<italic>m</italic>+1,<italic>q</italic>],<italic>λ,κ</italic></sub>〉;</td></tr>
<tr>
<td align="right" valign="top">9:</td>
<td align="left" valign="top"><bold>end if</bold></td></tr>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr></tbody></array>
<p>For example, LeftRefine(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[1,8],<italic>λ,κ</italic></sub>) gives us the list 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[1,1],<italic>λ,κ</italic></sub>,
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[2, 2],<italic>λ,κ</italic></sub>,
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[3, 4],<italic>λ,κ</italic></sub>,
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[5,8],<italic>λ,κ</italic></sub>〉. Note that <italic>J</italic><sub>0</sub> = [<italic>p, p</italic>] because the recursion stops only when |[<italic>p, q</italic>]| = 1. The list returned by LeftRefine(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[<italic>p, q</italic>],<italic>λ,κ</italic></sub>) has another useful property, which we describe below.</p>
<p>Given <italic>L</italic> = 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>Z</italic><sub>1</sub>,<italic>λ,κ</italic></sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>Z<sub>k</sub>,λ,κ</sub></italic>), we say that <italic>L</italic> is an <italic>interesting-partition</italic> covering the interval <italic>J</italic> if (i) the <italic>Z<sub>i</sub></italic>'s are all interesting intervals and form a partition of <italic>J</italic>; and (ii) for 1 ≤ <italic>i</italic> &lt; <italic>k, Z<sub>i</sub></italic> is to the left of <italic>Z<sub>i</sub></italic><sub>+1</sub>, and 
<inline-formula>
<mml:math id="mm163" display="inline">
<mml:semantics id="sm163">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>. The fact below can be verified by induction on the length of the list returned by LeftRefine( ).</p></sec></sec>
<sec>
<title>Fact 3</title>
<p>Let <italic>J</italic> be an interesting interval, and <italic>L</italic> = 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>0</sub>,<italic>λ,κ</italic></sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J<sub>m</sub>,λ,κ</italic></sub>〉 be the list returned by LeftRefine(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J,λ,κ</italic></sub>). Then, the list 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic></sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>m</sub>,λ,κ</sub></italic> 〉 (i.e., the list obtained by throwing away the head 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>0</sub>,<italic>λ,κ</italic></sub> of <italic>L</italic>) is an interesting-partition covering [<italic>p</italic> + 1, <italic>q</italic>].</p>
<p>For example, if [1, 8] is an interesting interval, then the list 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[2,2],<italic>λ,κ</italic></sub>
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[3,4],<italic>λ,κ</italic></sub>
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[5,8],<italic>λ,κ</italic></sub>〉 obtained by throwing away the first element 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[1,1],<italic>λ,κ</italic></sub> from LeftRefine(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[1,8],<italic>λ,κ</italic></sub>) is an interesting-partition covering [2, 8].</p>
<p>We now give details of 
<inline-formula>
<mml:math id="mm164" display="inline">
<mml:semantics id="sm164">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. Initially, it is the interesting-partition 〈C<italic><sub>I,λ,κ</sub></italic> 〉 covering the whole interval <italic>I</italic> = [<italic>ℓ<sub>I</sub>, r<sub>I</sub></italic>]. Throughout the execution, we maintain the following invariant:
<list list-type="simple">
<list-item>
<p>(**) 
<inline-formula>
<mml:math id="mm165" display="inline">
<mml:semantics id="sm165">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is an interesting-partition covering some [<italic>p, r<sub>I</sub></italic>] ⊆ <italic>I</italic>.</p></list-item></list></p>
<p>When 
<inline-formula>
<mml:math id="mm166" display="inline">
<mml:semantics id="sm166">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> is covering [<italic>p, r<sub>I</sub></italic>], it only guarantees good estimates of <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) for <italic>t</italic> ∈ [<italic>p, r<sub>I</sub></italic>], and this estimate is obtained by
<disp-formula id="FD15">
<mml:math id="mm167" display="block">
<mml:semantics id="sm167">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>h</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>h</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi>a</mml:mi></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>(or equivalently, 
<inline-formula>
<mml:math id="mm168" display="inline">
<mml:semantics id="sm168">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>h</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>h</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, where <italic>J<sub>h</sub></italic> is the interval in {<italic>J</italic><sub>1</sub>, <italic>J</italic><sub>2</sub>, …, <italic>J<sub>m</sub></italic>} that covers <italic>t</italic>. When an item (<italic>a, u</italic>) with <italic>u</italic> ∈ [<italic>p, r<sub>I</sub></italic>] arrives, we find the unique 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>i</sub>,λ,κ</sub></italic> in 
<inline-formula>
<mml:math id="mm169" display="inline">
<mml:semantics id="sm169">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> where <italic>u</italic> ∈ <italic>J<sub>i</sub></italic>, update it by calling 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>i</sub>,λ,κ</sub></italic>. Process((<italic>a, u</italic>)). Note that this update has no effect on the other 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> in 
<inline-formula>
<mml:math id="mm170" display="inline">
<mml:semantics id="sm170">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<p>During execution, we also keep track of the largest timestamp <italic>p</italic><sub>max</sub> ∈ <italic>I</italic> such that the estimate <italic>f̂</italic><sub>*</sub>(<italic>p</italic><sub>max</sub>,<italic>r<sub>I</sub></italic>]) given by 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/><italic><sub>I,∊</sub></italic> is greater than (1 + <italic>∊</italic>)<italic>Y</italic> (which implies <italic>f</italic><sub>*</sub>([<italic>p</italic><sub>max</sub>,<italic>r<sub>I</sub></italic>]) &gt; <italic>Y</italic> because of <xref rid="FD13" ref-type="disp-formula">Equation (7)</xref>). As soon as <italic>p</italic><sub>max</sub> falls in the interval covered by 
<inline-formula>
<mml:math id="mm171" display="inline">
<mml:semantics id="sm171">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, we use the following procedure to trim 
<inline-formula>
<mml:math id="mm172" display="inline">
<mml:semantics id="sm172">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> to cover the smaller interval [<italic>p</italic><sub>max</sub> + 1, <italic>r<sub>I</sub></italic>].</p>
<p>Suppose that <italic>L</italic> = 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic></sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>i</sub>,λ,κ</sub></italic>) is an interesting-partition covering [<italic>p, r<sub>I</sub></italic>], and <italic>t</italic> ∈ [<italic>p, r<sub>I</sub></italic>]. Trim(<italic>L, t</italic>) constructs an interesting-partition covering [<italic>t</italic> + 1, <italic>r<sub>I</sub></italic>] recursively as follows.</p>
<array>
<tbody>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr>
<tr>
<td align="left" valign="top" colspan="2">
<mml:math id="mm173" display="inline">
<mml:semantics id="sm173">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math>.Trim(<italic>L, t</italic>)</td></tr>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr>
<tr>
<td align="right" valign="top">1:</td>
<td align="left" valign="top">find the unique 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>i</sub>,λ,κ</sub></italic> in <italic>L</italic> such that <italic>t</italic> ∈ <italic>J<sub>i</sub></italic>;</td></tr>
<tr>
<td align="right" valign="top">2:</td>
<td align="left" valign="top"><italic>L</italic>′ =LeftRefine(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>i</sub>,λ,κ</sub></italic>);</td></tr>
<tr>
<td align="right" valign="top">3:</td>
<td align="left" valign="top">suppose <italic>L</italic>′ = 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>K</italic><sub>0</sub>,<italic>λ,κ</italic></sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>K</italic><sub>1</sub>,<italic>λ,κ</italic></sub>, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>K<sub>ℓ</sub>,λ,κ</sub></italic>〉;</td></tr>
<tr>
<td align="right" valign="top">4:</td>
<td align="left" valign="top"><bold>if</bold> (<italic>K</italic><sub>0</sub> = [<italic>t, t</italic>]) <bold>then</bold></td></tr>
<tr>
<td align="right" valign="top">5:</td>
<td align="left" valign="top"> return 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>K</italic><sub>1</sub>,<italic>λ,κ</italic></sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>K<sub>ℓ</sub>,λ,κ</sub></italic>, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>i+1</sub>,<italic>λ,κ</italic></sub>, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>m</sub>,λ,κ</sub></italic> 〉;</td></tr>
<tr>
<td align="right" valign="top">6:</td>
<td align="left" valign="top"> /* <italic>i.e.</italic>, throw away 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic></sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub><italic>i</italic>−1</sub>,<italic>λ,κ</italic></sub>, and 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>K</italic><sub>0</sub>,<italic>λ,κ</italic></sub>, */</td></tr>
<tr>
<td align="right" valign="top">7:</td>
<td align="left" valign="top"> /* and return an interesting-partition covering [<italic>t</italic> + 1, <italic>r<sub>I</sub></italic>]. */</td></tr>
<tr>
<td align="right" valign="top">8:</td>
<td align="left" valign="top"><bold>else</bold></td></tr>
<tr>
<td align="right" valign="top">9:</td>
<td align="left" valign="top"> return Trim(〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>K</italic><sub>1</sub>,<italic>λ,κ</italic></sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>K<sub>ℓ</sub>,λ,κ</sub></italic>, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub><italic>i</italic>+1</sub>,<italic>λ,κ</italic></sub>, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J<sub>m</sub>,λ,κ</italic></sub> 〉, <italic>t</italic>).</td></tr>
<tr>
<td align="right" valign="top">10:</td>
<td align="left" valign="top"> /<italic>*</italic> throw away 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic></sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub><italic>i</italic>−1</sub>,<italic>λ,κ</italic></sub> and 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>K</italic><sub>0</sub>,<italic>λ,κ</italic></sub> */</td></tr>
<tr>
<td align="right" valign="top">11:</td>
<td align="left" valign="top"><bold>end if</bold></td></tr>
<tr>
<td valign="bottom" colspan="2">
<hr/></td></tr></tbody></array>
<p>For example, <xref ref-type="fig" rid="f4-algorithms-04-00200">Figure 4</xref> shows that when 
<inline-formula>
<mml:math id="mm174" display="inline">
<mml:semantics id="sm174">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>8</mml:mn>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, 
<inline-formula>
<mml:math id="mm175" display="inline">
<mml:semantics id="sm175">
<mml:mrow>
<mml:mtext>Trim</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> return 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[4,4],<italic>λ,κ</italic></sub>, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[5,8],<italic>λ,κ</italic></sub> 〉. Based on Fact 3, it can be verified inductively that after 
<inline-formula>
<mml:math id="mm176" display="inline">
<mml:semantics id="sm176">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>←</mml:mo>
<mml:mtext>Trim</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, the new 
<inline-formula>
<mml:math id="mm177" display="inline">
<mml:semantics id="sm177">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is an interesting-partition covering [<italic>p</italic><sub>max</sub> + 1, <italic>r<sub>I</sub></italic>]; Invariant (**) is preserved. In the rest of this section, we analyze the size of 
<inline-formula>
<mml:math id="mm178" display="inline">
<mml:semantics id="sm178">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and the accuracy of its estimates.</p>
<p>Let A<sc>ll</sc> be the set of all 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>'s that ever exist, <italic>i.e.</italic>, if 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> ∈ A<sc>ll</sc>, then either (i) it is currently in 
<inline-formula>
<mml:math id="mm179" display="inline">
<mml:semantics id="sm179">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, or (ii) it has been in 
<inline-formula>
<mml:math id="mm180" display="inline">
<mml:semantics id="sm180">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> some time earlier in the execution, but is thrown away during some trimming of 
<inline-formula>
<mml:math id="mm181" display="inline">
<mml:semantics id="sm181">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. For any <italic>p</italic> ∈ <italic>I</italic>, define
<disp-formula id="FD16">
<mml:math id="mm182" display="block">
<mml:semantics id="sm182">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mtext>ALL</mml:mtext></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>p</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mo stretchy="false">{</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">∣</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:mrow>
<mml:mtext>ALL</mml:mtext></mml:mrow>
<mml:mo>,</mml:mo>
<mml:mspace width="0.5em"/>
<mml:mtext>and</mml:mtext>
<mml:mspace width="0.5em"/>
<mml:mi>J</mml:mi>
<mml:mspace width="0.5em"/>
<mml:mtext>covers or is to the right of</mml:mtext>
<mml:mspace width="0.2em"/>
<mml:mi>p</mml:mi></mml:mrow></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Let <italic>v</italic><sub>add</sub>(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>) be the total value added to the nodes of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> during its lifespan. We now derive an upper bound on Σ<sub>
<inline-graphic xlink:href="algorithms-04-00200i3.gif"/><sub><italic>J,λ,κ</italic></sub> ∈ A<sc>ll</sc><sub>≥<italic>p</italic></sub></sub> <italic>v</italic><sub>add</sub>(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J,λ,κ</italic></sub>), which is crucial for getting a tight error bound on the accuracy of 
<inline-formula>
<mml:math id="mm183" display="inline">
<mml:semantics id="sm183">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>'s estimates.</p>
<p>Recall that initially 
<inline-formula>
<mml:math id="mm184" display="inline">
<mml:semantics id="sm184">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> and thus 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic> ∈ A<sc>ll</sc>. For any other 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> ∈ A<sc>ll</sc>, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> must be a child of some 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>H,λ,κ</sub></italic> ∈ A<sc>ll</sc> (<italic>i.e.</italic>, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> is obtained from Split(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>H,λ,κ</sub></italic>))- Given 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> and 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>H,λ,κ</sub></italic>, we say that 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> is a descendant of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>H,λ,κ</sub></italic>, and 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>H,λ,κ</sub></italic> is an ancestor of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>, if either (i) 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> is a child of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>H,λ,κ</sub></italic>, or (ii) it is a child of some of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>H,λ,κ</sub></italic>'s descendants. Note that the original 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>I,λ,κ</sub></italic> is an ancestor of every 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> ∈ A<sc>ll</sc>, and in general, any 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>H,λ,κ</sub></italic> ∈ A<sc>ll</sc> is an ancestor of every 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> ∈ A<sc>ll</sc> with <italic>J</italic> ⊂ <italic>H</italic>. We have the following lemma. (Note that we are abusing the notation here and regard 
<inline-formula>
<mml:math id="mm185" display="inline">
<mml:semantics id="sm185">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> as a set.)</p></sec>
<sec>
<title>Lemma 5</title>
<p>Suppose that 
<inline-formula>
<mml:math id="mm186" display="inline">
<mml:semantics id="sm186">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> is covering [<italic>p, r<sub>I</sub></italic>]. Let 
<inline-formula>
<mml:math id="mm187" display="inline">
<mml:semantics id="sm187">
<mml:mrow>
<mml:mtext mathvariant="italic">anc</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mtext mathvariant="italic">anc</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> be the set 
<inline-formula>
<mml:math id="mm188" display="inline">
<mml:semantics id="sm188">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>H</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">∣</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>H</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mspace width="0.2em"/>
<mml:mtext mathvariant="italic">is an ancestor of some</mml:mtext>
<mml:mspace width="0.2em"/>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:mrow></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>. Then,
<list list-type="order">
<list-item>
<p>
<inline-formula>
<mml:math id="mm189" display="inline">
<mml:semantics id="sm189">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mtext>ALL</mml:mtext></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>p</mml:mi></mml:mrow></mml:msub>
<mml:mo>⊆</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>∪</mml:mo>
<mml:mtext mathvariant="italic">anc</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>,</p></list-item>
<list-item>
<p><italic>v</italic><sub>add</sub>(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>) ≤ (1 + <italic>∊</italic>)<italic>Y</italic> for any 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> ∈ A<sc>ll</sc>, and</p></list-item>
<list-item>
<p>
<inline-formula>
<mml:math id="mm190" display="inline">
<mml:semantics id="sm190">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>∪</mml:mo>
<mml:mtext mathvariant="italic">anc</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>.</p></list-item></list></p>
<p>Therefore, Σ{<italic>v</italic><sub>add</sub>(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>) | 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> ∈ A<sc>ll</sc><sub>≥</sub><italic><sub>p</sub></italic>} ≤ 2(1 + <italic>∊</italic>)<italic>Y</italic> log<italic>W</italic>.</p>
<sec>
<title>Proof</title>
<p>For (1), it suffices to prove that for any 
<inline-formula>
<mml:math id="mm191" display="inline">
<mml:semantics id="sm191">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mtext>ALL</mml:mtext></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>p</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>∪</mml:mo>
<mml:mtext>anc</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>. By definition, <italic>J</italic> covers or is to the right of <italic>p</italic>; thus <italic>J</italic> ∩ (<italic>J</italic><sub>1</sub> ∪ ⋯ ∪ <italic>J<sub>m</sub></italic>) = <italic>J</italic> ∩ [<italic>p, r<sub>I</sub></italic>] ≠ ∅. Since the intervals are interesting and do not cross, there is an 1 ≤ <italic>i</italic> ≤ <italic>m</italic> such that either (i) <italic>J</italic> = <italic>J<sub>i</sub></italic>, and thus 
<inline-formula>
<mml:math id="mm192" display="inline">
<mml:semantics id="sm192">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, or (ii) <italic>J<sub>i</sub></italic> ⊂ <italic>J</italic>, which implies 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> is an ancestor of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub>, i.e.</italic>, 
<inline-formula>
<mml:math id="mm193" display="inline">
<mml:semantics id="sm193">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:mtext>anc</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>. (It is not possible that <italic>J</italic> ⊂ <italic>J<sub>i</sub></italic>, otherwise 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>i</sub>,λ,κ</sub></italic> would have been split and should not be in the current 
<inline-formula>
<mml:math id="mm194" display="inline">
<mml:semantics id="sm194">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. Hence, 
<inline-formula>
<mml:math id="mm195" display="inline">
<mml:semantics id="sm195">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>∪</mml:mo>
<mml:mtext>anc</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<p>To prove (2), suppose that <italic>J</italic> = [<italic>x, y</italic>] and <italic>v</italic><sub>add</sub>(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>) has just reached (1 + <italic>∊</italic>)<italic>Y</italic>. This implies <italic>f<sub>*</sub></italic>([<italic>x, r<sub>I</sub></italic>]) ≥ (1 + <italic>∊</italic>)<italic>Y</italic>, and so does its estimate <italic>f̂<sub>*</sub></italic>([<italic>x, r<sub>I</sub></italic>]) given by 
<inline-graphic xlink:href="algorithms-04-00200i6.gif"/><italic><sub>I,∊</sub></italic> (as <italic>f<sub>*</sub></italic>([<italic>x, r<sub>I</sub></italic>]) ≤ <italic>f̂</italic><sub>*</sub>([<italic>x, r<sub>I</sub></italic>]), by <xref rid="FD13" ref-type="disp-formula">Equation (7)</xref>). Then, the procedure Trim( ) will be called and 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> will be either thrown away or split, and no more value can be added to 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>. It follows that <italic>v</italic><sub>add</sub>(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>) ≤ (1 + <italic>∊</italic>)<italic>Y</italic>.</p>
<p>For (3), recall that 
<inline-formula>
<mml:math id="mm196" display="inline">
<mml:semantics id="sm196">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>. Among the intervals <italic>J</italic><sub>1</sub>, …, <italic>J<sub>m</sub></italic>, interval <italic>J</italic><sub>1</sub> is the leftmost interval and its left boundary <italic>ℓ</italic><sub><italic>J</italic><sub>1</sub></sub> = <italic>p</italic>. We now prove that 
<inline-formula>
<mml:math id="mm197" display="inline">
<mml:semantics id="sm197">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>∪</mml:mo>
<mml:mtext>anc</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>∪</mml:mo>
<mml:mtext>anc</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> where anc(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic></sub>) is the set of ancestors of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic></sub>. Then, together with the facts that 
<inline-formula>
<mml:math id="mm198" display="inline">
<mml:semantics id="sm198">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula> (by Property (ii) of interesting-partition) and |anc(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic></sub>)| ≤ log<italic>W</italic> (as each Split operation would reduce the size of interval by half), we have
<disp-formula id="FD17">
<mml:math id="mm199" display="block">
<mml:semantics id="sm199">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>∪</mml:mo>
<mml:mtext>anc</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>∪</mml:mo>
<mml:mtext>anc</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:mtext>anc</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>To show 
<inline-formula>
<mml:math id="mm200" display="inline">
<mml:semantics id="sm200">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>∪</mml:mo>
<mml:mtext>anc</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>∪</mml:mo>
<mml:mtext>anc</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, it suffices to show that for any 
<inline-formula>
<mml:math id="mm201" display="inline">
<mml:semantics id="sm201">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>H</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:mtext>anc</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>H,λ,κ</sub></italic> ∈ anc(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic></sub>). Since 
<inline-formula>
<mml:math id="mm202" display="inline">
<mml:semantics id="sm202">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>H</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:mtext>anc</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, it is the ancestor of some 
<inline-formula>
<mml:math id="mm203" display="inline">
<mml:semantics id="sm203">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>. Thus <italic>J<sub>i</sub></italic> = [<italic>ℓ<sub>j<sub>i</sub></sub>, r<sub>j<sub>i</sub></sub></italic>] ⊂ <italic>H</italic> = [<italic>ℓ<sub>H</sub>, r<sub>H</sub></italic>]. Since 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>H,λ,κ</sub></italic> is already an ancestor, it no longer exists, and all the 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> to its left have been thrown away. Thus, 
<inline-formula>
<mml:math id="mm204" display="inline">
<mml:semantics id="sm204">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> has no 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> where <italic>J</italic> is to the right of <italic>ℓ<sub>H</sub></italic>. This implies <italic>ℓ<sub>H</sub></italic> ≤ <italic>p</italic> = <italic>ℓ</italic><sub><italic>J</italic><sub>1</sub></sub> and <italic>ℓ<sub>H</sub></italic> ≤ <italic>ℓ</italic><sub><italic>J</italic><sub>1</sub></sub> ≤ <italic>r</italic><sub><italic>J</italic><sub>1</sub></sub> ≤ <italic>r<sub>J<sub>i</sub></sub></italic> ≤ <italic>r<sub>H</sub></italic>. It follows that <italic>J</italic><sub>1</sub> ⊂ <italic>H</italic> and 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>H,λ,κ</sub></italic> is an ancestor of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic></sub>, <italic>i.e.</italic>, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>H,λ,κ</sub></italic> ∈ anc(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic></sub>).</p>
<p>We are now ready to analyze the accuracy of 
<inline-formula>
<mml:math id="mm205" display="inline">
<mml:semantics id="sm205">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>'s estimates.</p></sec></sec>
<sec>
<title>Theorem 6</title>
<p>Suppose that 
<inline-formula>
<mml:math id="mm206" display="inline">
<mml:semantics id="sm206">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is covering [<italic>p, r<sub>I</sub></italic>]. For any item <italic>a</italic> and any <italic>t</italic> ∈ [<italic>p, r<sub>I</sub></italic>], the estimate <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) of <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) obtained by 
<inline-formula>
<mml:math id="mm207" display="inline">
<mml:semantics id="sm207">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> satisfies |<italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) − <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>])| ≤ <italic>∊Y</italic>. Furthermore, 
<inline-formula>
<mml:math id="mm208" display="inline">
<mml:semantics id="sm208">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> uses 
<inline-formula>
<mml:math id="mm209" display="inline">
<mml:semantics id="sm209">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> space.</p>
<sec>
<title>Proof</title>
<p>Let alive 
<inline-formula>
<mml:math id="mm210" display="inline">
<mml:semantics id="sm210">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> be the set of nodes currently in 
<inline-formula>
<mml:math id="mm211" display="inline">
<mml:semantics id="sm211">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> the set of those that were in 
<inline-formula>
<mml:math id="mm212" display="inline">
<mml:semantics id="sm212">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> earlier in the execution but have been deleted, and 
<inline-formula>
<mml:math id="mm213" display="inline">
<mml:semantics id="sm213">
<mml:mrow>
<mml:mtext>node</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>∪</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>. It can be verified that 
<inline-formula>
<mml:math id="mm214" display="inline">
<mml:semantics id="sm214">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>. Below, we prove that
<disp-formula id="FD18">
<label>(8)</label>
<mml:math id="mm215" display="block">
<mml:semantics id="sm215">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>+</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>κ</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Recall that we fix <italic>λ</italic> = <italic>∊Y</italic>/log<italic>W</italic> and 
<inline-formula>
<mml:math id="mm216" display="inline">
<mml:semantics id="sm216">
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>4</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>; the <italic>∊Y</italic> error bound follows.</p>
<p>The proof of the second inequality of <xref rid="FD18" ref-type="disp-formula">Equation (8)</xref> is identical to that of Lemma 3, except that we replace all occurrences of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> by 
<inline-formula>
<mml:math id="mm217" display="inline">
<mml:semantics id="sm217">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. The proof of the first inequality is also similar. We still have
<disp-formula id="FD19">
<mml:math id="mm218" display="block">
<mml:semantics id="sm218">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>node</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>which equals 
<inline-formula>
<mml:math id="mm219" display="inline">
<mml:semantics id="sm219">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>. As in Lemma 3, we can derive the bound 
<inline-formula>
<mml:math id="mm220" display="inline">
<mml:semantics id="sm220">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>κ</mml:mi></mml:mfrac>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>node</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>κ</mml:mi></mml:mfrac>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, but we can do better here.</p>
<p>Observe that for any node 
<inline-formula>
<mml:math id="mm221" display="inline">
<mml:semantics id="sm221">
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>∈</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, <italic>N</italic> can only be in those 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> ∈ A<sc>ll</sc><sub>≥<italic>p</italic></sub> (because <italic>t</italic> ∈ [<italic>p, r<sub>I</sub></italic>]), and when we debit <italic>N</italic>, if it is in 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>, then we debit <italic>κ</italic> − 1 other nodes in 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> monitoring <italic>κ</italic> − 1 items other than <italic>a</italic>. Thus, 
<inline-formula>
<mml:math id="mm222" display="inline">
<mml:semantics id="sm222">
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>dead</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> is no more than the total value available in the 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> ∈ A<sc>ll</sc><sub>≥<italic>p</italic></sub>, which is Σ {<italic>v</italic><sub>add</sub>(
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>) | 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> ∈ A<sc>ll</sc><sub>≥<italic>p</italic></sub>}. Together with Lemma 5 we conclude
<disp-formula id="FD20">
<mml:math id="mm223" display="block">
<mml:semantics id="sm223">
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mtext>add</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mtext>ALL</mml:mtext></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>p</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>+</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>Y</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula>and the first inequality of <xref rid="FD18" ref-type="disp-formula">Equation (8)</xref> follows.</p>
<p>For the size of 
<inline-formula>
<mml:math id="mm224" display="inline">
<mml:semantics id="sm224">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, similar to the proof of Lemma 3, we can argue that the number of born-rich nodes is only 
<inline-formula>
<mml:math id="mm225" display="inline">
<mml:semantics id="sm225">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>Y</mml:mi>
<mml:mo>/</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, but the number of born-poor nodes can be much larger. A born-poor node of a non-trivial queue is created either when we increase the value of a trivial queue, or when we execute Lines 2-6 of procedure Split. It can be verified that every queue 
<inline-formula>
<mml:math id="mm226" display="inline">
<mml:semantics id="sm226">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> has at most one born-poor node, which is the rightmost node in 
<inline-formula>
<mml:math id="mm227" display="inline">
<mml:semantics id="sm227">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. Since there are <italic>O</italic>(log<italic>W</italic>) 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>'s in 
<inline-formula>
<mml:math id="mm228" display="inline">
<mml:semantics id="sm228">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and each has at most <italic>κ</italic> non-trivial queues, the number of born-poor nodes, and hence the size of 
<inline-formula>
<mml:math id="mm229" display="inline">
<mml:semantics id="sm229">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, is 
<inline-formula>
<mml:math id="mm230" display="inline">
<mml:semantics id="sm230">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>κ</mml:mi>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<p>To reduce 
<inline-formula>
<mml:math id="mm231" display="inline">
<mml:semantics id="sm231">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>'s size from 
<inline-formula>
<mml:math id="mm232" display="inline">
<mml:semantics id="sm232">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> to 
<inline-formula>
<mml:math id="mm233" display="inline">
<mml:semantics id="sm233">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, we need to reduce the number of born-poor nodes; or equivalently, the number of non-trivial queues in 
<inline-formula>
<mml:math id="mm234" display="inline">
<mml:semantics id="sm234">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. In the next section, we give a simple idea to reduce the number of non-trivial queues and hence the size of 
<inline-formula>
<mml:math id="mm235" display="inline">
<mml:semantics id="sm235">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> to 
<inline-formula>
<mml:math id="mm236" display="inline">
<mml:semantics id="sm236">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>. In Section 6, we show how to further reduce the size by taking advantage of the tardiness of the data stream.</p></sec></sec></sec>
<sec>
<label>5.</label>
<title>Reducing the Size of 
<inline-formula>
<mml:math id="mm237" display="inline">
<mml:semantics id="sm237">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula></title>
<p>Our idea for reducing the size is simple; for every 
<inline-formula>
<mml:math id="mm238" display="inline">
<mml:semantics id="sm238">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, its capacity is no longer fixed at 
<inline-formula>
<mml:math id="mm239" display="inline">
<mml:semantics id="sm239">
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>4</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>; instead, we start with a much smaller capacity, namely 
<inline-formula>
<mml:math id="mm240" display="inline">
<mml:semantics id="sm240">
<mml:mrow>
<mml:mfrac>
<mml:mn>4</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>, which is allowed to increase gradually during execution. To determine 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>'s capacity, we use a variable to keep track of the number <italic>f̄</italic><sub>*</sub>(<italic>J</italic>) of items (<italic>a, u</italic>) with <italic>u</italic> ∈ <italic>J</italic> that have arrived since 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>'s creation. Let <italic>v<sub>J</sub></italic> be the total value of the nodes in 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> when it is created (<italic>v<sub>J</sub></italic> may not be zero if 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> is resulted from the splitting of its parent). The capacity of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> is determined as follows.</p>
<list list-type="simple">
<list-item>
<p>When 
<inline-formula>
<mml:math id="mm241" display="inline">
<mml:semantics id="sm241">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>c</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mi>J</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>J</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>&lt;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula> for some integer <italic>c</italic> ≥ 1, the capacity of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> is 
<inline-formula>
<mml:math id="mm242" display="inline">
<mml:semantics id="sm242">
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>c</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mi>c</mml:mi></mml:mrow>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>, <italic>i.e.</italic>, set <italic>κ</italic> = <italic>κ</italic>(<italic>c</italic>) and allow <italic>κ</italic>(<italic>c</italic>) non-trivial queues in 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>.</p></list-item></list>
<p>Note that when we increase the capacity of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> to <italic>κ</italic>(<italic>c</italic>), we do not need to do anything, except that we allow more non-trivial queues (up to <italic>κ</italic>(<italic>c</italic>)) in the data structure. Also note that when 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> is created during the trimming process, its inherited capacity may be larger than the supposed capacity <italic>κ</italic>(<italic>c</italic>); in such case, we simply debit every non-trivial queue until some queue 
<inline-formula>
<mml:math id="mm243" display="inline">
<mml:semantics id="sm243">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> has 
<inline-formula>
<mml:math id="mm244" display="inline">
<mml:semantics id="sm244">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> and we execute Lines 4 and 5 of the procedure Process( ) to make this queue trivial. We repeat the process until the number of non-trivial queues is at most <italic>κ</italic>(<italic>c</italic>). The following theorem asserts that 
<inline-formula>
<mml:math id="mm245" display="inline">
<mml:semantics id="sm245">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> maintains the accuracy of its estimates under this new implementation. It gives the revised size and the update time.</p>
<sec>
<title>Theorem 7</title>
<list list-type="order">
<list-item>
<p>Suppose that 
<inline-formula>
<mml:math id="mm246" display="inline">
<mml:semantics id="sm246">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is currently covering [<italic>p, r<sub>I</sub></italic>]. For any item <italic>a</italic> ∈ Σ and any timestamp <italic>t</italic> ∈ [<italic>p, r<sub>I</sub></italic>], the estimate <italic>f̂</italic><sub>a</sub>([<italic>t, r<sub>I</sub></italic>]) of <italic>f̂</italic><sub>a</sub>([<italic>t, r<sub>I</sub></italic>]) obtained by the new 
<inline-formula>
<mml:math id="mm247" display="inline">
<mml:semantics id="sm247">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> satisfies |<italic>f̂</italic><sub>a</sub>([<italic>t, r<sub>I</sub></italic>]) − <italic>f</italic><sub>a</sub>([<italic>t, r<sub>I</sub></italic>])| ≤ <italic>∊Y</italic>.</p></list-item>
<list-item>
<p>
<inline-formula>
<mml:math id="mm248" display="inline">
<mml:semantics id="sm248">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> has size 
<inline-formula>
<mml:math id="mm249" display="inline">
<mml:semantics id="sm249">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, and supports 
<inline-formula>
<mml:math id="mm250" display="inline">
<mml:semantics id="sm250">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>+</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> update time.</p></list-item></list>
<sec>
<title>Proof</title>
<p>Suppose that 
<inline-formula>
<mml:math id="mm251" display="inline">
<mml:semantics id="sm251">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>c</mml:mi>
<mml:mi>m</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>. From the fact that we are using 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>i</sub>,λ,κ</sub></italic><sub>(<italic>c<sub>i</sub></italic>)</sub> to monitor <italic>J<sub>i</sub></italic> we conclude 
<inline-formula>
<mml:math id="mm252" display="inline">
<mml:semantics id="sm252">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>. It follows that 
<inline-formula>
<mml:math id="mm253" display="inline">
<mml:semantics id="sm253">
<mml:mrow>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mfrac>
<mml:mi>Y</mml:mi>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, which is O(Y) because (i) 
<inline-formula>
<mml:math id="mm254" display="inline">
<mml:semantics id="sm254">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>m</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi>O</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> and (ii) 
<inline-formula>
<mml:math id="mm255" display="inline">
<mml:semantics id="sm255">
<mml:mrow>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>O</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>Y</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> (otherwise 
<inline-formula>
<mml:math id="mm256" display="inline">
<mml:semantics id="sm256">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> would have been trimmed). Thus,
<disp-formula id="FD21">
<label>(9)</label>
<mml:math id="mm257" display="block">
<mml:semantics id="sm257">
<mml:mrow>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>O</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>For Statement (1), the analysis of the accuracy of <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) is very similar to that of Theorem 6, except for the following difference: In the proof of Theorem 6, we show that 
<inline-formula>
<mml:math id="mm258" display="inline">
<mml:semantics id="sm258">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>+</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>κ</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>, and since <italic>κ</italic> is fixed at 
<inline-formula>
<mml:math id="mm259" display="inline">
<mml:semantics id="sm259">
<mml:mrow>
<mml:mfrac>
<mml:mn>4</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>, 
<inline-formula>
<mml:math id="mm260" display="inline">
<mml:semantics id="sm260">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>. Here, we also prove that 
<inline-formula>
<mml:math id="mm261" display="inline">
<mml:semantics id="sm261">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>, but we have to prove it differently because the capacities are no longer fixed.</p>
<p>As argued previously, any node in 
<inline-formula>
<mml:math id="mm262" display="inline">
<mml:semantics id="sm262">
<mml:mrow>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is in some 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> ∈ A<sc>ll</sc><sub>≥</sub><italic><sub>p</sub></italic>. Below, we show that for any 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> ∈ A<sc>ll</sc><sub>≥</sub><italic><sub>p</sub></italic>, we can make at most 
<inline-formula>
<mml:math id="mm263" display="inline">
<mml:semantics id="sm263">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula> debit operations to the queue 
<inline-formula>
<mml:math id="mm264" display="inline">
<mml:semantics id="sm264">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> during its lifespan. Together with the fact that |A<sc>ll</sc><sub>≥p</sub>| ≤ 2 log<italic>W</italic>, we have 
<inline-formula>
<mml:math id="mm265" display="inline">
<mml:semantics id="sm265">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<p>Consider any 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> ∈ A<sc>ll</sc><sub>≥</sub><italic><sub>p</sub></italic>. Note that the smaller its capacity, the larger the number of debit operations can be made to the queue 
<inline-formula>
<mml:math id="mm266" display="inline">
<mml:semantics id="sm266">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic>. To maximize the number of debit operations made to 
<inline-formula>
<mml:math id="mm267" display="inline">
<mml:semantics id="sm267">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, suppose that <italic>v<sub>J</sub></italic> = 0 and thus 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> has the smallest capacity <italic>κ</italic>(1) when it is created. Before increasing its capacity to <italic>κ</italic>(2), 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J,λ,κ</sub></italic> can make at most 
<inline-formula>
<mml:math id="mm268" display="inline">
<mml:semantics id="sm268">
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac>
<mml:mo>⋅</mml:mo>
<mml:mfrac>
<mml:mi>Y</mml:mi>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula> debit operations to 
<inline-formula>
<mml:math id="mm269" display="inline">
<mml:semantics id="sm269">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. Then, during the next 
<inline-formula>
<mml:math id="mm270" display="inline">
<mml:semantics id="sm270">
<mml:mrow>
<mml:mfrac>
<mml:mi>Y</mml:mi>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula> arrivals of items (<italic>a, u</italic>) with 
<inline-formula>
<mml:math id="mm271" display="inline">
<mml:semantics id="sm271">
<mml:mrow>
<mml:mi>u</mml:mi>
<mml:mo>∈</mml:mo>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mi>Y</mml:mi>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mi>J</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>J</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>&lt;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula>, the capacity is <italic>κ</italic>(2), and at most 
<inline-formula>
<mml:math id="mm272" display="inline">
<mml:semantics id="sm272">
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac>
<mml:mo>⋅</mml:mo>
<mml:mfrac>
<mml:mi>Y</mml:mi>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula> debit operations can be made to 
<inline-formula>
<mml:math id="mm273" display="inline">
<mml:semantics id="sm273">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. In general, during the period when 
<inline-formula>
<mml:math id="mm274" display="inline">
<mml:semantics id="sm274">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>c</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mi>J</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>J</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>&lt;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula>, at most 
<inline-formula>
<mml:math id="mm275" display="inline">
<mml:semantics id="sm275">
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>c</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac>
<mml:mo>⋅</mml:mo>
<mml:mfrac>
<mml:mi>Y</mml:mi>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula> debit operations can be made to 
<inline-formula>
<mml:math id="mm276" display="inline">
<mml:semantics id="sm276">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. If the largest capacity is <italic>κ</italic>(<italic>c</italic><sub>max</sub>), the total number of debit operations made to 
<inline-formula>
<mml:math id="mm277" display="inline">
<mml:semantics id="sm277">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is at most
<disp-formula id="FD22">
<mml:math id="mm278" display="block">
<mml:semantics id="sm278">
<mml:mrow>
<mml:mfrac>
<mml:mi>Y</mml:mi>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac>
<mml:mo>+</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>+</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>+</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:mo>+</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>+</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>ln</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula>which is smaller than 
<inline-formula>
<mml:math id="mm279" display="inline">
<mml:semantics id="sm279">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula> because by <xref rid="FD21" ref-type="disp-formula">Equation (9)</xref>, <italic>c</italic><sub>max</sub> = <italic>O</italic>(log<italic>W</italic>), which implies ln(<italic>c</italic><sub>max</sub>) + 1 ≤ 2 log log<italic>W</italic> (suppose that <italic>W</italic> is larger than some constant).</p>
<p>We now prove (2). Note that the total number of non-trivial queues in 
<inline-formula>
<mml:math id="mm280" display="inline">
<mml:semantics id="sm280">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, and hence the number of born-poor nodes, is at most 
<inline-formula>
<mml:math id="mm281" display="inline">
<mml:semantics id="sm281">
<mml:mrow>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>. By <xref rid="FD21" ref-type="disp-formula">Equation (9)</xref>, 
<inline-formula>
<mml:math id="mm282" display="inline">
<mml:semantics id="sm282">
<mml:mrow>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>O</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, and it follows that the size of 
<inline-formula>
<mml:math id="mm283" display="inline">
<mml:semantics id="sm283">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is 
<inline-formula>
<mml:math id="mm284" display="inline">
<mml:semantics id="sm284">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<p>For the update time, suppose that an item (<italic>a, u</italic>) arrives. We can find the 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J<sub>i</sub>,λ,κ</italic></sub> in 
<inline-formula>
<mml:math id="mm285" display="inline">
<mml:semantics id="sm285">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> with <italic>u</italic> ∈ <italic>J<sub>i</sub></italic> using <italic>O</italic>(log <italic>m</italic>) = <italic>O</italic>(log log<italic>W</italic>) time by querying a balanced search tree storing the <italic>J<sub>i</sub></italic>'s. By hashing (e.g., Cuckoo hashing [<xref ref-type="bibr" rid="b15-algorithms-04-00200">15</xref>], which supports constant update and query time) we can locate the queue 
<inline-formula>
<mml:math id="mm286" display="inline">
<mml:semantics id="sm286">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula> in constant time. Then, by consulting an auxiliary balanced search tree on the intervals monitored by the nodes of 
<inline-formula>
<mml:math id="mm287" display="inline">
<mml:semantics id="sm287">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, we can find and update the node <italic>N</italic> of 
<inline-formula>
<mml:math id="mm288" display="inline">
<mml:semantics id="sm288">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> with <italic>u</italic> ∈ <italic>i</italic>(<italic>N</italic>) using 
<inline-formula>
<mml:math id="mm289" display="inline">
<mml:semantics id="sm289">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>Y</mml:mi>
<mml:mo>/</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>+</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> time. At times we may also need to execute Lines 3 and 4 of the procedure Process( ), which debits all the non-trivial queues in 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><italic><sub>J<sub>i</sub>,λ,κ</sub></italic>. Using the de-amortizing technique given in [<xref ref-type="bibr" rid="b16-algorithms-04-00200">16</xref>], this step takes constant time.</p>
<p>Note that occasionally, we may also need to clean up 
<inline-formula>
<mml:math id="mm290" display="inline">
<mml:semantics id="sm290">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> by calling Trim( ); this step takes time linear to the size of 
<inline-formula>
<mml:math id="mm291" display="inline">
<mml:semantics id="sm291">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, which is 
<inline-formula>
<mml:math id="mm292" display="inline">
<mml:semantics id="sm292">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>.</p></sec></sec></sec>
<sec>
<label>6.</label>
<title>Further Reducing the Size of 
<inline-formula>
<mml:math id="mm293" display="inline">
<mml:semantics id="sm293">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> for Streams with Small Tardiness</title>
<p>Recall that in an out-of-order data stream with <italic>tardiness d<sub>max</sub></italic> ∈ [0, <italic>W</italic>], any item (<italic>a, u</italic>) arriving at time <italic>τ</italic><sub>cur</sub> satisfies <italic>u</italic> ≥ <italic>τ</italic><sub>cur</sub> − <italic>d</italic><sub>max</sub>; in other words, the delay of any item is guaranteed to be at most <italic>d</italic><sub>max</sub>. This section extends 
<inline-formula>
<mml:math id="mm294" display="inline">
<mml:semantics id="sm294">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> to a data structure 
<inline-formula>
<mml:math id="mm295" display="inline">
<mml:semantics id="sm295">
<mml:mrow>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> that takes advantage of this maximum delay guarantee to reduce the space usage. The idea is as follows. Since there is no new item with stamps smaller than <italic>τ</italic><sub>Cur</sub> − <italic>d</italic><sub>max</sub>, we will not make any further change to those nodes to the of left <italic>τ</italic><sub>cur</sub> − <italic>d</italic><sub>max</sub> and hence can consolidate these nodes to reduce space substantially. To handle those nodes with timestamps in [<italic>τ</italic><sub>cur</sub> − <italic>d</italic><sub>max</sub>, <italic>τ</italic><sub>cur</sub>], we use the data structure given in Section 5; since it is monitoring an interval of <italic>d</italic><sub>max</sub> instead of <italic>W</italic>, its size is 
<inline-formula>
<mml:math id="mm296" display="inline">
<mml:semantics id="sm296">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> instead of 
<inline-formula>
<mml:math id="mm297" display="inline">
<mml:semantics id="sm297">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<p>To implement 
<inline-formula>
<mml:math id="mm298" display="inline">
<mml:semantics id="sm298">
<mml:mrow>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, we need a new operation called <italic>consolidate</italic>. Consider any list of queues 
<inline-formula>
<mml:math id="mm299" display="inline">
<mml:semantics id="sm299">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, where <italic>J</italic><sub>1</sub>, <italic>J</italic><sub>2</sub>, …, <italic>J<sub>m</sub></italic> are ordered from left to right and form a partition of the interval <italic>J</italic><sub>1‥m</sub> = <italic>J</italic><sub>1</sub> ∪ ⋯ ∪ <italic>J<sub>m</sub></italic>. We consolidate them into a single queue 
<inline-formula>
<mml:math id="mm300" display="inline">
<mml:semantics id="sm300">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>‥</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> as follows:
<list list-type="order">
<list-item>
<p>Concatenate the queues into a single queue, in which the nodes preserve the left-right order.</p></list-item>
<list-item>
<p>Starting from the leftmost node, check from left to right every node <italic>N</italic> in the queue, if <italic>N</italic> is not the rightmost node and <italic>v</italic>(<italic>N</italic>) &lt; <italic>λ</italic>, merge it with the node <italic>N</italic>′ immediately to its right, <italic>i.e.</italic>, delete <italic>N</italic>, set <italic>v</italic>(<italic>N</italic>′) = <italic>v</italic>(<italic>N</italic>) + <italic>v</italic>(<italic>N</italic>′), <italic>d</italic>(<italic>N</italic>′) = <italic>d</italic>(<italic>N</italic>) + <italic>d</italic>(<italic>N</italic>′) and 
<inline-graphic xlink:href="algorithms-04-00200i4.gif"/>(<italic>N</italic>′) = 
<inline-graphic xlink:href="algorithms-04-00200i4.gif"/>(<italic>N</italic>) ∪ 
<inline-graphic xlink:href="algorithms-04-00200i4.gif"/>(<italic>N</italic>′).</p></list-item></list></p>
<p>Note that after the consolidation, the resulting queue 
<inline-formula>
<mml:math id="mm301" display="inline">
<mml:semantics id="sm301">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>‥</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> has at most one node (the rightmost one) with value smaller than <italic>λ</italic>.</p>
<p>Given the list 〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic>(<italic>c</italic><sub>1</sub>)</sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>m</sub>,<italic>λ,κ</italic>(<italic>c<sub>m</sub></italic>)</sub>〉, we consolidate them into 
<inline-formula>
<mml:math id="mm302" display="inline">
<mml:semantics id="sm302">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>‥</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula> by first consolidating, for each item <italic>a</italic>, the queues 
<inline-formula>
<mml:math id="mm303" display="inline">
<mml:semantics id="sm303">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> in 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>1</sub>,<italic>λ,κ</italic>(<italic>c</italic><sub>1</sub>)</sub>, …, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>J</italic><sub>m</sub>,<italic>λ,κ</italic>(<italic>c<sub>m</sub></italic>)</sub> into the queue 
<inline-formula>
<mml:math id="mm304" display="inline">
<mml:semantics id="sm304">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>‥</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and put it in 
<inline-formula>
<mml:math id="mm305" display="inline">
<mml:semantics id="sm305">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>‥</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula>. Then, we apply Lines 3–5 of procedure Process( ) repeatedly to reduce the number of non-trivial queues in the data structure to 
<inline-formula>
<mml:math id="mm306" display="inline">
<mml:semantics id="sm306">
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<p>We are now ready to describe how to extend 
<inline-formula>
<mml:math id="mm307" display="inline">
<mml:semantics id="sm307">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> to 
<inline-formula>
<mml:math id="mm308" display="inline">
<mml:semantics id="sm308">
<mml:mrow>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. In our discussion, we fix 
<inline-formula>
<mml:math id="mm309" display="inline">
<mml:semantics id="sm309">
<mml:mrow>
<mml:mi>λ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula>, and without loss of generality, we assume that <italic>I</italic> = [1, <italic>W</italic>]. Recall that <italic>p</italic><sub>max</sub> denotes the largest timestamp in <italic>I</italic> such that <italic>f̂</italic><sub>*</sub>([<italic>p</italic><sub>max</sub>, <italic>r<sub>I</sub></italic>]) &gt; (1 + <italic>∊</italic>)<italic>Y</italic> (which implies <italic>f</italic><sub>*</sub>([<italic>p</italic><sub>max</sub>, <italic>r<sub>I</sub></italic>]) &gt; <italic>Y</italic>). We partition <italic>I</italic> into sub-windows <italic>I</italic><sub>1</sub>, <italic>I</italic><sub>2</sub>, …, <italic>I<sub>m</sub></italic>, each of size <italic>d</italic><sub>max</sub> (<italic>i.e., I<sub>i</sub></italic> = [(<italic>i</italic> − 1)<italic>d</italic><sub>max</sub>, <italic>id</italic><sub>max</sub>]). We divide the execution into different periods according to <italic>τ</italic><sub>cur</sub>, the current time.</p>
<list list-type="bullet">
<list-item>
<p>During the 1st period, when <italic>τ</italic><sub>cur</sub> ∈ [1, <italic>d</italic><sub>max</sub>] = <italic>I</italic><sub>1</sub>, 
<inline-formula>
<mml:math id="mm310" display="inline">
<mml:semantics id="sm310">
<mml:mrow>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> simply is 
<inline-formula>
<mml:math id="mm311" display="inline">
<mml:semantics id="sm311">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>.</p></list-item>
<list-item>
<p>During the 2nd period, when <italic>τ</italic><sub>cur</sub> = <italic>I</italic><sub>2</sub>, 
<inline-formula>
<mml:math id="mm312" display="inline">
<mml:semantics id="sm312">
<mml:mrow>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> maintains 
<inline-formula>
<mml:math id="mm313" display="inline">
<mml:semantics id="sm313">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> in addition to 
<inline-formula>
<mml:math id="mm314" display="inline">
<mml:semantics id="sm314">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>.</p></list-item>
<list-item>
<p>During the 3rd period, when <italic>τ</italic><sub>cur</sub> ∈ <italic>I</italic><sub>3</sub>, 
<inline-formula>
<mml:math id="mm315" display="inline">
<mml:semantics id="sm315">
<mml:mrow>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> maintains 
<inline-formula>
<mml:math id="mm316" display="inline">
<mml:semantics id="sm316">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> in addition to 
<inline-formula>
<mml:math id="mm317" display="inline">
<mml:semantics id="sm317">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. Also, the 
<inline-formula>
<mml:math id="mm318" display="inline">
<mml:semantics id="sm318">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> is consolidated into 
<inline-formula>
<mml:math id="mm319" display="inline">
<mml:semantics id="sm319">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula>.</p></list-item>
<list-item>
<p>In general, during the <italic>i</italic>th period, when 
<inline-formula>
<mml:math id="mm320" display="inline">
<mml:semantics id="sm320">
<mml:mrow>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mtext>cur</mml:mtext></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> maintains 
<inline-formula>
<mml:math id="mm321" display="inline">
<mml:semantics id="sm321">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and 
<inline-formula>
<mml:math id="mm322" display="inline">
<mml:semantics id="sm322">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, and also 
<inline-formula>
<mml:math id="mm323" display="inline">
<mml:semantics id="sm323">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>‥</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula> where <italic>I</italic><sub>1‥<italic>i</italic>−2</sub> = <italic>I</italic><sub>1</sub> ∪ <italic>I</italic><sub>2</sub> ∪ ⋯ ∪ <italic>I</italic><sub><italic>i</italic>−2</sub>. Observe that in this period, there is no item (<italic>a, u</italic>) with <italic>u</italic> ∈ <italic>I</italic><sub>1‥<italic>i</italic>−2</sub> arrives (because the tardiness is <italic>d</italic><sub>max</sub>), and thus we do not need to update 
<inline-formula>
<mml:math id="mm324" display="inline">
<mml:semantics id="sm324">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>‥</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula>. However, we will keep throwing away any node <italic>N</italic> in 
<inline-formula>
<mml:math id="mm325" display="inline">
<mml:semantics id="sm325">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>‥</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula> as soon as we know <italic>i</italic>(<italic>N</italic>) is to the left of <italic>p</italic><sub>max</sub> + 1.</p></list-item>
<list-item>
<p>When entering the (<italic>i</italic> + 1)st period, we do the followings: Keep 
<inline-formula>
<mml:math id="mm326" display="inline">
<mml:semantics id="sm326">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, create 
<inline-formula>
<mml:math id="mm327" display="inline">
<mml:semantics id="sm327">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, merge 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>I</italic><sub>1‥<italic>i</italic>−2</sub>,<italic>λ,κ</italic></sub> with 
<inline-formula>
<mml:math id="mm328" display="inline">
<mml:semantics id="sm328">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, and then get 
<inline-formula>
<mml:math id="mm329" display="inline">
<mml:semantics id="sm329">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>‥</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula> by consolidating 
<inline-formula>
<mml:math id="mm330" display="inline">
<mml:semantics id="sm330">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">〈</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>‥</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>κ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">〉</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>.</p></list-item></list>
<p>Given any <italic>t</italic> ∈ [<italic>p</italic><sub>max</sub> + 1, <italic>r<sub>I</sub></italic>], the estimate of <italic>f<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) given by 
<inline-formula>
<mml:math id="mm331" display="inline">
<mml:semantics id="sm331">
<mml:mrow>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is
<disp-formula id="FD23">
<mml:math id="mm332" display="block">
<mml:semantics id="sm332">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The following theorem gives the accuracy of 
<inline-formula>
<mml:math id="mm333" display="inline">
<mml:semantics id="sm333">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>'s size and its update time.</p>
<sec>
<title>Theorem 8</title>
<list list-type="order">
<list-item>
<p>For any <italic>t</italic> ∈ [<italic>p</italic><sub>max</sub> + 1, <italic>r<sub>I</sub></italic>], the estimate <italic>f̂</italic><sub>a</sub>([<italic>t, r<sub>I</sub></italic>]) given by 
<inline-formula>
<mml:math id="mm334" display="inline">
<mml:semantics id="sm334">
<mml:mrow>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> satisfies
<disp-formula id="FD24">
<mml:math id="mm335" display="block">
<mml:semantics id="sm335">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>2</mml:mn>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>f</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula></p></list-item>
<list-item>
<p>
<inline-formula>
<mml:math id="mm336" display="inline">
<mml:semantics id="sm336">
<mml:mrow>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> has size 
<inline-formula>
<mml:math id="mm337" display="inline">
<mml:semantics id="sm337">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>log</mml:mo>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>, and supports 
<inline-formula>
<mml:math id="mm338" display="inline">
<mml:semantics id="sm338">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>+</mml:mo>
<mml:mo>log</mml:mo>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> update time.</p></list-item></list>
<sec>
<title>Proof</title>
<p>Recall that <italic>I</italic> is partitioned into sub-intervals <italic>I</italic><sub>1</sub>, <italic>I</italic><sub>2</sub>, …, <italic>I<sub>m</sub></italic>. Suppose that <italic>t</italic> ∈ <italic>I<sub>κ</sub></italic>. Note that if we had not performed any consolidation,
<disp-formula id="FD25">
<mml:math id="mm339" display="block">
<mml:semantics id="sm339">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>κ</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi>a</mml:mi></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Note that for <italic>κ</italic> + 1 ≤ <italic>i</italic> ≤ <italic>m</italic>, 
<inline-formula>
<mml:math id="mm340" display="inline">
<mml:semantics id="sm340">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi>a</mml:mi></mml:msup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, and for 
<inline-formula>
<mml:math id="mm341" display="inline">
<mml:semantics id="sm341">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>κ</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> since |<italic>I<sub>κ</sub></italic>|= <italic>d</italic><sub>max</sub>, the same argument used in the proof of Lemma 3 gives us 
<inline-formula>
<mml:math id="mm342" display="inline">
<mml:semantics id="sm342">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>κ</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula>. Hence
<disp-formula id="FD26">
<label>(10)</label>
<mml:math id="mm343" display="block">
<mml:semantics id="sm343">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>κ</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>alive</mml:mtext>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi>a</mml:mi></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>κ</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The consolidation step may add errors to 
<inline-formula>
<mml:math id="mm344" display="inline">
<mml:semantics id="sm344">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>. To get a bound on them, let <italic>N</italic><sub>1</sub>, <italic>N</italic><sub>2</sub>, … be the nodes for <italic>a</italic> in 
<inline-formula>
<mml:math id="mm345" display="inline">
<mml:semantics id="sm345">
<mml:mrow>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, ordered from left to right. Suppose that <italic>t</italic> ∈ <italic>N<sub>h</sub></italic>. Note that
<list list-type="bullet">
<list-item>
<p>the consolidation step will added at most <italic>λ</italic> units to <italic>v</italic>(<italic>N<sub>h</sub></italic>) before we move on to consider the node immediately to its right, and</p></list-item>
<list-item>
<p>for node <italic>N<sub>i</sub></italic> with <italic>i</italic> ≥ <italic>h</italic> + 1, any node <italic>N</italic> that has been merged to <italic>N<sub>i</sub></italic> must be to the right of of <italic>N<sub>h</sub></italic>, and thus is to the right of <italic>t</italic>; it follows that <italic>N</italic> is contributing <italic>v</italic>(<italic>N</italic>) to 
<inline-formula>
<mml:math id="mm346" display="inline">
<mml:semantics id="sm346">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> in <xref rid="FD26" ref-type="disp-formula">Equation (10)</xref> and its merging will not make any change.</p></list-item></list></p>
<p>In conclusion, the consolidation steps introduce at most <italic>λ</italic> extra errors, and <xref rid="FD26" ref-type="disp-formula">Equation (10)</xref> becomes 
<inline-formula>
<mml:math id="mm347" display="inline">
<mml:semantics id="sm347">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo>+</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>, which is the second inequality of the lemma.</p>
<p>To prove the first inequality, suppose that we ask for the estimate <italic>f̂<sub>a</sub></italic>([<italic>t, r<sub>I</sub></italic>]) during the <italic>i</italic>th period, when we have 
<inline-formula>
<mml:math id="mm348" display="inline">
<mml:semantics id="sm348">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>‥</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula>, 
<inline-formula>
<mml:math id="mm349" display="inline">
<mml:semantics id="sm349">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and 
<inline-formula>
<mml:math id="mm350" display="inline">
<mml:semantics id="sm350">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. Recall that 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub><italic>I</italic><sub>1‥<italic>i</italic>−2</sub>, <italic>λ,∊</italic></sub> comes from consolidating 
<inline-formula>
<mml:math id="mm351" display="inline">
<mml:semantics id="sm351">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. As in all our Previous analyses, we have
<disp-formula id="FD27">
<mml:math id="mm352" display="block">
<mml:semantics id="sm352">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>≤</mml:mo>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>node</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>−</mml:mo>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>alive</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>(Note that the merging of nodes during consolidations would not take away any value). To get a bound on 
<inline-formula>
<mml:math id="mm353" display="inline">
<mml:semantics id="sm353">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, suppose that <italic>p</italic><sub>max</sub> ∈ <italic>I<sub>κ</sub></italic>. Then, all the nodes to the left of <italic>I<sub>κ</sub></italic> have been thrown away. Among 
<inline-formula>
<mml:math id="mm354" display="inline">
<mml:semantics id="sm354">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>κ</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, only 
<inline-formula>
<mml:math id="mm355" display="inline">
<mml:semantics id="sm355">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>κ</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> may have been trimmed. Note that
<list list-type="bullet">
<list-item>
<p>
<inline-formula>
<mml:math id="mm356" display="inline">
<mml:semantics id="sm356">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>κ</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>ℓ</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>ℓ</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi>a</mml:mi></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>,</p></list-item>
<list-item>
<p>as in the proof of Theorem 7, we can argue that 
<inline-formula>
<mml:math id="mm357" display="inline">
<mml:semantics id="sm357">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>κ</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>, and</p></list-item>
<list-item>
<p>for the other 
<inline-formula>
<mml:math id="mm358" display="inline">
<mml:semantics id="sm358">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>ℓ</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, since their capacity is at least 
<inline-formula>
<mml:math id="mm359" display="inline">
<mml:semantics id="sm359">
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula></p></list-item></list>
<disp-formula id="FD28">
<mml:math id="mm360" display="block">
<mml:semantics id="sm360">
<mml:mrow>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>ℓ</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>ℓ</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi>a</mml:mi></mml:msup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo></mml:mrow>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>κ</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>≤</mml:mo>
<mml:mi>ℓ</mml:mi>
<mml:mo>≤</mml:mo>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub></mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>ℓ</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>/</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>/</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mi>∊</mml:mi>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mo>∗</mml:mo></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>I</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Thus, 
<inline-formula>
<mml:math id="mm361" display="inline">
<mml:semantics id="sm361">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>dead</mml:mtext>
<mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>≥</mml:mo>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≤</mml:mo>
<mml:mn>2</mml:mn>
<mml:mi>∊</mml:mi>
<mml:mi>Y</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>, and the first inequality follows.</p>
<p>For Statement (2), note that both 
<inline-formula>
<mml:math id="mm362" display="inline">
<mml:semantics id="sm362">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and 
<inline-formula>
<mml:math id="mm363" display="inline">
<mml:semantics id="sm363">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> have size 
<inline-formula>
<mml:math id="mm364" display="inline">
<mml:semantics id="sm364">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> (by Theorem 7, and |<italic>I<sub>i</sub></italic><sub>−1</sub>| = |<italic>I<sub>i</sub></italic>| = <italic>d</italic><sub>max</sub>), and for 
<inline-formula>
<mml:math id="mm365" display="inline">
<mml:semantics id="sm365">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="script">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>‥</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula>, it has size 
<inline-formula>
<mml:math id="mm366" display="inline">
<mml:semantics id="sm366">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>Y</mml:mi>
<mml:mo>/</mml:mo>
<mml:mi>λ</mml:mi>
<mml:mo>+</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>; thus the size of 
<inline-formula>
<mml:math id="mm367" display="inline">
<mml:semantics id="sm367">
<mml:mrow>
<mml:msubsup>
<mml:mi>ℰ</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is 
<inline-formula>
<mml:math id="mm368" display="inline">
<mml:semantics id="sm368">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>. For the update time, it suffices to note that it is dominated by the update times of 
<inline-formula>
<mml:math id="mm369" display="inline">
<mml:semantics id="sm369">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and 
<inline-formula>
<mml:math id="mm370" display="inline">
<mml:semantics id="sm370">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="script">D</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>∊</mml:mi></mml:mrow>
<mml:mi>Y</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>.</p></sec></sec></sec></body>
<back>
<sec sec-type="display-objects">
<title>Figures and Table</title>
<fig id="f1-algorithms-04-00200" position="float">
<label>Figure 1.</label>
<caption>
<p>Suppose that <italic>λ</italic> = 4. (i) shows the queue 
<inline-formula>
<mml:math id="mm371" display="inline">
<mml:semantics id="sm371">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> before the arrivals of items (<italic>a</italic>, 1), (<italic>a</italic>, 2), (<italic>a</italic>, 3), (<italic>a</italic>, 8); (ii) is the resulting queue after the updates for these items; (iii) shows that after the arrival of another item (<italic>a</italic>, 1), the first node in (ii) is updated and refined.</p></caption>
<graphic xlink:href="algorithms-04-00200f1.gif"/></fig>
<fig id="f2-algorithms-04-00200" position="float">
<label>Figure 2.</label>
<caption>
<p>Interesting intervals for <italic>I</italic> = [1, 8].</p></caption>
<graphic xlink:href="algorithms-04-00200f2.gif"/></fig>
<fig id="f3-algorithms-04-00200" position="float">
<label>Figure 3.</label>
<caption>
<p>Split of 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[1, 8], <italic>λ,κ</italic></sub>.</p></caption>
<graphic xlink:href="algorithms-04-00200f3.gif"/></fig>
<fig id="f4-algorithms-04-00200" position="float">
<label>Figure 4.</label>
<caption>
<p>Trim(〈
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[2, 2],<italic>λ,κ</italic></sub>, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[3, 4],<italic>λ,κ</italic></sub>, 
<inline-graphic xlink:href="algorithms-04-00200i1.gif"/><sub>[5, 8],<italic>λ,κ</italic></sub>〉, 3).</p></caption>
<graphic xlink:href="algorithms-04-00200f4.gif"/></fig>
<table-wrap id="t1-algorithms-04-00200" position="float">
<label>Table 1.</label>
<caption>
<p>The space complexity for answering <italic>∊</italic>-approximate frequent item set query in a sliding time window. Results from this paper are marked with [†]. Note that we assume 
<inline-formula>
<mml:math id="mm372" display="inline">
<mml:semantics id="sm372">
<mml:mrow>
<mml:mi>B</mml:mi>
<mml:mo>≥</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:semantics></mml:math></inline-formula>; otherwise, we can always store all items in the window for exact answer, using 
<inline-formula>
<mml:math id="mm373" display="inline">
<mml:semantics id="sm373">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula> words. Similarly, for the result with tardiness, we assume 
<inline-formula>
<mml:math id="mm374" display="inline">
<mml:semantics id="sm374">
<mml:mrow>
<mml:mi>B</mml:mi>
<mml:mo>≥</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></inline-formula>.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="top" colspan="2"><bold>Space Complexity (words)</bold></th></tr></thead>
<tbody>
<tr>
<td align="right" valign="top">Synchronous [<xref ref-type="bibr" rid="b7-algorithms-04-00200">7</xref>]</td>
<td align="left" valign="top">
<mml:math id="mm375" display="inline">
<mml:semantics id="sm375">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></td></tr>
<tr>
<td align="right" valign="top">Asynchronous [<xref ref-type="bibr" rid="b1-algorithms-04-00200">1</xref>]</td>
<td align="left" valign="top">
<mml:math id="mm376" display="inline">
<mml:semantics id="sm376">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>min</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></td></tr>
<tr>
<td align="right" valign="top">Asynchronous [†]</td>
<td align="left" valign="top">
<mml:math id="mm377" display="inline">
<mml:semantics id="sm377">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mspace width="0.1em"/>
<mml:mo>log</mml:mo>
<mml:mi>W</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></td></tr>
<tr>
<td align="right" valign="middle">Asynchronous with tardiness [†]</td>
<td align="left" valign="middle">
<mml:math id="mm378" display="inline">
<mml:semantics id="sm378">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>∊</mml:mi></mml:mfrac>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub>
<mml:mo>log</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>∊</mml:mi>
<mml:mi>B</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>log</mml:mo>
<mml:mo>log</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></td></tr></tbody></table></table-wrap></sec>
<ack>
<p>H.F Ting is partially supported by the GRF Grant HKU-716307E; T.W. Lam is partially supported by the GRF Grant HKU-713909E.</p></ack>
<ref-list>
<title>References</title>
<ref id="b1-algorithms-04-00200"><label>1.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Cormode</surname><given-names>G.</given-names></name><name><surname>Korn</surname><given-names>F.</given-names></name><name><surname>Tirthapura</surname><given-names>S.</given-names></name></person-group><article-title>Time-Decaying Aggregates in Out-of-Order Streams</article-title><conf-name>Proceedings of the 27th ACM SIGMOD-SIGACT-SIGART Symposium on Principles of Database Systems, PODS'08</conf-name><conf-loc>Vancouver, Canada</conf-loc><conf-date>9–11 June 2008</conf-date><fpage>89</fpage><lpage>98</lpage></citation></ref>
<ref id="b2-algorithms-04-00200"><label>2.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Karp</surname><given-names>R.</given-names></name><name><surname>Shenker</surname><given-names>S.</given-names></name><name><surname>Papadimitriou</surname><given-names>C.</given-names></name></person-group><article-title>A simple algorithm for finding frequent elements in streams and bags</article-title><source>ACM Trans. Database Syst.</source><year>2003</year><volume>28</volume><fpage>51</fpage><lpage>55</lpage><pub-id pub-id-type="doi">10.1145/762471.762473</pub-id></citation></ref>
<ref id="b3-algorithms-04-00200"><label>3.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Demaine</surname><given-names>E.</given-names></name><name><surname>Lopez-Ortiz</surname><given-names>A.</given-names></name><name><surname>Munro</surname><given-names>J.</given-names></name></person-group><article-title>Frequency Estimation of Internet Packet Streams with Limited Space</article-title><conf-name>Proceedings of the 10th Annual European Symposium, ESA'07</conf-name><conf-loc>Rome, Italy</conf-loc><conf-date>17–21 September 2002</conf-date><fpage>348</fpage><lpage>360</lpage></citation></ref>
<ref id="b4-algorithms-04-00200"><label>4.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Muthukrishnan</surname><given-names>S.</given-names></name></person-group><source>Data Streams: Algorithms and Applications</source><publisher-name>Now Publisher Inc.</publisher-name><publisher-loc>Boston, MA, USA</publisher-loc><year>2005</year></citation></ref>
<ref id="b5-algorithms-04-00200"><label>5.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Babcock</surname><given-names>B.</given-names></name><name><surname>Babu</surname><given-names>S.</given-names></name><name><surname>Datar</surname><given-names>M.</given-names></name><name><surname>Motwani</surname><given-names>R.</given-names></name><name><surname>Widom</surname><given-names>J.</given-names></name></person-group><article-title>Models and Issues in Data Stream Systems</article-title><conf-name>Proceedings of the 21st ACM SIGACT-SIGMOD-SIGART Symposium on Principles of Database Systems, PODS'02</conf-name><conf-loc>Madison, WI, USA</conf-loc><conf-date>3–5 June 2002</conf-date><fpage>1</fpage><lpage>16</lpage></citation></ref>
<ref id="b6-algorithms-04-00200"><label>6.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Arasu</surname><given-names>A.</given-names></name><name><surname>Manku</surname><given-names>G.</given-names></name></person-group><article-title>Approximate Counts and Quantiles over Sliding Windows</article-title><conf-name>Proceedings of the 23th ACM SIGMOD-SIGACT-SIGART Symposium on Principles of Database Systems, PODS'04</conf-name><conf-loc>Paris, France</conf-loc><conf-date>14–16 June 2004</conf-date><fpage>286</fpage><lpage>296</lpage></citation></ref>
<ref id="b7-algorithms-04-00200"><label>7.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Lee</surname><given-names>L.K.</given-names></name><name><surname>Ting</surname><given-names>H.F.</given-names></name></person-group><article-title>A Simpler and More Efficient Deterministic Scheme for Finding Frequent Items over Sliding Windows</article-title><conf-name>Proceedings of the PODS</conf-name><conf-date>June 26–28, 2006</conf-date><conf-loc>Chicago, Illinois, USA</conf-loc><fpage>290</fpage><lpage>297</lpage></citation></ref>
<ref id="b8-algorithms-04-00200"><label>8.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Lee</surname><given-names>L.K.</given-names></name><name><surname>Ting</surname><given-names>H.F.</given-names></name></person-group><article-title>Maintaining Significant Stream Statistics over Sliding Windows</article-title><conf-name>Proceedings of the 7th Annual ACM-SIAM Symposium on Discrete Algorithms, SODA'06</conf-name><conf-loc>Miami, FL, USA</conf-loc><conf-date>22–26 January 2006</conf-date><fpage>724</fpage><lpage>732</lpage></citation></ref>
<ref id="b9-algorithms-04-00200"><label>9.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Datar</surname><given-names>M.</given-names></name><name><surname>Gionis</surname><given-names>A.</given-names></name><name><surname>Indyk</surname><given-names>P.</given-names></name><name><surname>Motwani</surname><given-names>R.</given-names></name></person-group><article-title>Maintaining stream statistics over sliding windows</article-title><source>SIAMJ. Comput.</source><year>2002</year><volume>31</volume><fpage>1794</fpage><lpage>1813</lpage><pub-id pub-id-type="doi">10.1137/S0097539701398363</pub-id></citation></ref>
<ref id="b10-algorithms-04-00200"><label>10.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Tirthapura</surname><given-names>S.</given-names></name><name><surname>Xu</surname><given-names>B.</given-names></name><name><surname>Busch</surname><given-names>C.</given-names></name></person-group><article-title>Sketching Asynchronous Streams over a Sliding Window</article-title><conf-name>Proceedings of the 25th Annual ACM SIGACT-SIGOPS Symposium on Principles of Distributed Computing, PODC'06</conf-name><conf-loc>Denver, CO, USA</conf-loc><conf-date>23–26 July 2006</conf-date><fpage>82</fpage><lpage>91</lpage></citation></ref>
<ref id="b11-algorithms-04-00200"><label>11.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Busch</surname><given-names>C.</given-names></name><name><surname>Tirthapua</surname><given-names>S.</given-names></name></person-group><article-title>A Deterministic Algorithm for Summarizing Asynchronous Streams over a Sliding Window</article-title><conf-name>Proceedings of the 24th Annual Symposium on Theoretical Aspects of Computer Science, STACS'07</conf-name><conf-loc>Aachen, Germany</conf-loc><conf-date>22–24 February 2007</conf-date><fpage>465</fpage><lpage>475</lpage></citation></ref>
<ref id="b12-algorithms-04-00200"><label>12.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Cormode</surname><given-names>G.</given-names></name><name><surname>Tirthapura</surname><given-names>S.</given-names></name><name><surname>Xu</surname><given-names>B.</given-names></name></person-group><article-title>Time-decaying sketches for robust aggregation of sensor data</article-title><source>SIAM J. Comput.</source><year>2009</year><volume>39</volume><fpage>1309</fpage><lpage>1339</lpage></citation></ref>
<ref id="b13-algorithms-04-00200"><label>13.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Chan</surname><given-names>H.L.</given-names></name><name><surname>Lam</surname><given-names>T.W.</given-names></name><name><surname>Lee</surname><given-names>L.K.</given-names></name><name><surname>Ting</surname><given-names>H.F.</given-names></name></person-group><article-title>Approximating Frequent Items in Asynchronous Data Stream over a Sliding Window</article-title><conf-name>Proceedings of the 7th Workshop on Approximation and Online Algorithms, WAOA'09</conf-name><conf-loc>Copenhagen, Denmark</conf-loc><conf-date>10–11 September 2009</conf-date><fpage>49</fpage><lpage>61</lpage></citation></ref>
<ref id="b14-algorithms-04-00200"><label>14.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Misra</surname><given-names>J.</given-names></name><name><surname>Gries</surname><given-names>D.</given-names></name></person-group><article-title>Finding repeated elements</article-title><source>Sci. Comput. Program.</source><year>1982</year><volume>2</volume><fpage>143</fpage><lpage>152</lpage><pub-id pub-id-type="doi">10.1016/0167-6423(82)90012-0</pub-id></citation></ref>
<ref id="b15-algorithms-04-00200"><label>15.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Arbitman</surname><given-names>Y.</given-names></name><name><surname>Naor</surname><given-names>M.</given-names></name><name><surname>Segev</surname><given-names>G.</given-names></name></person-group><article-title>De-amortized Cuckoo Hashing: Provable Worst-Case Performance and Experimental Results</article-title><conf-name>Proceedings of the 36th International Colloquium, ICALP'09</conf-name><conf-loc>Rhodes, Greece</conf-loc><conf-date>5–12 July 2009</conf-date><fpage>107</fpage><lpage>118</lpage></citation></ref>
<ref id="b16-algorithms-04-00200"><label>16.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hung</surname><given-names>R.S.</given-names></name><name><surname>Lee</surname><given-names>L.K.</given-names></name><name><surname>Ting</surname><given-names>H.F.</given-names></name></person-group><article-title>Finding frequent items over sliding windows with constant update time</article-title><source>Inf. Process. Lett.</source><year>2010</year><volume>110</volume><fpage>257</fpage><lpage>260</lpage><pub-id pub-id-type="doi">10.1016/j.ipl.2009.01.027</pub-id></citation></ref></ref-list></back></article>
