<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.formulasearchengine.com/index.php?action=history&amp;feed=atom&amp;title=Bioconcentration</id>
	<title>Bioconcentration - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://en.formulasearchengine.com/index.php?action=history&amp;feed=atom&amp;title=Bioconcentration"/>
	<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/index.php?title=Bioconcentration&amp;action=history"/>
	<updated>2026-05-04T12:40:03Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0-wmf.28</generator>
	<entry>
		<id>https://en.formulasearchengine.com/index.php?title=Bioconcentration&amp;diff=27761&amp;oldid=prev</id>
		<title>en&gt;BattyBot: fixed CS1 errors: dates &amp; General fixes using AWB (9803)</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/index.php?title=Bioconcentration&amp;diff=27761&amp;oldid=prev"/>
		<updated>2013-12-21T13:59:42Z</updated>

		<summary type="html">&lt;p&gt;fixed &lt;a href=&quot;/index.php?title=Category:CS1_errors:_dates&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:CS1 errors: dates (page does not exist)&quot;&gt;CS1 errors: dates&lt;/a&gt; &amp;amp; &lt;a href=&quot;/index.php?title=WP:AWB/GF&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:AWB/GF (page does not exist)&quot;&gt;General fixes&lt;/a&gt; using &lt;a href=&quot;/index.php?title=Testwiki:AWB&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Testwiki:AWB (page does not exist)&quot;&gt;AWB&lt;/a&gt; (9803)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[File:Kinetic heap overview.png|right]]&lt;br /&gt;
A &amp;#039;&amp;#039;&amp;#039;Kinetic Heap&amp;#039;&amp;#039;&amp;#039; is a [[kinetic data structure]], obtained by the [[Kinetic data structure#Certificates Approach|kinetization]] of a [[heap (data structure)|heap]]. It is designed to store elements (keys associated with priorities) where the priority is changing as a continuous function of time. As a type of [[Kinetic Priority Queue|kinetic priority queue]], it maintains the maximum priority element stored in it. &lt;br /&gt;
The kinetic heap data structure works by storing the elements as a tree that satisfies the following heap property - if {{math|&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;}} is a [[child node]] of {{math|&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;}}, then the priority of the element in {{math|&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;}} must be higher than the priority of the element in {{math|&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;}}. This heap property is enforced using [[kinetic data structure#Certificates Approach|certificates]] along every edge so, like other kinetic data structures, a kinetic heap also contains a priority queue (the event queue) to maintain certificate failure times.&lt;br /&gt;
&lt;br /&gt;
== Implementation and operations ==&lt;br /&gt;
A regular heap can be kinetized by augmenting with a certificate [{{math|&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;&amp;gt;&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;}}] for every pair of nodes{{math|&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;}}, {{math|&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;}} such that {{math|&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;}} is a child node of {{math|&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;}}. If the value stored at a node {{math|&amp;lt;var&amp;gt;X&amp;lt;/var&amp;gt;}} is a function {{math|f&amp;lt;sub&amp;gt;&amp;lt;var&amp;gt;X&amp;lt;/var&amp;gt;&amp;lt;/sub&amp;gt;(&amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt;)}} of time, then this certificate is only valid while {{math|f&amp;lt;sub&amp;gt;&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;&amp;lt;/sub&amp;gt;(&amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt;) &amp;gt; f&amp;lt;sub&amp;gt;&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;&amp;lt;/sub&amp;gt;(&amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt;)}}. Thus, the failure of this certificate must be scheduled in the event queue at a time {{math|&amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt;}} such that {{math|f&amp;lt;sub&amp;gt;&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;&amp;lt;/sub&amp;gt;(&amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt;) &amp;gt; f&amp;lt;sub&amp;gt;&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;&amp;lt;/sub&amp;gt;(&amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt;)}}.&lt;br /&gt;
&lt;br /&gt;
All certificate failures are scheduled on the &amp;quot;event queue&amp;quot;, which is assumed to be an efficient priority queue whose operations take {{math|O(log &amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)}} time.&lt;br /&gt;
&lt;br /&gt;
=== Dealing with certificate failures ===&lt;br /&gt;
[[File:Kinetic heap swap.png|right]]&lt;br /&gt;
When a certificate [{{math|&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;&amp;gt;&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;}}] fails, the data structure must swap {{math|&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;}} and {{math|&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;}} in the heap, and update the certificates that each of them was present in.&lt;br /&gt;
&lt;br /&gt;
For example, if &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; (call its [[child nodes]] &amp;lt;math&amp;gt;Y,Z&amp;lt;/math&amp;gt;) was a child node of &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (call its child nodes&amp;lt;math&amp;gt;B,C&amp;lt;/math&amp;gt; and its [[parent node]] &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;), and the certificate [{{math|&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;&amp;gt;&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;}}] fails, then the data structure must swap&amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, then replace the old certificates (and the corresponding scheduled events) [{{math|&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;&amp;gt;&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;}}], [{{math|&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;&amp;lt;&amp;lt;var&amp;gt;X&amp;lt;/var&amp;gt;}}], [{{math|&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;&amp;gt;&amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt;}}], [{{math|&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;&amp;gt;&amp;lt;var&amp;gt;Y&amp;lt;/var&amp;gt;}}], [{{math|&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;&amp;gt;&amp;lt;var&amp;gt;Z&amp;lt;/var&amp;gt;}}] with new certificates [{{math|&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;&amp;gt;&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;}}], [{{math|&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;&amp;lt;&amp;lt;var&amp;gt;X&amp;lt;/var&amp;gt;}}], [{{math|&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;&amp;gt;&amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt;}}], [{{math|&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;&amp;gt;&amp;lt;var&amp;gt;Y&amp;lt;/var&amp;gt;}}] and [{{math|&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;&amp;gt;&amp;lt;var&amp;gt;Z&amp;lt;/var&amp;gt;}}].&lt;br /&gt;
&lt;br /&gt;
Thus, assuming [[Degeneracy (mathematics)|non-degeneracy]] of the events (no two events happen at the same time), only a constant number of events need to be de-scheduled and re-scheduled even in the worst case.&lt;br /&gt;
&lt;br /&gt;
=== Operations ===&lt;br /&gt;
A kinetic heap supports the following operations:&lt;br /&gt;
* {{math|&amp;#039;&amp;#039;&amp;#039;create-heap&amp;#039;&amp;#039;&amp;#039;(&amp;lt;var&amp;gt;h&amp;lt;/var&amp;gt;)}}: create an empty kinetic heap {{math|&amp;lt;var&amp;gt;h&amp;lt;/var&amp;gt;}}&lt;br /&gt;
* {{math|&amp;#039;&amp;#039;&amp;#039;find-max&amp;#039;&amp;#039;&amp;#039;(&amp;lt;var&amp;gt;h, t&amp;lt;/var&amp;gt;)}} (or &amp;#039;&amp;#039;&amp;#039;find-min&amp;#039;&amp;#039;&amp;#039;): - return the {{math|max}} (or {{math|min}} for a {{math|min-heap}}) value stored in the heap  {{math|&amp;lt;var&amp;gt;h&amp;lt;/var&amp;gt;}} at the current virtual time {{math|&amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt;}}.&lt;br /&gt;
* {{math|&amp;#039;&amp;#039;&amp;#039;insert&amp;#039;&amp;#039;&amp;#039;(&amp;lt;var&amp;gt;X&amp;lt;/var&amp;gt;, f&amp;lt;sub&amp;gt;&amp;lt;var&amp;gt;X&amp;lt;/var&amp;gt;&amp;lt;/sub&amp;gt;, &amp;lt;var&amp;gt;t&amp;lt;var&amp;gt;)}}: - insert a key {{math|&amp;lt;var&amp;gt;X&amp;lt;/var&amp;gt;}} into the kinetic heap at the current virtual time {{math|&amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt;}}, whose value changes as a continuous function {{math|f&amp;lt;sub&amp;gt;&amp;lt;var&amp;gt;X&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt;(&amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt;)}} of time {{math|&amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt;}}. The insertion is done as in a normal heap in {{math|O(log &amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)}} time, but {{math|O(log &amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)}} certificates might need to be changed as a result, so the total time for rescheduling certificate failures is  {{math|O(log &amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; &amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)}}&lt;br /&gt;
* {{math|&amp;#039;&amp;#039;&amp;#039;delete&amp;#039;&amp;#039;&amp;#039;(&amp;lt;var&amp;gt;X&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt;)}} - delete a key {{math||&amp;lt;var&amp;gt;X&amp;lt;/var&amp;gt;}} at the current virtual time {{math|&amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt;}}. The deletion is done as in a normal heap in {{math|O(log &amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)}} time, but {{math|O(log &amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)}} certificates might need to be changed as a result, so the total time for rescheduling certificate failures is  {{math|O(log &amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; &amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)}}.&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
Kinetic heaps perform well according to the four metrics ([[kinetic data structure#Performance|responsiveness]], [[kinetic data structure#Performance|locality]], [[kinetic data structure#Performance|compactness]] and [[kinetic data structure#Performance|efficiency]]) of kinetic data structure quality defined by Basch et al.&amp;lt;ref name=&amp;quot;mobile&amp;quot;/&amp;gt; The analysis of the first three qualities is straightforward:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[kinetic data structure#Performance|Responsiveness]]:&amp;#039;&amp;#039;&amp;#039;A kinetic heap is responsive, since each certificate failure causes the concerned keys to be swapped and leads to only five certificates being replaced in the worst case.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[kinetic data structure#Performance|Locality]]:&amp;#039;&amp;#039;&amp;#039; Each node is present in one certificate each along with its parent node and two child nodes (if present), meaning that each node can be involved in a total of three scheduled events in the worst case, thus kinetic heaps are local.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[kinetic data structure#Performance|Compactness]]:&amp;#039;&amp;#039;&amp;#039; Each edge in the heap corresponds to exactly one scheduled event, therefore the number of scheduled events is exactly {{math||&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;-1}} where {{math|&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;}} is the number of nodes in the kinetic heap. Thus, kinetic heaps are compact.&lt;br /&gt;
&lt;br /&gt;
=== Analysis of efficiency ===&lt;br /&gt;
The efficiency of a kinetic heap in the general case is largely unknown.&amp;lt;ref name=&amp;quot;mobile&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;heap analysis&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;hanger&amp;quot;/&amp;gt;However, in the special case of [[Kinetic data structure#Types of Trajectories|affine motion]] {{math|f(&amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt;) {{=}}  a&amp;lt;var&amp;gt;t&amp;lt;/var&amp;gt; + b}} of the priorities, kinetic heaps are known to be very efficient.&amp;lt;ref name=&amp;quot;heap analysis&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Affine motion, no insertions or deletions ====&lt;br /&gt;
In this special case, the maximum number of events processed by a kinetic heap can be shown to be exactly the number of edges in the [[transitive closure]] of the tree structure of the heap, which is {{math|O(&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;log&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)}} for a tree of height {{math|O(log&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)}} &amp;lt;ref name=&amp;quot;heap analysis&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Affine motion, with insertions and deletions ====&lt;br /&gt;
If {{math|&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;}} insertions and deletions are made on a kinetic heap that starts empty, the maximum number of events processed is &amp;lt;math&amp;gt;O(n \sqrt{n\log n})&amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;sweep&amp;quot;/&amp;gt; However, this bound is not believed to be tight,&amp;lt;ref name=&amp;quot;heap analysis&amp;quot;/&amp;gt; and the only known lower bound is &amp;lt;math&amp;gt;\Omega(n\log n)&amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;sweep&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variants ==&lt;br /&gt;
This article deals with &amp;quot;simple&amp;quot; kinetic heaps as described above, but other variants have been developed for specialized applications,&amp;lt;ref name=&amp;quot;tarjan&amp;quot;/&amp;gt; such as: &lt;br /&gt;
* [[Fibonacci kinetic heap]]&lt;br /&gt;
* [[Incremental kinetic heap]]&lt;br /&gt;
&lt;br /&gt;
Other heap-like kinetic priority queues are:&lt;br /&gt;
* [[Kinetic heater]]&lt;br /&gt;
* [[Kinetic hanger]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Reflist| refs=&lt;br /&gt;
&amp;lt;ref name=&amp;quot;heap analysis&amp;quot;&amp;gt;{{cite web | url=http://www.uniriotec.br/~fonseca/kh.pdf | title=Kinetic heap-ordered trees: Tight analysis and improved algorithms | publisher=Information Processing Letters | accessdate=May 17, 2012 | author=da Fonseca, Guilherme D. and de Figueiredo, Celina M. H. | pages=165–169}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;hanger&amp;quot;&amp;gt;&lt;br /&gt;
{{cite web | url=http://www.uniriotec.br/~fonseca/hanger.pdf | title=Kinetic hanger |publisher=Information Processing Letters | accessdate=May 17, 2012 | author=da Fonseca, Guilherme D. and de Figueiredo, Celina M. H. and Carvalho, Paulo C. P. | pages=151–157}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;mobile&amp;quot;&amp;gt;&lt;br /&gt;
{{cite conference | url=http://dl.acm.org/citation.cfm?id=314435 | title=Data structures for mobile data | publisher=Society for Industrial and Applied Mathematics | accessdate=May 17, 2012 | author=Basch, J., Guibas, L. J., Hershberger, J | booktitle=Proceedings of the eighth annual ACM-SIAM symposium on Discrete algorithms | year=1997 | conference=SODA | pages=747 -756}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;sweep&amp;quot;&amp;gt;&lt;br /&gt;
{{cite conference | url=http://dl.acm.org/citation.cfm?id=263089 | title=Sweeping lines and line segments with a heap | publisher=ACM | accessdate=May 17, 2012 | author=Basch, J, Guibas, L. J., Ramkumar, G. D. | booktitle=Proceedings of the thirteenth annual symposium on Computational geometry | year=1997 | conference=SCG | pages=469-471}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;tarjan&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{cite conference| url= | title = Faster kinetic heaps and their use&lt;br /&gt;
in broadcast scheduling | publisher=ACM | accessdate=May 17, 2012| author = K. H., Tarjan, R. and T. K. | booktitle=Proc. 12th ACM-SIAM Symposium on Discrete Algorithms |pages=836–844| year=2001}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
{{cite web |url=http://graphics.stanford.edu/projects/lgl/papers/g-KDS_DS-Handbook-04/g-KDS_DS-Handbook-04.pdf| title=Kinetic Data Structures - Handbook |accessdate=May 17, 2012 | author=Guibas, Leonidas}}&lt;br /&gt;
&amp;lt;!--- Categories ---&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles created via the Article Wizard]]&lt;br /&gt;
[[Category:Kinetic data structures]]&lt;br /&gt;
[[Category:Heaps (data structures)]]&lt;/div&gt;</summary>
		<author><name>en&gt;BattyBot</name></author>
	</entry>
</feed>