https://en.wikipedia.org/w/index.php?action=history&feed=atom&title=Approximate_counting_algorithm
Approximate counting algorithm - Revision history
2025-05-25T04:07:58Z
Revision history for this page on the wiki
MediaWiki 1.45.0-wmf.2
https://en.wikipedia.org/w/index.php?title=Approximate_counting_algorithm&diff=1276415768&oldid=prev
LR.127: Adding short description: "Optimization theory in computing"
2025-02-18T19:02:06Z
<p>Adding <a href="/wiki/Wikipedia:Short_description" title="Wikipedia:Short description">short description</a>: "Optimization theory in computing"</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 19:02, 18 February 2025</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 1:</td>
<td colspan="2" class="diff-lineno">Line 1:</td>
</tr>
<tr>
<td colspan="2" class="diff-empty diff-side-deleted"></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>{{Short description|Optimization theory in computing}}</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The '''approximate counting algorithm''' allows the counting of a large number of events using a small amount of memory. Invented in 1977 by [[Robert Morris (cryptographer)|Robert Morris]] of [[Bell Labs]], it uses [[randomized algorithm|probabilistic techniques]] to increment the [[Counter (digital)|counter]]. It was fully analyzed in the early 1980s by [[Philippe Flajolet]] of [[INRIA]] Rocquencourt, who coined the name '''approximate counting''', and strongly contributed to its recognition among the research community. When focused on high quality of approximation and low probability of failure, [[Jelani Nelson|Nelson]] and Yu showed that a very slight modification to the Morris Counter is asymptotically optimal amongst all algorithms for the problem.<ref name=ny2020>{{cite journal | last1=Nelson | first1=Jelani | last2 = Yu | first2 = Huacheng | year=2020 | title=Optimal bounds for approximate counting | arxiv=2010.02116 }} </ref> The algorithm is considered one of the precursors of [[Streaming algorithm|streaming algorithms]], and the more general problem of determining the frequency moments of a data stream has been central to the field.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The '''approximate counting algorithm''' allows the counting of a large number of events using a small amount of memory. Invented in 1977 by [[Robert Morris (cryptographer)|Robert Morris]] of [[Bell Labs]], it uses [[randomized algorithm|probabilistic techniques]] to increment the [[Counter (digital)|counter]]. It was fully analyzed in the early 1980s by [[Philippe Flajolet]] of [[INRIA]] Rocquencourt, who coined the name '''approximate counting''', and strongly contributed to its recognition among the research community. When focused on high quality of approximation and low probability of failure, [[Jelani Nelson|Nelson]] and Yu showed that a very slight modification to the Morris Counter is asymptotically optimal amongst all algorithms for the problem.<ref name=ny2020>{{cite journal | last1=Nelson | first1=Jelani | last2 = Yu | first2 = Huacheng | year=2020 | title=Optimal bounds for approximate counting | arxiv=2010.02116 }} </ref> The algorithm is considered one of the precursors of [[Streaming algorithm|streaming algorithms]], and the more general problem of determining the frequency moments of a data stream has been central to the field.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
</table>
LR.127
https://en.wikipedia.org/w/index.php?title=Approximate_counting_algorithm&diff=1259655195&oldid=prev
193.28.39.53: /* Algorithm */
2024-11-26T10:05:55Z
<p><span class="autocomment">Algorithm</span></p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 10:05, 26 November 2024</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 56:</td>
<td colspan="2" class="diff-lineno">Line 56:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Algorithm==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Algorithm==</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The algorithm can be implemented by hand. When incrementing the counter, flip a coin a number of times<del style="font-weight: bold; text-decoration: none;"> of the</del> corresponding to the counter's current value. If it comes up heads each time, then increment the counter. Otherwise, do not increment it.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The algorithm can be implemented by hand. When incrementing the counter, flip a coin a number of times corresponding to the counter's current value. If it comes up heads each time, then increment the counter. Otherwise, do not increment it.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>This can be easily achieved on a computer. Let <math>c</math> be the current value of the counter. Generating <math>c</math> pseudo-random bits and using the [[Logical conjunction|logical AND]] of all those bits and add the result to the counter. As the result was zero if any of those pseudo-random bits are zero, achieving an increment probability of <math>2^{-c}</math>. This procedure is executed each time the request is made to increment the counter.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>This can be easily achieved on a computer. Let <math>c</math> be the current value of the counter. Generating <math>c</math> pseudo-random bits and using the [[Logical conjunction|logical AND]] of all those bits and add the result to the counter. As the result was zero if any of those pseudo-random bits are zero, achieving an increment probability of <math>2^{-c}</math>. This procedure is executed each time the request is made to increment the counter.</div></td>
</tr>
</table>
193.28.39.53
https://en.wikipedia.org/w/index.php?title=Approximate_counting_algorithm&diff=1166474783&oldid=prev
Citation bot: Alter: title, template type. Add: chapter. Removed parameters. | Use this bot. Report bugs. | #UCB_CommandLine
2023-07-21T20:21:11Z
<p>Alter: title, template type. Add: chapter. Removed parameters. | <a href="/wiki/Wikipedia:UCB" class="mw-redirect" title="Wikipedia:UCB">Use this bot</a>. <a href="/wiki/Wikipedia:DBUG" class="mw-redirect" title="Wikipedia:DBUG">Report bugs</a>. | #UCB_CommandLine</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 20:21, 21 July 2023</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 53:</td>
<td colspan="2" class="diff-lineno">Line 53:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>While using powers of 2 as counter values is memory efficient, arbitrary values tend to create a dynamic error range, and the smaller values will have a greater error ratio than bigger values. Other methods of selecting counter values consider parameters such as memory availability, desired error ratio, or counting range to provide an optimal set of values.<ref>Tsidon, Erez, Iddo Hanniel, and Isaac Keslassy. "Estimators also need shared values to grow together." INFOCOM, 2012 Proceedings IEEE. IEEE, 2012.</ref></div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>While using powers of 2 as counter values is memory efficient, arbitrary values tend to create a dynamic error range, and the smaller values will have a greater error ratio than bigger values. Other methods of selecting counter values consider parameters such as memory availability, desired error ratio, or counting range to provide an optimal set of values.<ref>Tsidon, Erez, Iddo Hanniel, and Isaac Keslassy. "Estimators also need shared values to grow together." INFOCOM, 2012 Proceedings IEEE. IEEE, 2012.</ref></div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>However, when several counters share the same values, values are optimized according to the counter with the largest counting range, and produce sub-optimal accuracy for smaller counters. Mitigation is achieved by maintaining Independent Counter Estimation buckets,<ref>{{Cite <del style="font-weight: bold; text-decoration: none;">journal</del>|last1=Einziger|first1=G.|last2=Fellman|first2=B.|last3=Kassner|first3=Y.<del style="font-weight: bold; text-decoration: none;">|date=April 2015</del>|title<del style="font-weight: bold; text-decoration: none;">=Independent counter estimation buckets|journal</del>=2015 IEEE Conference on Computer Communications (INFOCOM)|pages=2560–2568|doi=10.1109/INFOCOM.2015.7218646|isbn=978-1-4799-8381-0|s2cid=15673730 }}</ref> which restrict the effect of a larger counter to the other counters in the bucket.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>However, when several counters share the same values, values are optimized according to the counter with the largest counting range, and produce sub-optimal accuracy for smaller counters. Mitigation is achieved by maintaining Independent Counter Estimation buckets,<ref>{{Cite <ins style="font-weight: bold; text-decoration: none;">book</ins>|last1=Einziger|first1=G.|last2=Fellman|first2=B.|last3=Kassner|first3=Y.|title=2015 IEEE Conference on Computer Communications (INFOCOM)<ins style="font-weight: bold; text-decoration: none;"> |chapter=Independent counter estimation buckets |date=April 2015</ins>|pages=2560–2568|doi=10.1109/INFOCOM.2015.7218646|isbn=978-1-4799-8381-0|s2cid=15673730 }}</ref> which restrict the effect of a larger counter to the other counters in the bucket.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Algorithm==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Algorithm==</div></td>
</tr>
</table>
Citation bot
https://en.wikipedia.org/w/index.php?title=Approximate_counting_algorithm&diff=1129305781&oldid=prev
Dwmalone: Use math mode for power.
2022-12-24T16:50:37Z
<p>Use math mode for power.</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 16:50, 24 December 2022</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 48:</td>
<td colspan="2" class="diff-lineno">Line 48:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|}</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|}</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>If the counter holds the value of 101, which equates to an exponent of 5 (the decimal equivalent of 101), then the estimated count is 2^5, or 32. There is a fairly low probability that the actual count of increment events was 5 (<math>\frac{1}{1024} = 1 \times \frac{1}{2} \times \frac{1}{4} \times \frac{1}{8} \times \frac{1}{16}</math>). The actual count of increment events is likely to be "around 32", but it could be arbitrarily high (with decreasing probabilities for actual counts above 39).</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>If the counter holds the value of 101, which equates to an exponent of 5 (the decimal equivalent of 101), then the estimated count is <ins style="font-weight: bold; text-decoration: none;"><math></ins>2^5<ins style="font-weight: bold; text-decoration: none;"></math></ins>, or 32. There is a fairly low probability that the actual count of increment events was 5 (<math>\frac{1}{1024} = 1 \times \frac{1}{2} \times \frac{1}{4} \times \frac{1}{8} \times \frac{1}{16}</math>). The actual count of increment events is likely to be "around 32", but it could be arbitrarily high (with decreasing probabilities for actual counts above 39).</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>===Selecting counter values===</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>===Selecting counter values===</div></td>
</tr>
</table>
Dwmalone
https://en.wikipedia.org/w/index.php?title=Approximate_counting_algorithm&diff=1129305595&oldid=prev
Dwmalone: Tidy up wording.
2022-12-24T16:49:33Z
<p>Tidy up wording.</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 16:49, 24 December 2022</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 56:</td>
<td colspan="2" class="diff-lineno">Line 56:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Algorithm==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Algorithm==</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>When incrementing the counter, <del style="font-weight: bold; text-decoration: none;">"</del>flip a coin<del style="font-weight: bold; text-decoration: none;">"</del> <del style="font-weight: bold; text-decoration: none;">the</del> number of times of the counter's current value. If it comes up <del style="font-weight: bold; text-decoration: none;">"Heads"</del> each time, then increment the counter. Otherwise, do not increment it.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">The algorithm can be implemented by hand. </ins>When incrementing the counter, flip a coin <ins style="font-weight: bold; text-decoration: none;">a</ins> number of times of<ins style="font-weight: bold; text-decoration: none;"> the corresponding to</ins> the counter's current value. If it comes up <ins style="font-weight: bold; text-decoration: none;">heads</ins> each time, then increment the counter. Otherwise, do not increment it.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>This can be <del style="font-weight: bold; text-decoration: none;">done</del> <del style="font-weight: bold; text-decoration: none;">programmatically</del> <del style="font-weight: bold; text-decoration: none;">by</del> <del style="font-weight: bold; text-decoration: none;">generating</del> <del style="font-weight: bold; text-decoration: none;">"c" pseudo-random bits</del> <del style="font-weight: bold; text-decoration: none;">(where</del> <del style="font-weight: bold; text-decoration: none;">"</del>c<del style="font-weight: bold; text-decoration: none;">"</del> <del style="font-weight: bold; text-decoration: none;">is</del> the current value of the counter<del style="font-weight: bold; text-decoration: none;">),</del> and using the logical AND <del style="font-weight: bold; text-decoration: none;">function on</del> all<del style="font-weight: bold; text-decoration: none;"> of</del> those bits. <del style="font-weight: bold; text-decoration: none;">The</del> result <del style="font-weight: bold; text-decoration: none;">is a</del> zero if any of those pseudo-random bits are zero, <del style="font-weight: bold; text-decoration: none;">and</del> <del style="font-weight: bold; text-decoration: none;">a</del> <del style="font-weight: bold; text-decoration: none;">one</del> <del style="font-weight: bold; text-decoration: none;">if</del> <del style="font-weight: bold; text-decoration: none;">they</del> <del style="font-weight: bold; text-decoration: none;">are all ones. Simply add the result to the counter</del>. This procedure is executed each time the request is made to increment the counter.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>This can be <ins style="font-weight: bold; text-decoration: none;">easily</ins> <ins style="font-weight: bold; text-decoration: none;">achieved</ins> <ins style="font-weight: bold; text-decoration: none;">on</ins> <ins style="font-weight: bold; text-decoration: none;">a</ins> <ins style="font-weight: bold; text-decoration: none;">computer.</ins> <ins style="font-weight: bold; text-decoration: none;">Let</ins> <ins style="font-weight: bold; text-decoration: none;"><math></ins>c<ins style="font-weight: bold; text-decoration: none;"></math></ins> <ins style="font-weight: bold; text-decoration: none;">be</ins> the current value of the counter<ins style="font-weight: bold; text-decoration: none;">. Generating <math>c</math> pseudo-random bits</ins> and using the <ins style="font-weight: bold; text-decoration: none;">[[Logical conjunction|</ins>logical AND<ins style="font-weight: bold; text-decoration: none;">]]</ins> <ins style="font-weight: bold; text-decoration: none;">of</ins> all those bits<ins style="font-weight: bold; text-decoration: none;"> and add the result to the counter</ins>. <ins style="font-weight: bold; text-decoration: none;">As</ins> <ins style="font-weight: bold; text-decoration: none;">the</ins> result <ins style="font-weight: bold; text-decoration: none;">was</ins> zero if any of those pseudo-random bits are zero, <ins style="font-weight: bold; text-decoration: none;">achieving</ins> <ins style="font-weight: bold; text-decoration: none;">an</ins> <ins style="font-weight: bold; text-decoration: none;">increment</ins> <ins style="font-weight: bold; text-decoration: none;">probability</ins> <ins style="font-weight: bold; text-decoration: none;">of</ins> <ins style="font-weight: bold; text-decoration: none;"><math>2^{-c}</math></ins>. This procedure is executed each time the request is made to increment the counter.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Applications==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Applications==</div></td>
</tr>
</table>
Dwmalone
https://en.wikipedia.org/w/index.php?title=Approximate_counting_algorithm&diff=1129304765&oldid=prev
Dwmalone: Neaten references a little.
2022-12-24T16:43:49Z
<p>Neaten references a little.</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 16:43, 24 December 2022</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 70:</td>
<td colspan="2" class="diff-lineno">Line 70:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Sources==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Sources==</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Morris, R. Counting large numbers of events in small registers. Communications of the ACM 21, 10 (1978), 840–842</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Morris, R. <ins style="font-weight: bold; text-decoration: none;">''</ins>Counting large numbers of events in small registers<ins style="font-weight: bold; text-decoration: none;">''</ins>. Communications of the ACM 21, 10 (1978), 840–842</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Flajolet, P. Approximate Counting: A Detailed Analysis. BIT 25, (1985), 113–134 [http://algo.inria.fr/flajolet/Publications/Flajolet85c.pdf]</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Flajolet, P. <ins style="font-weight: bold; text-decoration: none;">''</ins>Approximate Counting: A Detailed Analysis<ins style="font-weight: bold; text-decoration: none;">''</ins>. BIT 25, (1985), 113–134 [http://algo.inria.fr/flajolet/Publications/Flajolet85c.pdf]</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* <del style="font-weight: bold; text-decoration: none;">Michael</del> <del style="font-weight: bold; text-decoration: none;">F</del>., <del style="font-weight: bold; text-decoration: none;">Chung-Kuei</del> <del style="font-weight: bold; text-decoration: none;">L</del>., Prodinger, Approximate Counting via the Poisson-Laplace-Mellin Method [https://web.archive.org/web/20160304042036/http://jupiter.math.nctu.edu.tw/~mfuchs/approx_count_3.pdf]</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* <ins style="font-weight: bold; text-decoration: none;">Fouchs,</ins> <ins style="font-weight: bold; text-decoration: none;">M</ins>., <ins style="font-weight: bold; text-decoration: none;">Lee,</ins> <ins style="font-weight: bold; text-decoration: none;">C-K</ins>., Prodinger, <ins style="font-weight: bold; text-decoration: none;">H., ''</ins>Approximate Counting via the Poisson-Laplace-Mellin Method<ins style="font-weight: bold; text-decoration: none;">''</ins> [https://web.archive.org/web/20160304042036/http://jupiter.math.nctu.edu.tw/~mfuchs/approx_count_3.pdf]</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Randomized algorithms]]</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Randomized algorithms]]</div></td>
</tr>
</table>
Dwmalone
https://en.wikipedia.org/w/index.php?title=Approximate_counting_algorithm&diff=1129304189&oldid=prev
Dwmalone: Slight improvement in wording.
2022-12-24T16:39:08Z
<p>Slight improvement in wording.</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 16:39, 24 December 2022</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 6:</td>
<td colspan="2" class="diff-lineno">Line 6:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>To increment the counter, a [[pseudo-random]] event is used, such that the incrementing is a probabilistic event. To save space, only the exponent is kept. For example, in base 2, the counter can estimate the count to be 1, 2, 4, 8, 16, 32, and all of the [[powers of two]]. The memory requirement is simply to hold the [[exponent]].</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>To increment the counter, a [[pseudo-random]] event is used, such that the incrementing is a probabilistic event. To save space, only the exponent is kept. For example, in base 2, the counter can estimate the count to be 1, 2, 4, 8, 16, 32, and all of the [[powers of two]]. The memory requirement is simply to hold the [[exponent]].</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>As an example, to increment from 4 to 8, a pseudo-random number would be generated such that <del style="font-weight: bold; text-decoration: none;">a</del> probability <del style="font-weight: bold; text-decoration: none;">of</del> <del style="font-weight: bold; text-decoration: none;">.25</del> <del style="font-weight: bold; text-decoration: none;">generates</del> <del style="font-weight: bold; text-decoration: none;">a</del> <del style="font-weight: bold; text-decoration: none;">positive</del> <del style="font-weight: bold; text-decoration: none;">change in the counter</del>. Otherwise, the counter remains at 4.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>As an example, to increment from 4 to 8, a pseudo-random number would be generated such that <ins style="font-weight: bold; text-decoration: none;">the</ins> probability <ins style="font-weight: bold; text-decoration: none;">the</ins> <ins style="font-weight: bold; text-decoration: none;">counter</ins> <ins style="font-weight: bold; text-decoration: none;">is</ins> <ins style="font-weight: bold; text-decoration: none;">increased</ins> <ins style="font-weight: bold; text-decoration: none;">is</ins> <ins style="font-weight: bold; text-decoration: none;">0.25</ins>. Otherwise, the counter remains at 4.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The table below illustrates some of the potential values of the counter:</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The table below illustrates some of the potential values of the counter:</div></td>
</tr>
</table>
Dwmalone
https://en.wikipedia.org/w/index.php?title=Approximate_counting_algorithm&diff=1129303910&oldid=prev
Dwmalone: Tidy up wikilink.
2022-12-24T16:36:40Z
<p>Tidy up wikilink.</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 16:36, 24 December 2022</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 1:</td>
<td colspan="2" class="diff-lineno">Line 1:</td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The '''approximate counting algorithm''' allows the counting of a large number of events using a small amount of memory. Invented in 1977 by [[Robert Morris (cryptographer)]] of [[Bell Labs]], it uses [[randomized algorithm|probabilistic techniques]] to increment the [[Counter (digital)|counter]]. It was fully analyzed in the early 1980s by [[Philippe Flajolet]] of [[INRIA]] Rocquencourt, who coined the name '''approximate counting''', and strongly contributed to its recognition among the research community. When focused on high quality of approximation and low probability of failure, [[Jelani Nelson|Nelson]] and Yu showed that a very slight modification to the Morris Counter is asymptotically optimal amongst all algorithms for the problem.<ref name=ny2020>{{cite journal | last1=Nelson | first1=Jelani | last2 = Yu | first2 = Huacheng | year=2020 | title=Optimal bounds for approximate counting | arxiv=2010.02116 }} </ref> The algorithm is considered one of the precursors of [[Streaming algorithm|streaming algorithms]], and the more general problem of determining the frequency moments of a data stream has been central to the field.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The '''approximate counting algorithm''' allows the counting of a large number of events using a small amount of memory. Invented in 1977 by [[Robert Morris (cryptographer)<ins style="font-weight: bold; text-decoration: none;">|Robert Morris</ins>]] of [[Bell Labs]], it uses [[randomized algorithm|probabilistic techniques]] to increment the [[Counter (digital)|counter]]. It was fully analyzed in the early 1980s by [[Philippe Flajolet]] of [[INRIA]] Rocquencourt, who coined the name '''approximate counting''', and strongly contributed to its recognition among the research community. When focused on high quality of approximation and low probability of failure, [[Jelani Nelson|Nelson]] and Yu showed that a very slight modification to the Morris Counter is asymptotically optimal amongst all algorithms for the problem.<ref name=ny2020>{{cite journal | last1=Nelson | first1=Jelani | last2 = Yu | first2 = Huacheng | year=2020 | title=Optimal bounds for approximate counting | arxiv=2010.02116 }} </ref> The algorithm is considered one of the precursors of [[Streaming algorithm|streaming algorithms]], and the more general problem of determining the frequency moments of a data stream has been central to the field.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Theory of operation==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Theory of operation==</div></td>
</tr>
</table>
Dwmalone
https://en.wikipedia.org/w/index.php?title=Approximate_counting_algorithm&diff=1096313090&oldid=prev
Citation bot: Add: s2cid, authors 1-1. Removed parameters. Some additions/deletions were parameter name changes. | Use this bot. Report bugs. | Suggested by Abductive | #UCB_toolbar
2022-07-03T17:32:51Z
<p>Add: s2cid, authors 1-1. Removed parameters. Some additions/deletions were parameter name changes. | <a href="/wiki/Wikipedia:UCB" class="mw-redirect" title="Wikipedia:UCB">Use this bot</a>. <a href="/wiki/Wikipedia:DBUG" class="mw-redirect" title="Wikipedia:DBUG">Report bugs</a>. | Suggested by Abductive | #UCB_toolbar</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 17:32, 3 July 2022</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 53:</td>
<td colspan="2" class="diff-lineno">Line 53:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>While using powers of 2 as counter values is memory efficient, arbitrary values tend to create a dynamic error range, and the smaller values will have a greater error ratio than bigger values. Other methods of selecting counter values consider parameters such as memory availability, desired error ratio, or counting range to provide an optimal set of values.<ref>Tsidon, Erez, Iddo Hanniel, and Isaac Keslassy. "Estimators also need shared values to grow together." INFOCOM, 2012 Proceedings IEEE. IEEE, 2012.</ref></div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>While using powers of 2 as counter values is memory efficient, arbitrary values tend to create a dynamic error range, and the smaller values will have a greater error ratio than bigger values. Other methods of selecting counter values consider parameters such as memory availability, desired error ratio, or counting range to provide an optimal set of values.<ref>Tsidon, Erez, Iddo Hanniel, and Isaac Keslassy. "Estimators also need shared values to grow together." INFOCOM, 2012 Proceedings IEEE. IEEE, 2012.</ref></div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>However, when several counters share the same values, values are optimized according to the counter with the largest counting range, and produce sub-optimal accuracy for smaller counters. Mitigation is achieved by maintaining Independent Counter Estimation buckets,<ref>{{Cite journal|<del style="font-weight: bold; text-decoration: none;">last</del>=Einziger|<del style="font-weight: bold; text-decoration: none;">first</del>=G.|last2=Fellman|first2=B.|last3=Kassner|first3=Y.|date=April 2015|title=Independent counter estimation buckets|journal=2015 IEEE Conference on Computer Communications (INFOCOM)|pages=2560–2568|doi=10.1109/INFOCOM.2015.7218646|isbn=978-1-4799-8381-0}}</ref> which restrict the effect of a larger counter to the other counters in the bucket.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>However, when several counters share the same values, values are optimized according to the counter with the largest counting range, and produce sub-optimal accuracy for smaller counters. Mitigation is achieved by maintaining Independent Counter Estimation buckets,<ref>{{Cite journal|<ins style="font-weight: bold; text-decoration: none;">last1</ins>=Einziger|<ins style="font-weight: bold; text-decoration: none;">first1</ins>=G.|last2=Fellman|first2=B.|last3=Kassner|first3=Y.|date=April 2015|title=Independent counter estimation buckets|journal=2015 IEEE Conference on Computer Communications (INFOCOM)|pages=2560–2568|doi=10.1109/INFOCOM.2015.7218646|isbn=978-1-4799-8381-0<ins style="font-weight: bold; text-decoration: none;">|s2cid=15673730 </ins>}}</ref> which restrict the effect of a larger counter to the other counters in the bucket.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Algorithm==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Algorithm==</div></td>
</tr>
</table>
Citation bot
https://en.wikipedia.org/w/index.php?title=Approximate_counting_algorithm&diff=1013586160&oldid=prev
2A01:E34:ECD2:4CF0:FD49:70A3:47AC:5A5F at 12:42, 22 March 2021
2021-03-22T12:42:13Z
<p></p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 12:42, 22 March 2021</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 1:</td>
<td colspan="2" class="diff-lineno">Line 1:</td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The '''approximate counting algorithm''' allows the counting of a large number of events using a small amount of memory. Invented in 1977 by [[Robert Morris (cryptographer)]] of [[Bell Labs]], it uses [[randomized algorithm|probabilistic techniques]] to increment the [[Counter (digital)|counter]]. It was fully analyzed in the early 1980s by [[Philippe Flajolet]] of [[INRIA]] Rocquencourt, who coined the name '''approximate counting''', and strongly contributed to its recognition among the research community. When focused on high quality of approximation and low probability of failure, [[Jelani Nelson|Nelson]] and Yu showed that a very slight modification to the Morris Counter is asymptotically optimal amongst all algorithms for the problem.<ref name=ny2020>{{cite journal | last1=Nelson | first1=Jelani | last2 = Yu | first2 = Huacheng | year=2020 | title=Optimal bounds for approximate counting | arxiv=2010.02116 }} </ref> The algorithm is considered one of the precursors of streaming algorithms, and the more general problem of determining the frequency moments of a data stream has been central to the field.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The '''approximate counting algorithm''' allows the counting of a large number of events using a small amount of memory. Invented in 1977 by [[Robert Morris (cryptographer)]] of [[Bell Labs]], it uses [[randomized algorithm|probabilistic techniques]] to increment the [[Counter (digital)|counter]]. It was fully analyzed in the early 1980s by [[Philippe Flajolet]] of [[INRIA]] Rocquencourt, who coined the name '''approximate counting''', and strongly contributed to its recognition among the research community. When focused on high quality of approximation and low probability of failure, [[Jelani Nelson|Nelson]] and Yu showed that a very slight modification to the Morris Counter is asymptotically optimal amongst all algorithms for the problem.<ref name=ny2020>{{cite journal | last1=Nelson | first1=Jelani | last2 = Yu | first2 = Huacheng | year=2020 | title=Optimal bounds for approximate counting | arxiv=2010.02116 }} </ref> The algorithm is considered one of the precursors of <ins style="font-weight: bold; text-decoration: none;">[[Streaming algorithm|</ins>streaming algorithms<ins style="font-weight: bold; text-decoration: none;">]]</ins>, and the more general problem of determining the frequency moments of a data stream has been central to the field.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Theory of operation==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Theory of operation==</div></td>
</tr>
</table>
2A01:E34:ECD2:4CF0:FD49:70A3:47AC:5A5F