<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.algo.informatik.tu-darmstadt.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cuozzo</id>
	<title>Algowiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.algo.informatik.tu-darmstadt.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cuozzo"/>
	<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/Special:Contributions/Cuozzo"/>
	<updated>2026-05-21T17:54:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=693</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=693"/>
		<updated>2014-10-06T10:09:18Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Graph Algorithms */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
* &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; [http://www.mediawiki.org/wiki/Manual:Math available now!]&lt;br /&gt;
* ToDo List added&lt;br /&gt;
* Every content has to be in English!&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi Syntaxhighlight]&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
* Add finalized reconstructions of the old Wiki to Category:Checkup.&lt;br /&gt;
* Don't any non-Weihe content until the reconstructions isn't finished.&lt;br /&gt;
* Keep your active reconstructing Pages in &amp;quot;Division of labor&amp;quot; section up to date!&lt;br /&gt;
&lt;br /&gt;
== Divison of labor ==&lt;br /&gt;
* Fabio Cuozzo - Bellman-Ford&lt;br /&gt;
* Daniel Kratschmann - Problems&lt;br /&gt;
* Jan Hohmann - B-Tree&lt;br /&gt;
* Jan Rathjens - Ford-Fulkerson&lt;br /&gt;
* Thomas Lautenschläger - ???&lt;br /&gt;
&lt;br /&gt;
== Page Status ==&lt;br /&gt;
Final: [[:Category:Checkup]]&lt;br /&gt;
&lt;br /&gt;
== To Do ==&lt;br /&gt;
=== Notations ===&lt;br /&gt;
* [[Asymptotic notation]]&lt;br /&gt;
* [[L' Hospital]]&lt;br /&gt;
* [[Master theorem]]&lt;br /&gt;
=== Problems ===&lt;br /&gt;
* [[Maximum matching problem]]&lt;br /&gt;
* [[Max-Flow Problems]]&lt;br /&gt;
* [[Min-Cost Flow Problems]]&lt;br /&gt;
* [[Shortest Paths Problems]]&lt;br /&gt;
** [[All pairs shortest paths]]&lt;br /&gt;
*** [[Floyd-Warshall]]&lt;br /&gt;
*** [[Bellman-Ford]] (DONE)&lt;br /&gt;
*** [[Shortest paths by repeated squaring]] (variant of Bellman-Ford) &lt;br /&gt;
** [[Single source shortest paths]]&lt;br /&gt;
*** [[Dijkstra]]&lt;br /&gt;
** [[Single source single target shortest paths]]&lt;br /&gt;
*** [[A*]]&lt;br /&gt;
* [[Maximum spanning forest]]&lt;br /&gt;
* [[Problems on Sequences]]&lt;br /&gt;
** [[Basic Problems on Sequences]]&lt;br /&gt;
*** [[Find an element in a sequence]] (DONE)&lt;br /&gt;
*** [[Insert an element in a sequence]] (Empty in old wiki?!)&lt;br /&gt;
*** [[Median]] (DONE)&lt;br /&gt;
*** [[Merging two sorted sequences]] (DONE)&lt;br /&gt;
** [[Pattern Matching]]&lt;br /&gt;
*** [[One-dimensional string matching]] (DONE)&lt;br /&gt;
*** [[String matching]] (DONE)&lt;br /&gt;
** [[Sorting]]&lt;br /&gt;
*** [[Sorting based on pairwise comparison]] (DONE)&lt;br /&gt;
*** [[Sorting Sequences of Strings]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Coding Basics ===&lt;br /&gt;
* [[Heritage]]&lt;br /&gt;
* [[Generics]]&lt;br /&gt;
* [[Collections]]&lt;br /&gt;
** [[Iterator]]&lt;br /&gt;
** [[Comparator]]&lt;br /&gt;
&lt;br /&gt;
=== String Matching Algorithms ===&lt;br /&gt;
* [[Simple string matching algorithm]] (DONE)&lt;br /&gt;
* [[String matching based on finite automaton]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Sorting Algorithms ===&lt;br /&gt;
* [[Bubble]]&lt;br /&gt;
* [[Insertion sort]]&lt;br /&gt;
* [[Quicksort]]&lt;br /&gt;
* [[Bubblesort]]&lt;br /&gt;
* [[Mergesort]]&lt;br /&gt;
* [[Bucketsort]]&lt;br /&gt;
* [[Selection sort]]&lt;br /&gt;
* [[Bogosort]]&lt;br /&gt;
&lt;br /&gt;
=== Search Algorithms ===&lt;br /&gt;
* [[Binary search]]&lt;br /&gt;
&lt;br /&gt;
=== Tree Algorithms ===&lt;br /&gt;
* [[Depth-first search]]&lt;br /&gt;
* [[Breadth-first search]]&lt;br /&gt;
* [[B-tree: find]]&lt;br /&gt;
* [[B-tree: minimum]]&lt;br /&gt;
* [[B-tree: maximum]]&lt;br /&gt;
* [[B-tree: insert]]&lt;br /&gt;
* [[B-tree: insert and rearrange]]&lt;br /&gt;
* [[B-tree: merge two siblings]]&lt;br /&gt;
* [[B-tree: remove]]&lt;br /&gt;
* [[B-tree: shift key to sibling]]&lt;br /&gt;
* [[B-tree: rotate]]&lt;br /&gt;
* [[B-tree: merge]]&lt;br /&gt;
* [[B-tree: split]]&lt;br /&gt;
* [[Binary search tree: find]]&lt;br /&gt;
* [[Binary search tree: minimum]]&lt;br /&gt;
* [[Binary search tree: maximum]]&lt;br /&gt;
* [[Binary search tree: insert]]&lt;br /&gt;
* [[Binary search tree: remove]]&lt;br /&gt;
* [[Binary search tree: remove node]]&lt;br /&gt;
* [[Binary search tree: traverse]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Theory ===&lt;br /&gt;
* [[Directed graph]]&lt;br /&gt;
* [[Bipartite graph|Bipartite graph]] (DONE)&lt;br /&gt;
* [[k-partite graph]]&lt;br /&gt;
* [[Negative paths]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Algorithms ===&lt;br /&gt;
* [[Dijkstra]]&lt;br /&gt;
* [[Kruskal]]&lt;br /&gt;
* [[Prim]]&lt;br /&gt;
* [[Bellman-Ford]] (DONE)&lt;br /&gt;
* [[Floyd-Warshall]]&lt;br /&gt;
* [[Union Find]]&lt;br /&gt;
* [[A*]]&lt;br /&gt;
* [[Alternating paths algorithm]]&lt;br /&gt;
* [[Johnson]]&lt;br /&gt;
&lt;br /&gt;
=== Flow Algorithms ===&lt;br /&gt;
* [[Ford-Fulkerson]]&lt;br /&gt;
== Abstract Data Structures ==&lt;br /&gt;
*[[Network Structures]]&lt;br /&gt;
**[[Graph]]&lt;br /&gt;
**[[Tree]]&lt;br /&gt;
*[[Sequence]]&lt;br /&gt;
**[[Sorted sequence]]&lt;br /&gt;
**[[Bounded priority queue]]&lt;br /&gt;
**[[Linear sequence]]&lt;br /&gt;
**[[Priority queue]]&lt;br /&gt;
**[[Sorted sequence]]&lt;br /&gt;
=== Implementations of Abstract Data Structures  ===&lt;br /&gt;
* [[Linked list]]&lt;br /&gt;
* [[Array list]]&lt;br /&gt;
* [[Binary search tree]]&lt;br /&gt;
* [[Doubly-linked list]]&lt;br /&gt;
* [[Heap as array]] (DONE (Heap as Array))&lt;br /&gt;
* [[Hashtable]]&lt;br /&gt;
* [[Multi-way search tree]]&lt;br /&gt;
* [[Red-black tree]]&lt;br /&gt;
* [[B-tree]]&lt;br /&gt;
&lt;br /&gt;
=== ??? ===&lt;br /&gt;
* [[Min-Max Heaps]]&lt;br /&gt;
* [[First In - First Out]]&lt;br /&gt;
* [[First In - Ieast Out]]&lt;br /&gt;
* [[Directed Tree]]&lt;br /&gt;
* [[Decision Tree]]&lt;br /&gt;
&lt;br /&gt;
=== Other Algorithms (LOCKED) ===&lt;br /&gt;
* [[B*]]&lt;br /&gt;
* [[Cyclic redundancy check]]&lt;br /&gt;
* [[Eulcid]]&lt;br /&gt;
* [[Gauss]]&lt;br /&gt;
* [[Discrete fourier transform]]&lt;br /&gt;
* [[Fast fourier transform]]&lt;br /&gt;
* [[Bresenham]]&lt;br /&gt;
* [[Round robin]]&lt;br /&gt;
* [[Seperate and conquer]]&lt;br /&gt;
* [[Message-Digest algorithm]]&lt;br /&gt;
* [[Secure hash algorithm]]&lt;br /&gt;
* [[Sequent calculus]]&lt;br /&gt;
* [[Resolution calculus]]&lt;br /&gt;
* [[Cocke-Younger-Kasami algorithm]]&lt;br /&gt;
* [[Distance vector routing]]&lt;br /&gt;
* [[Link state routing]]&lt;br /&gt;
* [[Z Buffer algorithm]]&lt;br /&gt;
* [[Marching squares]]&lt;br /&gt;
* [[Marching cubes]]&lt;br /&gt;
* [[Bottom-Up heapsort]]&lt;br /&gt;
* [[Radixsort]]&lt;br /&gt;
* [[Median cut]]&lt;br /&gt;
* [[Pancake sorting]]&lt;br /&gt;
* [[Karnaugh-Veitch diagramm]]&lt;br /&gt;
* [[Delanuay triangulation]]&lt;br /&gt;
* [[Backtracking]]&lt;br /&gt;
* [[Alpha–beta pruning]]&lt;br /&gt;
* [[Beam search]]&lt;br /&gt;
* [[Best-first search]]&lt;br /&gt;
* [[Bidirectional search]]&lt;br /&gt;
* [[Borůvka's algorithm]]&lt;br /&gt;
* [[Branch and bound]]&lt;br /&gt;
* [[D*]]&lt;br /&gt;
* [[Depth-limited search]]&lt;br /&gt;
* [[Edmonds' algorithm]]&lt;br /&gt;
* [[Fringe search]]&lt;br /&gt;
* [[Hill climbing]]&lt;br /&gt;
* [[IDA*]]&lt;br /&gt;
* [[Iterative deepening depth-first search]]&lt;br /&gt;
* [[Jump point search]]&lt;br /&gt;
* [[Lexicographic breadth-first search]]&lt;br /&gt;
* [[SMA*]]&lt;br /&gt;
* [[Uniform-cost search]]&lt;br /&gt;
&lt;br /&gt;
=== Other Data Structures (LOCKED) ===&lt;br /&gt;
* [[Adelson-Velskii and Landis' tree]]&lt;br /&gt;
* [[Patricia-Trie]]&lt;br /&gt;
* [[Suffix Tree]]&lt;br /&gt;
* [[Huffmann Tree]]&lt;br /&gt;
* [[Binary Expression Tree]]&lt;br /&gt;
* [[Hash Set]]&lt;br /&gt;
* [[Incidence Matrix]]&lt;br /&gt;
* [[Voronoi Diagramm]]&lt;br /&gt;
* [[Quad Tree]]&lt;br /&gt;
* [[Oct Tree]]&lt;br /&gt;
* [[kd Tree]]&lt;br /&gt;
* [[Binary space partitioning]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=692</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=692"/>
		<updated>2014-10-06T10:08:55Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Problems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
* &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; [http://www.mediawiki.org/wiki/Manual:Math available now!]&lt;br /&gt;
* ToDo List added&lt;br /&gt;
* Every content has to be in English!&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi Syntaxhighlight]&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
* Add finalized reconstructions of the old Wiki to Category:Checkup.&lt;br /&gt;
* Don't any non-Weihe content until the reconstructions isn't finished.&lt;br /&gt;
* Keep your active reconstructing Pages in &amp;quot;Division of labor&amp;quot; section up to date!&lt;br /&gt;
&lt;br /&gt;
== Divison of labor ==&lt;br /&gt;
* Fabio Cuozzo - Bellman-Ford&lt;br /&gt;
* Daniel Kratschmann - Problems&lt;br /&gt;
* Jan Hohmann - B-Tree&lt;br /&gt;
* Jan Rathjens - Ford-Fulkerson&lt;br /&gt;
* Thomas Lautenschläger - ???&lt;br /&gt;
&lt;br /&gt;
== Page Status ==&lt;br /&gt;
Final: [[:Category:Checkup]]&lt;br /&gt;
&lt;br /&gt;
== To Do ==&lt;br /&gt;
=== Notations ===&lt;br /&gt;
* [[Asymptotic notation]]&lt;br /&gt;
* [[L' Hospital]]&lt;br /&gt;
* [[Master theorem]]&lt;br /&gt;
=== Problems ===&lt;br /&gt;
* [[Maximum matching problem]]&lt;br /&gt;
* [[Max-Flow Problems]]&lt;br /&gt;
* [[Min-Cost Flow Problems]]&lt;br /&gt;
* [[Shortest Paths Problems]]&lt;br /&gt;
** [[All pairs shortest paths]]&lt;br /&gt;
*** [[Floyd-Warshall]]&lt;br /&gt;
*** [[Bellman-Ford]] (DONE)&lt;br /&gt;
*** [[Shortest paths by repeated squaring]] (variant of Bellman-Ford) &lt;br /&gt;
** [[Single source shortest paths]]&lt;br /&gt;
*** [[Dijkstra]]&lt;br /&gt;
** [[Single source single target shortest paths]]&lt;br /&gt;
*** [[A*]]&lt;br /&gt;
* [[Maximum spanning forest]]&lt;br /&gt;
* [[Problems on Sequences]]&lt;br /&gt;
** [[Basic Problems on Sequences]]&lt;br /&gt;
*** [[Find an element in a sequence]] (DONE)&lt;br /&gt;
*** [[Insert an element in a sequence]] (Empty in old wiki?!)&lt;br /&gt;
*** [[Median]] (DONE)&lt;br /&gt;
*** [[Merging two sorted sequences]] (DONE)&lt;br /&gt;
** [[Pattern Matching]]&lt;br /&gt;
*** [[One-dimensional string matching]] (DONE)&lt;br /&gt;
*** [[String matching]] (DONE)&lt;br /&gt;
** [[Sorting]]&lt;br /&gt;
*** [[Sorting based on pairwise comparison]] (DONE)&lt;br /&gt;
*** [[Sorting Sequences of Strings]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Coding Basics ===&lt;br /&gt;
* [[Heritage]]&lt;br /&gt;
* [[Generics]]&lt;br /&gt;
* [[Collections]]&lt;br /&gt;
** [[Iterator]]&lt;br /&gt;
** [[Comparator]]&lt;br /&gt;
&lt;br /&gt;
=== String Matching Algorithms ===&lt;br /&gt;
* [[Simple string matching algorithm]] (DONE)&lt;br /&gt;
* [[String matching based on finite automaton]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Sorting Algorithms ===&lt;br /&gt;
* [[Bubble]]&lt;br /&gt;
* [[Insertion sort]]&lt;br /&gt;
* [[Quicksort]]&lt;br /&gt;
* [[Bubblesort]]&lt;br /&gt;
* [[Mergesort]]&lt;br /&gt;
* [[Bucketsort]]&lt;br /&gt;
* [[Selection sort]]&lt;br /&gt;
* [[Bogosort]]&lt;br /&gt;
&lt;br /&gt;
=== Search Algorithms ===&lt;br /&gt;
* [[Binary search]]&lt;br /&gt;
&lt;br /&gt;
=== Tree Algorithms ===&lt;br /&gt;
* [[Depth-first search]]&lt;br /&gt;
* [[Breadth-first search]]&lt;br /&gt;
* [[B-tree: find]]&lt;br /&gt;
* [[B-tree: minimum]]&lt;br /&gt;
* [[B-tree: maximum]]&lt;br /&gt;
* [[B-tree: insert]]&lt;br /&gt;
* [[B-tree: insert and rearrange]]&lt;br /&gt;
* [[B-tree: merge two siblings]]&lt;br /&gt;
* [[B-tree: remove]]&lt;br /&gt;
* [[B-tree: shift key to sibling]]&lt;br /&gt;
* [[B-tree: rotate]]&lt;br /&gt;
* [[B-tree: merge]]&lt;br /&gt;
* [[B-tree: split]]&lt;br /&gt;
* [[Binary search tree: find]]&lt;br /&gt;
* [[Binary search tree: minimum]]&lt;br /&gt;
* [[Binary search tree: maximum]]&lt;br /&gt;
* [[Binary search tree: insert]]&lt;br /&gt;
* [[Binary search tree: remove]]&lt;br /&gt;
* [[Binary search tree: remove node]]&lt;br /&gt;
* [[Binary search tree: traverse]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Theory ===&lt;br /&gt;
* [[Directed graph]]&lt;br /&gt;
* [[Bipartite graph|Bipartite graph]] (DONE)&lt;br /&gt;
* [[k-partite graph]]&lt;br /&gt;
* [[Negative paths]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Algorithms ===&lt;br /&gt;
* [[Dijkstra]]&lt;br /&gt;
* [[Kruskal]]&lt;br /&gt;
* [[Prim]]&lt;br /&gt;
* [[Bellman-Ford]]&lt;br /&gt;
* [[Floyd-Warshall]]&lt;br /&gt;
* [[Union Find]]&lt;br /&gt;
* [[A*]]&lt;br /&gt;
* [[Alternating paths algorithm]]&lt;br /&gt;
* [[Johnson]]&lt;br /&gt;
&lt;br /&gt;
=== Flow Algorithms ===&lt;br /&gt;
* [[Ford-Fulkerson]]&lt;br /&gt;
== Abstract Data Structures ==&lt;br /&gt;
*[[Network Structures]]&lt;br /&gt;
**[[Graph]]&lt;br /&gt;
**[[Tree]]&lt;br /&gt;
*[[Sequence]]&lt;br /&gt;
**[[Sorted sequence]]&lt;br /&gt;
**[[Bounded priority queue]]&lt;br /&gt;
**[[Linear sequence]]&lt;br /&gt;
**[[Priority queue]]&lt;br /&gt;
**[[Sorted sequence]]&lt;br /&gt;
=== Implementations of Abstract Data Structures  ===&lt;br /&gt;
* [[Linked list]]&lt;br /&gt;
* [[Array list]]&lt;br /&gt;
* [[Binary search tree]]&lt;br /&gt;
* [[Doubly-linked list]]&lt;br /&gt;
* [[Heap as array]] (DONE (Heap as Array))&lt;br /&gt;
* [[Hashtable]]&lt;br /&gt;
* [[Multi-way search tree]]&lt;br /&gt;
* [[Red-black tree]]&lt;br /&gt;
* [[B-tree]]&lt;br /&gt;
&lt;br /&gt;
=== ??? ===&lt;br /&gt;
* [[Min-Max Heaps]]&lt;br /&gt;
* [[First In - First Out]]&lt;br /&gt;
* [[First In - Ieast Out]]&lt;br /&gt;
* [[Directed Tree]]&lt;br /&gt;
* [[Decision Tree]]&lt;br /&gt;
&lt;br /&gt;
=== Other Algorithms (LOCKED) ===&lt;br /&gt;
* [[B*]]&lt;br /&gt;
* [[Cyclic redundancy check]]&lt;br /&gt;
* [[Eulcid]]&lt;br /&gt;
* [[Gauss]]&lt;br /&gt;
* [[Discrete fourier transform]]&lt;br /&gt;
* [[Fast fourier transform]]&lt;br /&gt;
* [[Bresenham]]&lt;br /&gt;
* [[Round robin]]&lt;br /&gt;
* [[Seperate and conquer]]&lt;br /&gt;
* [[Message-Digest algorithm]]&lt;br /&gt;
* [[Secure hash algorithm]]&lt;br /&gt;
* [[Sequent calculus]]&lt;br /&gt;
* [[Resolution calculus]]&lt;br /&gt;
* [[Cocke-Younger-Kasami algorithm]]&lt;br /&gt;
* [[Distance vector routing]]&lt;br /&gt;
* [[Link state routing]]&lt;br /&gt;
* [[Z Buffer algorithm]]&lt;br /&gt;
* [[Marching squares]]&lt;br /&gt;
* [[Marching cubes]]&lt;br /&gt;
* [[Bottom-Up heapsort]]&lt;br /&gt;
* [[Radixsort]]&lt;br /&gt;
* [[Median cut]]&lt;br /&gt;
* [[Pancake sorting]]&lt;br /&gt;
* [[Karnaugh-Veitch diagramm]]&lt;br /&gt;
* [[Delanuay triangulation]]&lt;br /&gt;
* [[Backtracking]]&lt;br /&gt;
* [[Alpha–beta pruning]]&lt;br /&gt;
* [[Beam search]]&lt;br /&gt;
* [[Best-first search]]&lt;br /&gt;
* [[Bidirectional search]]&lt;br /&gt;
* [[Borůvka's algorithm]]&lt;br /&gt;
* [[Branch and bound]]&lt;br /&gt;
* [[D*]]&lt;br /&gt;
* [[Depth-limited search]]&lt;br /&gt;
* [[Edmonds' algorithm]]&lt;br /&gt;
* [[Fringe search]]&lt;br /&gt;
* [[Hill climbing]]&lt;br /&gt;
* [[IDA*]]&lt;br /&gt;
* [[Iterative deepening depth-first search]]&lt;br /&gt;
* [[Jump point search]]&lt;br /&gt;
* [[Lexicographic breadth-first search]]&lt;br /&gt;
* [[SMA*]]&lt;br /&gt;
* [[Uniform-cost search]]&lt;br /&gt;
&lt;br /&gt;
=== Other Data Structures (LOCKED) ===&lt;br /&gt;
* [[Adelson-Velskii and Landis' tree]]&lt;br /&gt;
* [[Patricia-Trie]]&lt;br /&gt;
* [[Suffix Tree]]&lt;br /&gt;
* [[Huffmann Tree]]&lt;br /&gt;
* [[Binary Expression Tree]]&lt;br /&gt;
* [[Hash Set]]&lt;br /&gt;
* [[Incidence Matrix]]&lt;br /&gt;
* [[Voronoi Diagramm]]&lt;br /&gt;
* [[Quad Tree]]&lt;br /&gt;
* [[Oct Tree]]&lt;br /&gt;
* [[kd Tree]]&lt;br /&gt;
* [[Binary space partitioning]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Bellman-Ford&amp;diff=691</id>
		<title>Bellman-Ford</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Bellman-Ford&amp;diff=691"/>
		<updated>2014-10-06T10:05:56Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[All pairs shortest paths]]&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
'''Type of algorithm:''' loop&lt;br /&gt;
'''Auxiliary data:'''&lt;br /&gt;
# A [[Paths|distance-valued]] &amp;lt;math&amp;gt;(n \times n)&amp;lt;/math&amp;gt; matrix &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;n=|V|&amp;lt;/math&amp;gt;. The eventual contents of &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; will be returned as the result of the algorithm.&lt;br /&gt;
# A [[Paths|distance-valued]] &amp;lt;math&amp;gt;(n \times n)&amp;lt;/math&amp;gt; matrix &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;n=|V|&amp;lt;/math&amp;gt;. This matrix represents the graph and the arc lengths and will not be changed throughout the algorithm. It is &amp;lt;math&amp;gt;L=M^1&amp;lt;/math&amp;gt; in the terminology of Section &amp;quot;Powers of distance matrices&amp;quot; on [[Paths#Powers of distance matrices|this]] page.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' After &amp;lt;math&amp;gt;i \ge 0&amp;lt;/math&amp;gt; iterations, &amp;lt;math&amp;gt;M^i (v,w)&amp;lt;/math&amp;gt; contains the length of a shortest &amp;lt;math&amp;gt;(v,w)&amp;lt;/math&amp;gt;-path with at most &amp;lt;math&amp;gt;i+1&amp;lt;/math&amp;gt; arcs (for all &amp;lt;math&amp;gt;v,w \in V&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; increases by 1.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' &amp;lt;math&amp;gt;i=n-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
'''Abstract view:''' For all &amp;lt;math&amp;gt;v,w \in V&amp;lt;/math&amp;gt;, we set&lt;br /&gt;
# &amp;lt;math&amp;gt;M^0 (v,v):= L(v,v) := 0&amp;lt;/math&amp;gt;;&lt;br /&gt;
# &amp;lt;math&amp;gt;M^0 (v,w):= L(v,w) := \ell (v,w)&amp;lt;/math&amp;gt; if &amp;lt;math&amp;gt;(v,w)\in A&amp;lt;/math&amp;gt;;&lt;br /&gt;
# &amp;lt;math&amp;gt;M^0 (v,w):= L(v,w) := +\infty&amp;lt;/math&amp;gt;, if &amp;lt;math&amp;gt;v\neq w&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;(v,w)\notin A&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
'''Abstract view:''' For all &amp;lt;math&amp;gt;v,w \in V&amp;lt;/math&amp;gt;, we set &amp;lt;math&amp;gt;M^{i+1} (v,w) := \min \{ M^i (v,w) + L(u,w) \mid u \in V \}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
(Note that &amp;lt;math&amp;gt;M^i (v,w) + L(u,w) = M^{i+1} (v,w)&amp;lt;/math&amp;gt; is one of the arguments over which the minimum is taken, so the right-hand side is identical to &amp;lt;math&amp;gt;\min \{ M^i (v,w), \min \{ M^i (v,u)+ L(u,w) \mid u \in V \} \}&amp;lt;/math&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
'''Implementation:''' Obvious.&lt;br /&gt;
&lt;br /&gt;
'''Correctness:''' Follows from the explanations of [[Paths#Powers of distance matrices|powers of the distance matrix]] and from the fact that a shortest path cannot have more than &amp;lt;math&amp;gt;|V|-1&amp;lt;/math&amp;gt; arcs.&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
'''Statement:''' The asymptotic complexity is &amp;lt;math&amp;gt;\Theta (n^4)&amp;lt;/math&amp;gt; in the best and worst case.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' The main loop terminates after &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; iterations. In each iteration of this loop, we update all &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; matrix entries, and computing one update value requires &amp;lt;math&amp;gt;\Theta (n)&amp;lt;/math&amp;gt; steps.&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Bellman-Ford&amp;diff=690</id>
		<title>Bellman-Ford</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Bellman-Ford&amp;diff=690"/>
		<updated>2014-10-06T09:51:46Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;Category:Algorithm Category:Main Algorithm '''Algorithmic problem:''' All pairs shortest paths '''Prerequisites:''' '''Type of algorithm:''' loop '''Auxiliary data...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[All pairs shortest paths]]&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
'''Type of algorithm:''' loop&lt;br /&gt;
'''Auxiliary data:'''&lt;br /&gt;
# A [[Paths|distance-valued]] &amp;lt;math&amp;gt;(n \times n)&amp;lt;/math&amp;gt; matrix &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;n=|V|&amp;lt;/math&amp;gt;. The eventual contents of &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; will be returned as the result of the algorithm.&lt;br /&gt;
# A [[Paths|distance-valued]] &amp;lt;math&amp;gt;(n \times n)&amp;lt;/math&amp;gt; matrix &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;n=|V|&amp;lt;/math&amp;gt;. This matrix represents the graph and the arc lengths and will not be changed throughout the algorithm. It is &amp;lt;math&amp;gt;L=M^1&amp;lt;/math&amp;gt; in the terminology of Section &amp;quot;Powers of distance matrices&amp;quot; on [[Paths#Powers of distance matrices|this]] page.&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=689</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=689"/>
		<updated>2014-10-06T09:45:25Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Divison of labor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
* &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; [http://www.mediawiki.org/wiki/Manual:Math available now!]&lt;br /&gt;
* ToDo List added&lt;br /&gt;
* Every content has to be in English!&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi Syntaxhighlight]&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
* Add finalized reconstructions of the old Wiki to Category:Checkup.&lt;br /&gt;
* Don't any non-Weihe content until the reconstructions isn't finished.&lt;br /&gt;
* Keep your active reconstructing Pages in &amp;quot;Division of labor&amp;quot; section up to date!&lt;br /&gt;
&lt;br /&gt;
== Divison of labor ==&lt;br /&gt;
* Fabio Cuozzo - Bellman-Ford&lt;br /&gt;
* Daniel Kratschmann - Problems&lt;br /&gt;
* Jan Hohmann - B-Tree&lt;br /&gt;
* Jan Rathjens - Ford-Fulkerson&lt;br /&gt;
* Thomas Lautenschläger - ???&lt;br /&gt;
&lt;br /&gt;
== Page Status ==&lt;br /&gt;
Final: [[:Category:Checkup]]&lt;br /&gt;
&lt;br /&gt;
== To Do ==&lt;br /&gt;
=== Notations ===&lt;br /&gt;
* [[Asymptotic notation]]&lt;br /&gt;
* [[L' Hospital]]&lt;br /&gt;
* [[Master theorem]]&lt;br /&gt;
=== Problems ===&lt;br /&gt;
* [[Maximum matching problem]]&lt;br /&gt;
* [[Max-Flow Problems]]&lt;br /&gt;
* [[Min-Cost Flow Problems]]&lt;br /&gt;
* [[Shortest Paths Problems]]&lt;br /&gt;
** [[All pairs shortest paths]]&lt;br /&gt;
*** [[Floyd-Warshall]]&lt;br /&gt;
*** [[Bellman-Ford]]&lt;br /&gt;
*** [[Shortest paths by repeated squaring]] (variant of Bellman-Ford) &lt;br /&gt;
** [[Single source shortest paths]]&lt;br /&gt;
*** [[Dijkstra]]&lt;br /&gt;
** [[Single source single target shortest paths]]&lt;br /&gt;
*** [[A*]]&lt;br /&gt;
* [[Maximum spanning forest]]&lt;br /&gt;
* [[Problems on Sequences]]&lt;br /&gt;
** [[Basic Problems on Sequences]]&lt;br /&gt;
*** [[Find an element in a sequence]] (DONE)&lt;br /&gt;
*** [[Insert an element in a sequence]] (Empty in old wiki?!)&lt;br /&gt;
*** [[Median]] (DONE)&lt;br /&gt;
*** [[Merging two sorted sequences]] (DONE)&lt;br /&gt;
** [[Pattern Matching]]&lt;br /&gt;
*** [[One-dimensional string matching]] (DONE)&lt;br /&gt;
*** [[String matching]] (DONE)&lt;br /&gt;
** [[Sorting]]&lt;br /&gt;
*** [[Sorting based on pairwise comparison]] (DONE)&lt;br /&gt;
*** [[Sorting Sequences of Strings]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Coding Basics ===&lt;br /&gt;
* [[Heritage]]&lt;br /&gt;
* [[Generics]]&lt;br /&gt;
* [[Collections]]&lt;br /&gt;
** [[Iterator]]&lt;br /&gt;
** [[Comparator]]&lt;br /&gt;
&lt;br /&gt;
=== String Matching Algorithms ===&lt;br /&gt;
* [[Simple string matching algorithm]] (DONE)&lt;br /&gt;
* [[String matching based on finite automaton]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Sorting Algorithms ===&lt;br /&gt;
* [[Bubble]]&lt;br /&gt;
* [[Insertion sort]]&lt;br /&gt;
* [[Quicksort]]&lt;br /&gt;
* [[Bubblesort]]&lt;br /&gt;
* [[Mergesort]]&lt;br /&gt;
* [[Bucketsort]]&lt;br /&gt;
* [[Selection sort]]&lt;br /&gt;
* [[Bogosort]]&lt;br /&gt;
&lt;br /&gt;
=== Search Algorithms ===&lt;br /&gt;
* [[Binary search]]&lt;br /&gt;
&lt;br /&gt;
=== Tree Algorithms ===&lt;br /&gt;
* [[Depth-first search]]&lt;br /&gt;
* [[Breadth-first search]]&lt;br /&gt;
* [[B-tree: find]]&lt;br /&gt;
* [[B-tree: minimum]]&lt;br /&gt;
* [[B-tree: maximum]]&lt;br /&gt;
* [[B-tree: insert]]&lt;br /&gt;
* [[B-tree: insert and rearrange]]&lt;br /&gt;
* [[B-tree: merge two siblings]]&lt;br /&gt;
* [[B-tree: remove]]&lt;br /&gt;
* [[B-tree: shift key to sibling]]&lt;br /&gt;
* [[B-tree: rotate]]&lt;br /&gt;
* [[B-tree: merge]]&lt;br /&gt;
* [[B-tree: split]]&lt;br /&gt;
* [[Binary search tree: find]]&lt;br /&gt;
* [[Binary search tree: minimum]]&lt;br /&gt;
* [[Binary search tree: maximum]]&lt;br /&gt;
* [[Binary search tree: insert]]&lt;br /&gt;
* [[Binary search tree: remove]]&lt;br /&gt;
* [[Binary search tree: remove node]]&lt;br /&gt;
* [[Binary search tree: traverse]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Theory ===&lt;br /&gt;
* [[Directed graph]]&lt;br /&gt;
* [[Bipartite graph|Bipartite graph]] (DONE)&lt;br /&gt;
* [[k-partite graph]]&lt;br /&gt;
* [[Negative paths]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Algorithms ===&lt;br /&gt;
* [[Dijkstra]]&lt;br /&gt;
* [[Kruskal]]&lt;br /&gt;
* [[Prim]]&lt;br /&gt;
* [[Bellman-Ford]]&lt;br /&gt;
* [[Floyd-Warshall]]&lt;br /&gt;
* [[Union Find]]&lt;br /&gt;
* [[A*]]&lt;br /&gt;
* [[Alternating paths algorithm]]&lt;br /&gt;
* [[Johnson]]&lt;br /&gt;
&lt;br /&gt;
=== Flow Algorithms ===&lt;br /&gt;
* [[Ford-Fulkerson]]&lt;br /&gt;
== Abstract Data Structures ==&lt;br /&gt;
*[[Network Structures]]&lt;br /&gt;
**[[Graph]]&lt;br /&gt;
**[[Tree]]&lt;br /&gt;
*[[Sequence]]&lt;br /&gt;
**[[Sorted sequence]]&lt;br /&gt;
**[[Bounded priority queue]]&lt;br /&gt;
**[[Linear sequence]]&lt;br /&gt;
**[[Priority queue]]&lt;br /&gt;
**[[Sorted sequence]]&lt;br /&gt;
=== Implementations of Abstract Data Structures  ===&lt;br /&gt;
* [[Linked list]]&lt;br /&gt;
* [[Array list]]&lt;br /&gt;
* [[Binary search tree]]&lt;br /&gt;
* [[Doubly-linked list]]&lt;br /&gt;
* [[Heap as array]] (DONE (Heap as Array))&lt;br /&gt;
* [[Hashtable]]&lt;br /&gt;
* [[Multi-way search tree]]&lt;br /&gt;
* [[Red-black tree]]&lt;br /&gt;
* [[B-tree]]&lt;br /&gt;
&lt;br /&gt;
=== ??? ===&lt;br /&gt;
* [[Min-Max Heaps]]&lt;br /&gt;
* [[First In - First Out]]&lt;br /&gt;
* [[First In - Ieast Out]]&lt;br /&gt;
* [[Directed Tree]]&lt;br /&gt;
* [[Decision Tree]]&lt;br /&gt;
&lt;br /&gt;
=== Other Algorithms (LOCKED) ===&lt;br /&gt;
* [[B*]]&lt;br /&gt;
* [[Cyclic redundancy check]]&lt;br /&gt;
* [[Eulcid]]&lt;br /&gt;
* [[Gauss]]&lt;br /&gt;
* [[Discrete fourier transform]]&lt;br /&gt;
* [[Fast fourier transform]]&lt;br /&gt;
* [[Bresenham]]&lt;br /&gt;
* [[Round robin]]&lt;br /&gt;
* [[Seperate and conquer]]&lt;br /&gt;
* [[Message-Digest algorithm]]&lt;br /&gt;
* [[Secure hash algorithm]]&lt;br /&gt;
* [[Sequent calculus]]&lt;br /&gt;
* [[Resolution calculus]]&lt;br /&gt;
* [[Cocke-Younger-Kasami algorithm]]&lt;br /&gt;
* [[Distance vector routing]]&lt;br /&gt;
* [[Link state routing]]&lt;br /&gt;
* [[Z Buffer algorithm]]&lt;br /&gt;
* [[Marching squares]]&lt;br /&gt;
* [[Marching cubes]]&lt;br /&gt;
* [[Bottom-Up heapsort]]&lt;br /&gt;
* [[Radixsort]]&lt;br /&gt;
* [[Median cut]]&lt;br /&gt;
* [[Pancake sorting]]&lt;br /&gt;
* [[Karnaugh-Veitch diagramm]]&lt;br /&gt;
* [[Delanuay triangulation]]&lt;br /&gt;
* [[Backtracking]]&lt;br /&gt;
* [[Alpha–beta pruning]]&lt;br /&gt;
* [[Beam search]]&lt;br /&gt;
* [[Best-first search]]&lt;br /&gt;
* [[Bidirectional search]]&lt;br /&gt;
* [[Borůvka's algorithm]]&lt;br /&gt;
* [[Branch and bound]]&lt;br /&gt;
* [[D*]]&lt;br /&gt;
* [[Depth-limited search]]&lt;br /&gt;
* [[Edmonds' algorithm]]&lt;br /&gt;
* [[Fringe search]]&lt;br /&gt;
* [[Hill climbing]]&lt;br /&gt;
* [[IDA*]]&lt;br /&gt;
* [[Iterative deepening depth-first search]]&lt;br /&gt;
* [[Jump point search]]&lt;br /&gt;
* [[Lexicographic breadth-first search]]&lt;br /&gt;
* [[SMA*]]&lt;br /&gt;
* [[Uniform-cost search]]&lt;br /&gt;
&lt;br /&gt;
=== Other Data Structures (LOCKED) ===&lt;br /&gt;
* [[Adelson-Velskii and Landis' tree]]&lt;br /&gt;
* [[Patricia-Trie]]&lt;br /&gt;
* [[Suffix Tree]]&lt;br /&gt;
* [[Huffmann Tree]]&lt;br /&gt;
* [[Binary Expression Tree]]&lt;br /&gt;
* [[Hash Set]]&lt;br /&gt;
* [[Incidence Matrix]]&lt;br /&gt;
* [[Voronoi Diagramm]]&lt;br /&gt;
* [[Quad Tree]]&lt;br /&gt;
* [[Oct Tree]]&lt;br /&gt;
* [[kd Tree]]&lt;br /&gt;
* [[Binary space partitioning]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Priority_queue&amp;diff=615</id>
		<title>Priority queue</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Priority_queue&amp;diff=615"/>
		<updated>2014-10-04T15:33:42Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;__NOTOC__ Category:Checkup Category:Abstract Data Structure Category:Sequence ==General information== '''Representation invariant''' # The abstract data structure...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
[[Category:Abstract Data Structure]]&lt;br /&gt;
[[Category:Sequence]]&lt;br /&gt;
==General information==&lt;br /&gt;
'''Representation invariant'''&lt;br /&gt;
# The abstract data structure '''priority queue''' implements [[Sets and sequences#Ordered and sorted sequences|ordered sequences]].&lt;br /&gt;
# This abstract data structure is [[Genericity|generic]] and parameterized by a fixed '''key type''' &amp;lt;math&amp;gt;\mathcal{K}&amp;lt;/math&amp;gt; and a fixed [[Genericity#Comparison|comparison]] &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; defined on &amp;lt;math&amp;gt;\mathcal{K}&amp;lt;/math&amp;gt;.&lt;br /&gt;
# An object with key type &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; represents a finite, dynamically changing [[Sets and sequences|multiset]], whose elements are of type &amp;lt;math&amp;gt;\mathcal{K}&amp;lt;/math&amp;gt; (the multiset may be empty).&lt;br /&gt;
# Let &amp;lt;math&amp;gt;K_{1}, K_{2} \in \mathcal{K}&amp;lt;/math&amp;gt; be two values currently stored in the priority queue object such that &amp;lt;math&amp;gt;K_{1} \le K_{2}&amp;lt;/math&amp;gt;. Then &amp;lt;math&amp;gt;K_{1}&amp;lt;/math&amp;gt; will leave the queue earlier when the method &amp;lt;math&amp;gt;pop&amp;lt;/math&amp;gt; is used than &amp;lt;math&amp;gt;K_{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Constructor:''' Gets a [[Genericity#Comparison|comparison]] &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; and initializes the queue so as to be empty.&lt;br /&gt;
&lt;br /&gt;
==Method==&lt;br /&gt;
'''Name:''' &amp;lt;math&amp;gt;push&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Input:''' A key &amp;lt;math&amp;gt;K \in \mathcal{K}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Output:''' &amp;lt;math&amp;gt;\in \N&amp;lt;/math&amp;gt;. A unique and permanent ID that identifies the inserted heap item.&lt;br /&gt;
&lt;br /&gt;
'''Precondition:''' -&lt;br /&gt;
&lt;br /&gt;
'''Postcondition:''' A new element with the key &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; is inserted into the queue.&lt;br /&gt;
&lt;br /&gt;
==Method==&lt;br /&gt;
'''Name:''' &amp;lt;math&amp;gt;pop&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Input:''' -&lt;br /&gt;
&lt;br /&gt;
'''Output:''' &amp;lt;math&amp;gt;\in \mathcal{K}&amp;lt;/math&amp;gt;. Returns the minimum key &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; currently within the queue.&lt;br /&gt;
&lt;br /&gt;
'''Precondition:''' There should be at least one item left in the queue &amp;lt;math&amp;gt;n&amp;gt;0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Postcondition:''' The length of the queue is smaller by one and the minimum key &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; is dequeued.&lt;br /&gt;
&lt;br /&gt;
==Method==&lt;br /&gt;
'''Name:''' &amp;lt;math&amp;gt;peek&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Input:''' -&lt;br /&gt;
&lt;br /&gt;
'''Output:''' &amp;lt;math&amp;gt;\in \mathcal{K}&amp;lt;/math&amp;gt;. Returns the minimum key &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; currently within the queue or &amp;lt;math&amp;gt;void&amp;lt;/math&amp;gt; if the queue is empty.&lt;br /&gt;
&lt;br /&gt;
'''Precondition:''' -&lt;br /&gt;
&lt;br /&gt;
'''Postcondition:''' -&lt;br /&gt;
&lt;br /&gt;
==Method==&lt;br /&gt;
'''Name:''' &amp;lt;math&amp;gt;decreaseKey&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Input:''' A natural number &amp;lt;math&amp;gt;ID \in \N&amp;lt;/math&amp;gt; presenting the heap item &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; to be changed, a key &amp;lt;math&amp;gt;K \in \mathcal{K}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Output:''' -&lt;br /&gt;
&lt;br /&gt;
'''Precondition:'''&lt;br /&gt;
# A valid ID currently found within the heap &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;lt;math&amp;gt;1 \le ID \le N&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;lt;math&amp;gt;K \le A[Positions[ID]].key&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Postcondition:''' The heap item &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; has the new &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;. Its position within the heap afterwards is stored accordingly in &amp;lt;math&amp;gt;Positions[ID]&amp;lt;/math&amp;gt; and remains at the same or a higher level than before.&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=614</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=614"/>
		<updated>2014-10-04T15:06:58Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Graph Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
* &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; [http://www.mediawiki.org/wiki/Manual:Math available now!]&lt;br /&gt;
* ToDo List added&lt;br /&gt;
* Every content has to be in English!&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi Syntaxhighlight]&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
* Add finalized reconstructions of the old Wiki to Category:Checkup.&lt;br /&gt;
* Don't any non-Weihe content until the reconstructions isn't finished.&lt;br /&gt;
* Keep your active reconstructing Pages in &amp;quot;Division of labor&amp;quot; section up to date!&lt;br /&gt;
&lt;br /&gt;
== Divison of labor ==&lt;br /&gt;
* Fabio Cuozzo - Problems on Sequences&lt;br /&gt;
* Daniel Kratschmann - Problems&lt;br /&gt;
* Jan Hohmann - B-Tree&lt;br /&gt;
* Jan Rathjens - Ford-Fulkerson&lt;br /&gt;
* Thomas Lautenschläger - ???&lt;br /&gt;
&lt;br /&gt;
== Page Status ==&lt;br /&gt;
Final: [[:Category:Checkup]]&lt;br /&gt;
&lt;br /&gt;
== To Do ==&lt;br /&gt;
=== Notations ===&lt;br /&gt;
* [[Asymptotic notation]]&lt;br /&gt;
* [[L' Hospital]]&lt;br /&gt;
* [[Master theorem]]&lt;br /&gt;
=== Problems ===&lt;br /&gt;
* [[Maximum matching problem]]&lt;br /&gt;
* [[Max-Flow Problems]]&lt;br /&gt;
* [[Min-Cost Flow Problems]]&lt;br /&gt;
* [[Shortest Paths Problems]]&lt;br /&gt;
** [[All pairs shortest paths]]&lt;br /&gt;
*** [[Floyd-Warshall]]&lt;br /&gt;
*** [[Bellman-Ford]]&lt;br /&gt;
*** [[Shortest paths by repeated squaring]] (variant of Bellman-Ford) &lt;br /&gt;
** [[Single source shortest paths]]&lt;br /&gt;
*** [[Dijkstra]]&lt;br /&gt;
** [[Single source single target shortest paths]]&lt;br /&gt;
*** [[A*]]&lt;br /&gt;
* [[Maximum spanning forest]]&lt;br /&gt;
* [[Problems on Sequences]]&lt;br /&gt;
** [[Basic Problems on Sequences]]&lt;br /&gt;
*** [[Find an element in a sequence]] (DONE)&lt;br /&gt;
*** [[Insert an element in a sequence]] (Empty in old wiki?!)&lt;br /&gt;
*** [[Median]] (DONE)&lt;br /&gt;
*** [[Merging two sorted sequences]] (DONE)&lt;br /&gt;
** [[Pattern Matching]]&lt;br /&gt;
*** [[One-dimensional string matching]] (DONE)&lt;br /&gt;
*** [[String matching]] (DONE)&lt;br /&gt;
** [[Sorting]]&lt;br /&gt;
*** [[Sorting based on pairwise comparison]] (DONE)&lt;br /&gt;
*** [[Sorting Sequences of Strings]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Coding Basics ===&lt;br /&gt;
* [[Heritage]]&lt;br /&gt;
* [[Generics]]&lt;br /&gt;
* [[Collections]]&lt;br /&gt;
** [[Iterator]]&lt;br /&gt;
** [[Comparator]]&lt;br /&gt;
&lt;br /&gt;
=== String Matching Algorithms ===&lt;br /&gt;
* [[Simple string matching algorithm]] (DONE)&lt;br /&gt;
* [[String matching based on finite automaton]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Sorting Algorithms ===&lt;br /&gt;
* [[Bubble]]&lt;br /&gt;
* [[Insertion Sort]]&lt;br /&gt;
* [[Quick Sort]]&lt;br /&gt;
* [[Bubble Sort]]&lt;br /&gt;
* [[Merge Sort]]&lt;br /&gt;
* [[Bucket Sort]]&lt;br /&gt;
* [[Selection Sort]]&lt;br /&gt;
* [[Bogo Sort]]&lt;br /&gt;
&lt;br /&gt;
=== Search Algorithms ===&lt;br /&gt;
* [[Binary Search]]&lt;br /&gt;
&lt;br /&gt;
=== Tree Algorithms ===&lt;br /&gt;
* [[Depth-First Search]]&lt;br /&gt;
* [[Breadth-First Search]]&lt;br /&gt;
* [[B-Tree:Find]]&lt;br /&gt;
* [[B-Tree:Minimum]]&lt;br /&gt;
* [[B-Tree:Maximum]]&lt;br /&gt;
* [[B-Tree:Insert]]&lt;br /&gt;
* [[B-Tree:Insert and Rearrange]]&lt;br /&gt;
* [[B-Tree:merge two Siblings]]&lt;br /&gt;
* [[B-Tree:Remove]]&lt;br /&gt;
* [[B-Tree:Shift Key to Sibling]]&lt;br /&gt;
* [[B-Tree:Rotate]]&lt;br /&gt;
* [[B-Tree:Merge]]&lt;br /&gt;
* [[B-Tree:Split-Child]]&lt;br /&gt;
* [[Binary Search Tree:Find]]&lt;br /&gt;
* [[Binary Search Tree:Minimum]]&lt;br /&gt;
* [[Binary Search Tree:Maximum]]&lt;br /&gt;
* [[Binary Search Tree:Insert]]&lt;br /&gt;
* [[Binary Search Tree:Remove]]&lt;br /&gt;
* [[Binary Search Tree:Remove node]]&lt;br /&gt;
* [[Binary Search Tree:Traverse]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Theory ===&lt;br /&gt;
* [[Directed Graph]]&lt;br /&gt;
* [[Bipartite graphs|Bipartite Graph]] (DONE)&lt;br /&gt;
* [[k-partite Graph]]&lt;br /&gt;
* [[Negative Paths]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Algorithms ===&lt;br /&gt;
* [[Dijkstra]]&lt;br /&gt;
* [[Kruskal]]&lt;br /&gt;
* [[Prim]]&lt;br /&gt;
* [[Bellman-Ford]]&lt;br /&gt;
* [[Floyd-Warshall]]&lt;br /&gt;
* [[Union Find]]&lt;br /&gt;
* [[A*]]&lt;br /&gt;
* [[Alternating paths algorithm]]&lt;br /&gt;
* [[Johnson]]&lt;br /&gt;
&lt;br /&gt;
=== Flow Algorithms ===&lt;br /&gt;
* [[Ford-Fulkerson]]&lt;br /&gt;
=== Data Structures ===&lt;br /&gt;
* [[Linked List]]&lt;br /&gt;
* [[Array List]]&lt;br /&gt;
* [[First In - First Out]]&lt;br /&gt;
* [[First In - Ieast Out]]&lt;br /&gt;
* [[Double Linked List]]&lt;br /&gt;
* [[Heaps]] (DONE (Heap as Array))&lt;br /&gt;
* [[Min-Max Heaps]]&lt;br /&gt;
* [[Hash Table]]&lt;br /&gt;
* [[Directed Tree]]&lt;br /&gt;
* [[Binary Search Tree]]&lt;br /&gt;
* [[B-Trees]]&lt;br /&gt;
* [[Decision Tree]]&lt;br /&gt;
* [[Red-Black Tree]]&lt;br /&gt;
* [[Graphs]]&lt;br /&gt;
&lt;br /&gt;
=== Other Algorithms (LOCKED) ===&lt;br /&gt;
* [[B*]]&lt;br /&gt;
* [[Cyclic Redundancy Check]]&lt;br /&gt;
* [[Eulcid]]&lt;br /&gt;
* [[Gauss]]&lt;br /&gt;
* [[Discrete Fourier transform]]&lt;br /&gt;
* [[Fast Fourier transform]]&lt;br /&gt;
* [[Bresenham]]&lt;br /&gt;
* [[Round Robin]]&lt;br /&gt;
* [[Seperate and Conquer]]&lt;br /&gt;
* [[Message-Digest Algorithm]]&lt;br /&gt;
* [[Secure Hash Algorithm]]&lt;br /&gt;
* [[Sequent calculus]]&lt;br /&gt;
* [[Resolution calculus]]&lt;br /&gt;
* [[Cocke-Younger-Kasami Algorithm]]&lt;br /&gt;
* [[Distance Vector Routing]]&lt;br /&gt;
* [[Link State Round]]&lt;br /&gt;
* [[Z Buffer Algorithm]]&lt;br /&gt;
* [[Marching Squares]]&lt;br /&gt;
* [[Marching Cubes]]&lt;br /&gt;
* [[Bottom-Up Heapsort]]&lt;br /&gt;
* [[Radixsort]]&lt;br /&gt;
* [[Median Cut]]&lt;br /&gt;
* [[Pancake sorting]]&lt;br /&gt;
* [[Karnaugh-Veitch Diagramm]]&lt;br /&gt;
* [[Delanuay Triangulation]]&lt;br /&gt;
* [[Backtracking]]&lt;br /&gt;
* [[Alpha–beta pruning]]&lt;br /&gt;
* [[Beam search]]&lt;br /&gt;
* [[Best-first search]]&lt;br /&gt;
* [[Bidirectional search]]&lt;br /&gt;
* [[Borůvka's algorithm]]&lt;br /&gt;
* [[Branch and bound]]&lt;br /&gt;
* [[D*]]&lt;br /&gt;
* [[Depth-limited search]]&lt;br /&gt;
* [[Edmonds' algorithm]]&lt;br /&gt;
* [[Fringe search]]&lt;br /&gt;
* [[Hill climbing]]&lt;br /&gt;
* [[IDA*]]&lt;br /&gt;
* [[Iterative deepening depth-first search]]&lt;br /&gt;
* [[Jump point search]]&lt;br /&gt;
* [[Lexicographic breadth-first search]]&lt;br /&gt;
* [[SMA*]]&lt;br /&gt;
* [[Uniform-cost search]]&lt;br /&gt;
&lt;br /&gt;
=== Other Data Structures (LOCKED) ===&lt;br /&gt;
* [[Adelson-Velskii and Landis' tree]]&lt;br /&gt;
* [[Patricia-Trie]]&lt;br /&gt;
* [[Suffix Tree]]&lt;br /&gt;
* [[Huffmann Tree]]&lt;br /&gt;
* [[Binary Expression Tree]]&lt;br /&gt;
* [[Hash Set]]&lt;br /&gt;
* [[Incidence Matrix]]&lt;br /&gt;
* [[Voronoi Diagramm]]&lt;br /&gt;
* [[Quad Tree]]&lt;br /&gt;
* [[Oct Tree]]&lt;br /&gt;
* [[kd Tree]]&lt;br /&gt;
* [[Binary space partitioning]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Bipartite_graph&amp;diff=613</id>
		<title>Bipartite graph</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Bipartite_graph&amp;diff=613"/>
		<updated>2014-10-04T15:04:49Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;Category:Checkup Category:Background ==Definition== An undirected graph &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; is called '''bipartite''' if there is a partition of &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;, &amp;lt;math...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Checkup]]&lt;br /&gt;
[[Category:Background]]&lt;br /&gt;
==Definition==&lt;br /&gt;
An undirected graph &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; is called '''bipartite''' if there is a partition of &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V=V_{1} \dot\cup V_{2}&amp;lt;/math&amp;gt;, such that for every edge &amp;lt;math&amp;gt;\{ v,w \} \in E&amp;lt;/math&amp;gt; it is &amp;lt;math&amp;gt;v \in V_{1} \Leftrightarrow w \in V_{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Absence of odd cycles==&lt;br /&gt;
'''Theorem:''' An undirected graph &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; is bipartite if, and only if, &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; has now cycle of odd length.&lt;br /&gt;
&lt;br /&gt;
'''Proof:'''&lt;br /&gt;
* First suppose &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; contains at least one cycle &amp;lt;math&amp;gt;v_{1} - v_{2} - ... - v_{k} - v_{1}&amp;lt;/math&amp;gt; of odd length &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;. Without loss of generality, we assume &amp;lt;math&amp;gt;v_{1} \in V_{1}&amp;lt;/math&amp;gt;. Then it is &amp;lt;math&amp;gt;v_{i} \in V_{1}&amp;lt;/math&amp;gt; for all odd &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;v_{i} \in V_{2}&amp;lt;/math&amp;gt; for all even &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;. The edge &amp;lt;math&amp;gt;\{ v,w \}&amp;lt;/math&amp;gt; contradicts bipartiteness.&lt;br /&gt;
* Now suppose that &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; contains no cycle of negative length. We will prove bipartiteness constructively. Without loss of generality, we may assume that &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; is connected (otherwise, each connected component may be considered separately). We start with an arbitrary node &amp;lt;math&amp;gt;u \in V&amp;lt;/math&amp;gt; and label each node &amp;quot;&amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;&amp;quot; if its distance (smallest number of edges) from &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; is even, and &amp;quot;&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;&amp;quot;, otherwise. Suppose for a contradiction that there is an edge &amp;lt;math&amp;gt;\{ v,w \}&amp;lt;/math&amp;gt; such that both endnotes have the same label. Then the shortest paths from &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; plus this edge from an odd cycle (which is not simple but can be easily reduced to a simple cycle, which is odd again).&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Strings&amp;diff=585</id>
		<title>Strings</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Strings&amp;diff=585"/>
		<updated>2014-10-02T13:35:28Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;Category:Checkup Category:Background ==Definitions== # An '''alphabet''' is a finite set and usually denoted &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;. # The elements of an alphabet &amp;lt;math&amp;gt;\...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Checkup]]&lt;br /&gt;
[[Category:Background]]&lt;br /&gt;
==Definitions==&lt;br /&gt;
# An '''alphabet''' is a finite set and usually denoted &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
# The elements of an alphabet &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt; are called its '''characters'''.&lt;br /&gt;
# A '''string''' over alphabet &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt; is an [[Sets and sequences#Ordered and sorted sequences|ordered sequence]] of characters of &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
# The '''length''' of a string &amp;lt;math&amp;gt;str&amp;lt;/math&amp;gt; is the number of characters and denoted by &amp;lt;math&amp;gt;|str|&amp;lt;/math&amp;gt; or &amp;lt;math&amp;gt;\ell (str)&amp;lt;/math&amp;gt;.&lt;br /&gt;
# For &amp;lt;math&amp;gt;i\in \{ 1,...,\ell (str)\}&amp;lt;/math&amp;gt;, the character of &amp;lt;math&amp;gt;str&amp;lt;/math&amp;gt; at position &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; is denoted by &amp;lt;math&amp;gt;str[i]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# For two strings &amp;lt;math&amp;gt;str1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;str2&amp;lt;/math&amp;gt; over some alphabet &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;, we say that &amp;lt;math&amp;gt;str1&amp;lt;/math&amp;gt; is a '''prefix''' of &amp;lt;math&amp;gt;str2&amp;lt;/math&amp;gt; if&lt;br /&gt;
## &amp;lt;math&amp;gt;\ell (str1) \le \ell (str2)&amp;lt;/math&amp;gt; and&lt;br /&gt;
## for &amp;lt;math&amp;gt;i \in \{ 1,...,\ell (str1)\}&amp;lt;/math&amp;gt; it is &amp;lt;math&amp;gt;str1[i] = str2[i]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Analogously, we say that &amp;lt;math&amp;gt;str1&amp;lt;/math&amp;gt; is a '''suffix''' of &amp;lt;math&amp;gt;str2&amp;lt;/math&amp;gt; if&lt;br /&gt;
## &amp;lt;math&amp;gt;\ell (str1) \le \ell (str2)&amp;lt;/math&amp;gt; and&lt;br /&gt;
## for &amp;lt;math&amp;gt;i \in \{ 1,...,\ell (str1)\}&amp;lt;/math&amp;gt; it is &amp;lt;math&amp;gt;str1[i]=str2[\ell (str2)- \ell(str1)+i]&amp;lt;/math&amp;gt;.&lt;br /&gt;
#We say that &amp;lt;math&amp;gt;str1&amp;lt;/math&amp;gt; is a '''proper''' prefix (resp., suffix) of &amp;lt;math&amp;gt;str2&amp;lt;/math&amp;gt; if &amp;lt;math&amp;gt;str1&amp;lt;/math&amp;gt; is a prefix (resp., suffix) of &amp;lt;math&amp;gt;str2&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\ell (str1) &amp;lt; \ell (str2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Lexicographic order==&lt;br /&gt;
Suppose a [[Genericity#Comparison|comparison]] is defined on alphabet &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;. For two strings &amp;lt;math&amp;gt;str1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;str2&amp;lt;/math&amp;gt; over &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;, we say that &amp;lt;math&amp;gt;str1&amp;lt;/math&amp;gt; is '''lexicographically''' smaller than &amp;lt;math&amp;gt;str2&amp;lt;/math&amp;gt; - or alternatively, &amp;lt;math&amp;gt;str1&amp;lt;/math&amp;gt; '''precedes''' &amp;lt;math&amp;gt;str2&amp;lt;/math&amp;gt; '''lexicographically''' - if &amp;lt;math&amp;gt;str1 \neq str2&amp;lt;/math&amp;gt; and one of the following two conditions is fulfilled:&lt;br /&gt;
# &amp;lt;math&amp;gt;str1&amp;lt;/math&amp;gt; is a proper prefix of &amp;lt;math&amp;gt;str2&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Let &amp;lt;math&amp;gt;\ell := \min \{ \ell (str1), \ell (str2)\}&amp;lt;/math&amp;gt; for short. Let &amp;lt;math&amp;gt;k := \min \{i \mid i \in \{1,...,\ell \} , str1[i] \neq str2[i] \}&amp;lt;/math&amp;gt;. Now the second condition is &amp;lt;math&amp;gt;str1[k] &amp;lt; str2[k]&amp;lt;/math&amp;gt;.&lt;br /&gt;
If &amp;lt;math&amp;gt;str1&amp;lt;/math&amp;gt; precedes &amp;lt;math&amp;gt;str2&amp;lt;/math&amp;gt; we write &amp;lt;math&amp;gt;str1 \prec str2&amp;lt;/math&amp;gt;, and we write &amp;lt;math&amp;gt;str1 \preceq str2&amp;lt;/math&amp;gt; if either &amp;lt;math&amp;gt;str1&amp;lt;/math&amp;gt; precedes &amp;lt;math&amp;gt;str2&amp;lt;/math&amp;gt; or &amp;lt;math&amp;gt;str1 = str2&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Genericity&amp;diff=580</id>
		<title>Genericity</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Genericity&amp;diff=580"/>
		<updated>2014-10-02T13:14:07Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;Category:Background Category:Checkup ==Definition== An algorithmic problem, algorithm, abstract data structure, or implementation of a data structure is '''generic'''...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Background]]&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
==Definition==&lt;br /&gt;
An algorithmic problem, algorithm, abstract data structure, or implementation of a data structure is '''generic''' if one or more related types are left open in the definition. The choice of these types is deferred until the algorithm is called or an object of the data structure is created.&lt;br /&gt;
&lt;br /&gt;
===Remark===&lt;br /&gt;
Typically, there are requirements on the open types. A typical requirement is that a comparison as defined below is given for that type.&lt;br /&gt;
&lt;br /&gt;
==Comparison==&lt;br /&gt;
A '''comparison''' on a finite or infinite set &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; is a binary relation &amp;lt;math&amp;gt;c:S\times S \rightarrow \{ -1,0,+1\}&amp;lt;/math&amp;gt; with the following properties:&lt;br /&gt;
* &amp;lt;math&amp;gt;c(x,x) = 0&amp;lt;/math&amp;gt; for all &amp;lt;math&amp;gt;x \in S&amp;lt;/math&amp;gt; (reflexivity),&lt;br /&gt;
* &amp;lt;math&amp;gt;c(x,y)=-c(y,x)&amp;lt;/math&amp;gt; for all &amp;lt;math&amp;gt;x,y \in S&amp;lt;/math&amp;gt; (anti-commutativity), and&lt;br /&gt;
* &amp;lt;math&amp;gt;(c(x,y) = 1 \land c(y,z) = 1) \Rightarrow c(x,z)=1&amp;lt;/math&amp;gt; for all &amp;lt;math&amp;gt;x,y,z \in S&amp;lt;/math&amp;gt; (transitivity)&lt;br /&gt;
For convenience, we write &amp;lt;math&amp;gt;x&amp;lt;y&amp;lt;/math&amp;gt; in case &amp;lt;math&amp;gt;c(x,y)=1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;x\le y&amp;lt;/math&amp;gt; in case &amp;lt;math&amp;gt;c(x,y)\ge 0&amp;lt;/math&amp;gt;, and so on.&lt;br /&gt;
&lt;br /&gt;
===Remark===&lt;br /&gt;
Note that &amp;lt;math&amp;gt;c(x,y)=0&amp;lt;/math&amp;gt; does '''not''' imply &amp;lt;math&amp;gt;x=y&amp;lt;/math&amp;gt;. If &amp;lt;math&amp;gt;c(x,y)=0&amp;lt;/math&amp;gt; actually implies &amp;lt;math&amp;gt;x=y&amp;lt;/math&amp;gt; for all &amp;lt;math&amp;gt;x,y&amp;lt;/math&amp;gt;, such a binary relation is usually called a '''total''' or '''linear order''' - as opposed to '''partial orders''', in which pairs of elements may be incomparable.&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Sets_and_sequences&amp;diff=578</id>
		<title>Sets and sequences</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Sets_and_sequences&amp;diff=578"/>
		<updated>2014-10-02T12:58:05Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;Category:Checkup Category:Background ==Sets and multisets== in a '''set''', each element occurs at most once, that is, no duplications of elements within a set. In con...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Checkup]]&lt;br /&gt;
[[Category:Background]]&lt;br /&gt;
==Sets and multisets==&lt;br /&gt;
in a '''set''', each element occurs at most once, that is, no duplications of elements within a set. In contrast, in a '''multiset''', al element may occur more than once. The '''multiplicity''' of an element in a multiset is the number of its occurrences in that set.&lt;br /&gt;
&lt;br /&gt;
===Remark===&lt;br /&gt;
Of course, in computer science, sets and multisets are assumed to be dynamic, that is, elements may be inserted and removed.&lt;br /&gt;
&lt;br /&gt;
==Ordered and sorted sequences==&lt;br /&gt;
An '''ordered sequence''' (or '''sequence''', for short) is given by&lt;br /&gt;
# a number &amp;lt;math&amp;gt;n \in \N_{0}&amp;lt;/math&amp;gt;, its '''length''',&lt;br /&gt;
# some '''component type''' &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;, and&lt;br /&gt;
# a mapping &amp;lt;math&amp;gt;\pi : \{1,...,n\} \rightarrow C&amp;lt;/math&amp;gt;.&lt;br /&gt;
We say that &amp;lt;math&amp;gt;1,...,n&amp;lt;/math&amp;gt; are the '''positions''' in the sequence (a.k.a. the '''indexes'''). The element &amp;lt;math&amp;gt;\pi (i)&amp;lt;/math&amp;gt; of sequence &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; at position &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; is denoted by &amp;lt;math&amp;gt;S[i]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Consider a comparison &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; on &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;, as introduced above. Then a sequence &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; of length &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; is '''sorted''' with respect to &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, if &amp;lt;math&amp;gt;S[i] \le S[i+1]&amp;lt;/math&amp;gt; for all &amp;lt;math&amp;gt;i \in \{1,...,n-1\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Remark===&lt;br /&gt;
Note that the first position is &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;, not &amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;, as opposed to array indexes in many popular programming languages such as C, C++, and Java.&lt;br /&gt;
&lt;br /&gt;
Like '''sets and multisets''', sequences are dynamic.&lt;br /&gt;
&lt;br /&gt;
==Maps==&lt;br /&gt;
A '''map''' is given by&lt;br /&gt;
# a number &amp;lt;math&amp;gt;n \in \N_{0}&amp;lt;/math&amp;gt;, its '''size'''&lt;br /&gt;
# a '''key type''' &amp;lt;math&amp;gt;\mathcal{K}&amp;lt;/math&amp;gt; and a '''value type''' &amp;lt;math&amp;gt;\mathcal{V}&amp;lt;/math&amp;gt;,&lt;br /&gt;
# a finite subset &amp;lt;math&amp;gt;K \subseteq \mathcal{K}&amp;lt;/math&amp;gt;, the map's '''keys''', and&lt;br /&gt;
# a mapping &amp;lt;math&amp;gt;K \rightarrow \mathcal{V}&amp;lt;/math&amp;gt;, which assigns a value to each key in the map.&lt;br /&gt;
&lt;br /&gt;
===Remark===&lt;br /&gt;
A sequence may also be a map, namely if its component type is &amp;lt;math&amp;gt;\mathcal{K} \times \mathcal{V}&amp;lt;/math&amp;gt; and each value of &amp;lt;math&amp;gt;\mathcal{K}&amp;lt;/math&amp;gt; occurs at most once.&lt;br /&gt;
&lt;br /&gt;
Like '''sets, multisets and sequences''', maps are dynamic.&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=577</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=577"/>
		<updated>2014-10-02T12:40:10Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Problems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
* &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; [http://www.mediawiki.org/wiki/Manual:Math available now!]&lt;br /&gt;
* ToDo List added&lt;br /&gt;
* Every content has to be in English!&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi Syntaxhighlight]&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
* Add finalized reconstructions of the old Wiki to Category:Checkup.&lt;br /&gt;
* Don't any non-Weihe content until the reconstructions isn't finished.&lt;br /&gt;
* Keep your active reconstructing Pages in &amp;quot;Division of labor&amp;quot; section up to date!&lt;br /&gt;
&lt;br /&gt;
== Divison of labor ==&lt;br /&gt;
* Fabio Cuozzo - Problems on Sequences&lt;br /&gt;
* Daniel Kratschmann - Problems&lt;br /&gt;
* Jan Hohmann - B-Tree&lt;br /&gt;
* Jan Rathjens - Ford-Fulkerson&lt;br /&gt;
* Thomas Lautenschläger - ???&lt;br /&gt;
&lt;br /&gt;
== Page Status ==&lt;br /&gt;
Final: [[:Category:Checkup]]&lt;br /&gt;
&lt;br /&gt;
== To Do ==&lt;br /&gt;
=== Notations ===&lt;br /&gt;
* [[Asymptotic notation]]&lt;br /&gt;
* [[L' Hospital]]&lt;br /&gt;
* [[Master theorem]]&lt;br /&gt;
=== Problems ===&lt;br /&gt;
* [[Maximum matching problem]]&lt;br /&gt;
* [[Max-Flow Problems]]&lt;br /&gt;
* [[Min-Cost Flow Problems]]&lt;br /&gt;
* [[Shortest Paths Problems]]&lt;br /&gt;
** [[All pairs shortest paths]]&lt;br /&gt;
*** [[Floyd-Warshall]]&lt;br /&gt;
*** [[Bellman-Ford]]&lt;br /&gt;
*** [[Shortest paths by repeated squaring]] (variant of Bellman-Ford) &lt;br /&gt;
** [[Single source shortest paths]]&lt;br /&gt;
*** [[Dijkstra]]&lt;br /&gt;
** [[Single source single target shortest paths]]&lt;br /&gt;
*** [[A*]]&lt;br /&gt;
* [[Maximum spanning forest]]&lt;br /&gt;
* [[Problems on Sequences]]&lt;br /&gt;
** [[Basic Problems on Sequences]]&lt;br /&gt;
*** [[Find an element in a sequence]] (DONE)&lt;br /&gt;
*** [[Insert an element in a sequence]] (Empty in old wiki?!)&lt;br /&gt;
*** [[Median]] (DONE)&lt;br /&gt;
*** [[Merging two sorted sequences]] (DONE)&lt;br /&gt;
** [[Pattern Matching]]&lt;br /&gt;
*** [[One-dimensional string matching]] (DONE)&lt;br /&gt;
*** [[String matching]] (DONE)&lt;br /&gt;
** [[Sorting]]&lt;br /&gt;
*** [[Sorting based on pairwise comparison]] (DONE)&lt;br /&gt;
*** [[Sorting Sequences of Strings]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Coding Basics ===&lt;br /&gt;
* [[Heritage]]&lt;br /&gt;
* [[Generics]]&lt;br /&gt;
* [[Collections]]&lt;br /&gt;
** [[Iterator]]&lt;br /&gt;
** [[Comparator]]&lt;br /&gt;
&lt;br /&gt;
=== String Matching Algorithms ===&lt;br /&gt;
* [[Simple string matching algorithm]] (DONE)&lt;br /&gt;
* [[String matching based on finite automaton]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Sorting Algorithms ===&lt;br /&gt;
* [[Bubble]]&lt;br /&gt;
* [[Insertion Sort]]&lt;br /&gt;
* [[Quick Sort]]&lt;br /&gt;
* [[Bubble Sort]]&lt;br /&gt;
* [[Merge Sort]]&lt;br /&gt;
* [[Bucket Sort]]&lt;br /&gt;
* [[Selection Sort]]&lt;br /&gt;
* [[Bogo Sort]]&lt;br /&gt;
&lt;br /&gt;
=== Search Algorithms ===&lt;br /&gt;
* [[Binary Search]]&lt;br /&gt;
&lt;br /&gt;
=== Tree Algorithms ===&lt;br /&gt;
* [[Depth-First Search]]&lt;br /&gt;
* [[Breadth-First Search]]&lt;br /&gt;
* [[B-Tree:Find]]&lt;br /&gt;
* [[B-Tree:Minimum]]&lt;br /&gt;
* [[B-Tree:Maximum]]&lt;br /&gt;
* [[B-Tree:Insert]]&lt;br /&gt;
* [[B-Tree:Insert and Rearrange]]&lt;br /&gt;
* [[B-Tree:merge two Siblings]]&lt;br /&gt;
* [[B-Tree:Remove]]&lt;br /&gt;
* [[B-Tree:Shift Key to Sibling]]&lt;br /&gt;
* [[B-Tree:Rotate]]&lt;br /&gt;
* [[B-Tree:Merge]]&lt;br /&gt;
* [[B-Tree:Split-Child]]&lt;br /&gt;
* [[Binary Search Tree:Find]]&lt;br /&gt;
* [[Binary Search Tree:Minimum]]&lt;br /&gt;
* [[Binary Search Tree:Maximum]]&lt;br /&gt;
* [[Binary Search Tree:Insert]]&lt;br /&gt;
* [[Binary Search Tree:Remove]]&lt;br /&gt;
* [[Binary Search Tree:Remove node]]&lt;br /&gt;
* [[Binary Search Tree:Traverse]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Theory ===&lt;br /&gt;
* [[Directed Graph]]&lt;br /&gt;
* [[Bipartite Graph]]&lt;br /&gt;
* [[k-partite Graph]]&lt;br /&gt;
* [[Negative Paths]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Algorithms ===&lt;br /&gt;
* [[Dijkstra]]&lt;br /&gt;
* [[Kruskal]]&lt;br /&gt;
* [[Prim]]&lt;br /&gt;
* [[Bellman-Ford]]&lt;br /&gt;
* [[Floyd-Warshall]]&lt;br /&gt;
* [[Union Find]]&lt;br /&gt;
* [[A*]]&lt;br /&gt;
* [[Alternating paths algorithm]]&lt;br /&gt;
* [[Johnson]]&lt;br /&gt;
&lt;br /&gt;
=== Flow Algorithms ===&lt;br /&gt;
* [[Ford-Fulkerson]]&lt;br /&gt;
=== Data Structures ===&lt;br /&gt;
* [[Linked List]]&lt;br /&gt;
* [[Array List]]&lt;br /&gt;
* [[First In - First Out]]&lt;br /&gt;
* [[First In - Ieast Out]]&lt;br /&gt;
* [[Double Linked List]]&lt;br /&gt;
* [[Heaps]] (DONE (Heap as Array))&lt;br /&gt;
* [[Min-Max Heaps]]&lt;br /&gt;
* [[Hash Table]]&lt;br /&gt;
* [[Directed Tree]]&lt;br /&gt;
* [[Binary Search Tree]]&lt;br /&gt;
* [[B-Trees]]&lt;br /&gt;
* [[Decision Tree]]&lt;br /&gt;
* [[Red-Black Tree]]&lt;br /&gt;
* [[Graphs]]&lt;br /&gt;
&lt;br /&gt;
=== Other Algorithms (LOCKED) ===&lt;br /&gt;
* [[B*]]&lt;br /&gt;
* [[Cyclic Redundancy Check]]&lt;br /&gt;
* [[Eulcid]]&lt;br /&gt;
* [[Gauss]]&lt;br /&gt;
* [[Discrete Fourier transform]]&lt;br /&gt;
* [[Fast Fourier transform]]&lt;br /&gt;
* [[Bresenham]]&lt;br /&gt;
* [[Round Robin]]&lt;br /&gt;
* [[Seperate and Conquer]]&lt;br /&gt;
* [[Message-Digest Algorithm]]&lt;br /&gt;
* [[Secure Hash Algorithm]]&lt;br /&gt;
* [[Sequent calculus]]&lt;br /&gt;
* [[Resolution calculus]]&lt;br /&gt;
* [[Cocke-Younger-Kasami Algorithm]]&lt;br /&gt;
* [[Distance Vector Routing]]&lt;br /&gt;
* [[Link State Round]]&lt;br /&gt;
* [[Z Buffer Algorithm]]&lt;br /&gt;
* [[Marching Squares]]&lt;br /&gt;
* [[Marching Cubes]]&lt;br /&gt;
* [[Bottom-Up Heapsort]]&lt;br /&gt;
* [[Radixsort]]&lt;br /&gt;
* [[Median Cut]]&lt;br /&gt;
* [[Pancake sorting]]&lt;br /&gt;
* [[Karnaugh-Veitch Diagramm]]&lt;br /&gt;
* [[Delanuay Triangulation]]&lt;br /&gt;
* [[Backtracking]]&lt;br /&gt;
* [[Alpha–beta pruning]]&lt;br /&gt;
* [[Beam search]]&lt;br /&gt;
* [[Best-first search]]&lt;br /&gt;
* [[Bidirectional search]]&lt;br /&gt;
* [[Borůvka's algorithm]]&lt;br /&gt;
* [[Branch and bound]]&lt;br /&gt;
* [[D*]]&lt;br /&gt;
* [[Depth-limited search]]&lt;br /&gt;
* [[Edmonds' algorithm]]&lt;br /&gt;
* [[Fringe search]]&lt;br /&gt;
* [[Hill climbing]]&lt;br /&gt;
* [[IDA*]]&lt;br /&gt;
* [[Iterative deepening depth-first search]]&lt;br /&gt;
* [[Jump point search]]&lt;br /&gt;
* [[Lexicographic breadth-first search]]&lt;br /&gt;
* [[SMA*]]&lt;br /&gt;
* [[Uniform-cost search]]&lt;br /&gt;
&lt;br /&gt;
=== Other Data Structures (LOCKED) ===&lt;br /&gt;
* [[Adelson-Velskii and Landis' tree]]&lt;br /&gt;
* [[Patricia-Trie]]&lt;br /&gt;
* [[Suffix Tree]]&lt;br /&gt;
* [[Huffmann Tree]]&lt;br /&gt;
* [[Binary Expression Tree]]&lt;br /&gt;
* [[Hash Set]]&lt;br /&gt;
* [[Incidence Matrix]]&lt;br /&gt;
* [[Voronoi Diagramm]]&lt;br /&gt;
* [[Quad Tree]]&lt;br /&gt;
* [[Oct Tree]]&lt;br /&gt;
* [[kd Tree]]&lt;br /&gt;
* [[Binary space partitioning]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Category:Sorting&amp;diff=576</id>
		<title>Category:Sorting</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Category:Sorting&amp;diff=576"/>
		<updated>2014-10-02T12:38:11Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;Category:Problems on Sequences&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Problems on Sequences]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Sorting_Sequences_of_Strings&amp;diff=575</id>
		<title>Sorting Sequences of Strings</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Sorting_Sequences_of_Strings&amp;diff=575"/>
		<updated>2014-10-02T12:37:23Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;__NOTOC__ Category:Checkup Category:Algorithmic Problem Category:Sorting ==Input== An ordered sequence &amp;lt;math&amp;gt;S&amp;lt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
[[Category:Algorithmic Problem]]&lt;br /&gt;
[[Category:Sorting]]&lt;br /&gt;
==Input==&lt;br /&gt;
An [[Sets and sequences#Ordered and sorted sequences|ordered sequence]] &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; of length &amp;lt;math&amp;gt;n \in \mathbb{N}_{0}&amp;lt;/math&amp;gt; and component type string over some [[Strings|alphabet]] &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Output==&lt;br /&gt;
A permutation of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; such that, for &amp;lt;math&amp;gt;i \in \{1,...,n-1\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;S[i]&amp;lt;/math&amp;gt; is not [[Strings#Lexicographic order|lexicographically]] larger than &amp;lt;math&amp;gt;S[i+1]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
Linear in the total sum of all string lengths.&lt;br /&gt;
&lt;br /&gt;
==Known algorithms==&lt;br /&gt;
[[Bucketsort]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Sorting_based_on_pairwise_comparison&amp;diff=574</id>
		<title>Sorting based on pairwise comparison</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Sorting_based_on_pairwise_comparison&amp;diff=574"/>
		<updated>2014-10-02T12:29:35Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;__NOTOC__ Category:Checkup Category:Algorithmic Problem Category:Sorting ==Input== # An ordered sequence &amp;lt;math&amp;gt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
[[Category:Algorithmic Problem]]&lt;br /&gt;
[[Category:Sorting]]&lt;br /&gt;
==Input==&lt;br /&gt;
# An [[Sets and sequences#Ordered and sorted sequences|ordered sequence]] &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; of length &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
# A definition of [[Genericity#Comparison|comparison]] on the component type of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Output==&lt;br /&gt;
A permutation of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;S[i] \le S[i+1]&amp;lt;/math&amp;gt; for all &amp;lt;math&amp;gt;i\in \{1,...,n-1\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
Polynomial.&lt;br /&gt;
&lt;br /&gt;
==Known algorithms==&lt;br /&gt;
# [[Bubblesort]]&lt;br /&gt;
# [[Mergesort]]&lt;br /&gt;
# [[Quicksort]]&lt;br /&gt;
# [[Selection sort]]&lt;br /&gt;
&lt;br /&gt;
==Remark==&lt;br /&gt;
Some algorithms could be formulated in a much simpler way in case each key occurs at most once in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. Here all algorithms are formulated for the general case of arbitrary multiplicities. Alternatively, there are three options to make each key unique:&lt;br /&gt;
# An additional generated key, for example, student ID or tax file number.&lt;br /&gt;
# If the keys are associated with values, they are additionally compared if the keys of two items are identical (e.g. date of birth and home address, if last and first names of two persons are identical).&lt;br /&gt;
# If the keys are '''not''' associated with values, we may remove the duplicates and store their multiplicities separately.&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=573</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=573"/>
		<updated>2014-10-02T12:17:02Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Problems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
* &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; [http://www.mediawiki.org/wiki/Manual:Math available now!]&lt;br /&gt;
* ToDo List added&lt;br /&gt;
* Every content has to be in English!&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi Syntaxhighlight]&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
* Add finalized reconstructions of the old Wiki to Category:Checkup.&lt;br /&gt;
* Don't any non-Weihe content until the reconstructions isn't finished.&lt;br /&gt;
* Keep your active reconstructing Pages in &amp;quot;Division of labor&amp;quot; section up to date!&lt;br /&gt;
&lt;br /&gt;
== Divison of labor ==&lt;br /&gt;
* Fabio Cuozzo - Problems on Sequences&lt;br /&gt;
* Daniel Kratschmann - Problems&lt;br /&gt;
* Jan Hohmann - B-Tree&lt;br /&gt;
* Jan Rathjens - Ford-Fulkerson&lt;br /&gt;
* Thomas Lautenschläger - ???&lt;br /&gt;
&lt;br /&gt;
== Page Status ==&lt;br /&gt;
Final: [[:Category:Checkup]]&lt;br /&gt;
&lt;br /&gt;
== To Do ==&lt;br /&gt;
=== Notations ===&lt;br /&gt;
* [[Asymptotic notation]]&lt;br /&gt;
* [[L' Hospital]]&lt;br /&gt;
* [[Master theorem]]&lt;br /&gt;
=== Problems ===&lt;br /&gt;
* [[Maximum matching problem]]&lt;br /&gt;
* [[Max-Flow Problems]]&lt;br /&gt;
* [[Min-Cost Flow Problems]]&lt;br /&gt;
* [[Shortest Paths Problems]]&lt;br /&gt;
** [[All pairs shortest paths]]&lt;br /&gt;
*** [[Floyd-Warshall]]&lt;br /&gt;
*** [[Bellman-Ford]]&lt;br /&gt;
*** [[Shortest paths by repeated squaring]] (variant of Bellman-Ford) &lt;br /&gt;
** [[Single source shortest paths]]&lt;br /&gt;
*** [[Dijkstra]]&lt;br /&gt;
** [[Single source single target shortest paths]]&lt;br /&gt;
*** [[A*]]&lt;br /&gt;
* [[Maximum spanning forest]]&lt;br /&gt;
* [[Problems on Sequences]]&lt;br /&gt;
** [[Basic Problems on Sequences]]&lt;br /&gt;
*** [[Find an element in a sequence]] (DONE)&lt;br /&gt;
*** [[Insert an element in a sequence]] (Empty in old wiki?!)&lt;br /&gt;
*** [[Median]] (DONE)&lt;br /&gt;
*** [[Merging two sorted sequences]] (DONE)&lt;br /&gt;
** [[Pattern Matching]]&lt;br /&gt;
*** [[One-dimensional string matching]] (DONE)&lt;br /&gt;
*** [[String matching]] (DONE)&lt;br /&gt;
** [[Sorting]]&lt;br /&gt;
*** [[Sorting based on pairwise comparison]]&lt;br /&gt;
*** [[Sorting Sequences of Strings]]&lt;br /&gt;
&lt;br /&gt;
=== Coding Basics ===&lt;br /&gt;
* [[Heritage]]&lt;br /&gt;
* [[Generics]]&lt;br /&gt;
* [[Collections]]&lt;br /&gt;
** [[Iterator]]&lt;br /&gt;
** [[Comparator]]&lt;br /&gt;
&lt;br /&gt;
=== String Matching Algorithms ===&lt;br /&gt;
* [[Simple string matching algorithm]] (DONE)&lt;br /&gt;
* [[String matching based on finite automaton]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Sorting Algorithms ===&lt;br /&gt;
* [[Bubble]]&lt;br /&gt;
* [[Insertion Sort]]&lt;br /&gt;
* [[Quick Sort]]&lt;br /&gt;
* [[Bubble Sort]]&lt;br /&gt;
* [[Merge Sort]]&lt;br /&gt;
* [[Bucket Sort]]&lt;br /&gt;
* [[Selection Sort]]&lt;br /&gt;
* [[Bogo Sort]]&lt;br /&gt;
&lt;br /&gt;
=== Search Algorithms ===&lt;br /&gt;
* [[Binary Search]]&lt;br /&gt;
&lt;br /&gt;
=== Tree Algorithms ===&lt;br /&gt;
* [[Depth-First Search]]&lt;br /&gt;
* [[Breadth-First Search]]&lt;br /&gt;
* [[B-Tree:Find]]&lt;br /&gt;
* [[B-Tree:Minimum]]&lt;br /&gt;
* [[B-Tree:Maximum]]&lt;br /&gt;
* [[B-Tree:Insert]]&lt;br /&gt;
* [[B-Tree:Insert and Rearrange]]&lt;br /&gt;
* [[B-Tree:merge two Siblings]]&lt;br /&gt;
* [[B-Tree:Remove]]&lt;br /&gt;
* [[B-Tree:Shift Key to Sibling]]&lt;br /&gt;
* [[B-Tree:Rotate]]&lt;br /&gt;
* [[B-Tree:Merge]]&lt;br /&gt;
* [[B-Tree:Split-Child]]&lt;br /&gt;
* [[Binary Search Tree:Find]]&lt;br /&gt;
* [[Binary Search Tree:Minimum]]&lt;br /&gt;
* [[Binary Search Tree:Maximum]]&lt;br /&gt;
* [[Binary Search Tree:Insert]]&lt;br /&gt;
* [[Binary Search Tree:Remove]]&lt;br /&gt;
* [[Binary Search Tree:Remove node]]&lt;br /&gt;
* [[Binary Search Tree:Traverse]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Theory ===&lt;br /&gt;
* [[Directed Graph]]&lt;br /&gt;
* [[Bipartite Graph]]&lt;br /&gt;
* [[k-partite Graph]]&lt;br /&gt;
* [[Negative Paths]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Algorithms ===&lt;br /&gt;
* [[Dijkstra]]&lt;br /&gt;
* [[Kruskal]]&lt;br /&gt;
* [[Prim]]&lt;br /&gt;
* [[Bellman-Ford]]&lt;br /&gt;
* [[Floyd-Warshall]]&lt;br /&gt;
* [[Union Find]]&lt;br /&gt;
* [[A*]]&lt;br /&gt;
* [[Alternating paths algorithm]]&lt;br /&gt;
* [[Johnson]]&lt;br /&gt;
&lt;br /&gt;
=== Flow Algorithms ===&lt;br /&gt;
* [[Ford-Fulkerson]]&lt;br /&gt;
=== Data Structures ===&lt;br /&gt;
* [[Linked List]]&lt;br /&gt;
* [[Array List]]&lt;br /&gt;
* [[First In - First Out]]&lt;br /&gt;
* [[First In - Ieast Out]]&lt;br /&gt;
* [[Double Linked List]]&lt;br /&gt;
* [[Heaps]] (DONE (Heap as Array))&lt;br /&gt;
* [[Min-Max Heaps]]&lt;br /&gt;
* [[Hash Table]]&lt;br /&gt;
* [[Directed Tree]]&lt;br /&gt;
* [[Binary Search Tree]]&lt;br /&gt;
* [[B-Trees]]&lt;br /&gt;
* [[Decision Tree]]&lt;br /&gt;
* [[Red-Black Tree]]&lt;br /&gt;
* [[Graphs]]&lt;br /&gt;
&lt;br /&gt;
=== Other Algorithms (LOCKED) ===&lt;br /&gt;
* [[B*]]&lt;br /&gt;
* [[Cyclic Redundancy Check]]&lt;br /&gt;
* [[Eulcid]]&lt;br /&gt;
* [[Gauss]]&lt;br /&gt;
* [[Discrete Fourier transform]]&lt;br /&gt;
* [[Fast Fourier transform]]&lt;br /&gt;
* [[Bresenham]]&lt;br /&gt;
* [[Round Robin]]&lt;br /&gt;
* [[Seperate and Conquer]]&lt;br /&gt;
* [[Message-Digest Algorithm]]&lt;br /&gt;
* [[Secure Hash Algorithm]]&lt;br /&gt;
* [[Sequent calculus]]&lt;br /&gt;
* [[Resolution calculus]]&lt;br /&gt;
* [[Cocke-Younger-Kasami Algorithm]]&lt;br /&gt;
* [[Distance Vector Routing]]&lt;br /&gt;
* [[Link State Round]]&lt;br /&gt;
* [[Z Buffer Algorithm]]&lt;br /&gt;
* [[Marching Squares]]&lt;br /&gt;
* [[Marching Cubes]]&lt;br /&gt;
* [[Bottom-Up Heapsort]]&lt;br /&gt;
* [[Radixsort]]&lt;br /&gt;
* [[Median Cut]]&lt;br /&gt;
* [[Pancake sorting]]&lt;br /&gt;
* [[Karnaugh-Veitch Diagramm]]&lt;br /&gt;
* [[Delanuay Triangulation]]&lt;br /&gt;
* [[Backtracking]]&lt;br /&gt;
* [[Alpha–beta pruning]]&lt;br /&gt;
* [[Beam search]]&lt;br /&gt;
* [[Best-first search]]&lt;br /&gt;
* [[Bidirectional search]]&lt;br /&gt;
* [[Borůvka's algorithm]]&lt;br /&gt;
* [[Branch and bound]]&lt;br /&gt;
* [[D*]]&lt;br /&gt;
* [[Depth-limited search]]&lt;br /&gt;
* [[Edmonds' algorithm]]&lt;br /&gt;
* [[Fringe search]]&lt;br /&gt;
* [[Hill climbing]]&lt;br /&gt;
* [[IDA*]]&lt;br /&gt;
* [[Iterative deepening depth-first search]]&lt;br /&gt;
* [[Jump point search]]&lt;br /&gt;
* [[Lexicographic breadth-first search]]&lt;br /&gt;
* [[SMA*]]&lt;br /&gt;
* [[Uniform-cost search]]&lt;br /&gt;
&lt;br /&gt;
=== Other Data Structures (LOCKED) ===&lt;br /&gt;
* [[Adelson-Velskii and Landis' tree]]&lt;br /&gt;
* [[Patricia-Trie]]&lt;br /&gt;
* [[Suffix Tree]]&lt;br /&gt;
* [[Huffmann Tree]]&lt;br /&gt;
* [[Binary Expression Tree]]&lt;br /&gt;
* [[Hash Set]]&lt;br /&gt;
* [[Incidence Matrix]]&lt;br /&gt;
* [[Voronoi Diagramm]]&lt;br /&gt;
* [[Quad Tree]]&lt;br /&gt;
* [[Oct Tree]]&lt;br /&gt;
* [[kd Tree]]&lt;br /&gt;
* [[Binary space partitioning]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Median&amp;diff=572</id>
		<title>Median</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Median&amp;diff=572"/>
		<updated>2014-10-02T12:16:18Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;__NOTOC__ Category:Checkup Category:Algorithmic Problem Category:Basic Problems on Sequences ==Input== An Sets and multisets#Ordered and sorted sequences|ordered...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
[[Category:Algorithmic Problem]]&lt;br /&gt;
[[Category:Basic Problems on Sequences]]&lt;br /&gt;
==Input==&lt;br /&gt;
An [[Sets and multisets#Ordered and sorted sequences|ordered sequence]] &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; of length &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; such that a [[Genericity#Comparison|comparison]] &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; is defined on the component type &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Output==&lt;br /&gt;
# If &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; is odd, the median is the unique value &amp;lt;math&amp;gt;x \in \{ S[1],...,S[n]\}&amp;lt;/math&amp;gt; such that&lt;br /&gt;
## &amp;lt;math&amp;gt;S[i]&amp;lt;x&amp;lt;/math&amp;gt; for at most &amp;lt;math&amp;gt;\lfloor n/2 \rfloor&amp;lt;/math&amp;gt; positions &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; and&lt;br /&gt;
## &amp;lt;math&amp;gt;S[i]&amp;gt;x&amp;lt;/math&amp;gt; for at most &amp;lt;math&amp;gt;\lfloor n/2 \rfloor&amp;lt;/math&amp;gt; positions &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
# On the other hand, if &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; is even, the median is &amp;lt;math&amp;gt;(x+y)/2&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;x,y \in  \{ S[1],...,S[n]\}&amp;lt;/math&amp;gt; (let &amp;lt;math&amp;gt;x \le y&amp;lt;/math&amp;gt;) are the unique values such that&lt;br /&gt;
## &amp;lt;math&amp;gt;S[i]&amp;lt;x&amp;lt;/math&amp;gt; for at most &amp;lt;math&amp;gt;\lfloor n/2 \rfloor&amp;lt;/math&amp;gt; positions &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, and&lt;br /&gt;
## &amp;lt;math&amp;gt;S[i]&amp;gt;y&amp;lt;/math&amp;gt; for at most &amp;lt;math&amp;gt;\lfloor n/2 \rfloor&amp;lt;/math&amp;gt; positions &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
N/A&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=559</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=559"/>
		<updated>2014-10-01T20:06:53Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Problems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
* &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; [http://www.mediawiki.org/wiki/Manual:Math available now!]&lt;br /&gt;
* ToDo List added&lt;br /&gt;
* Every content has to be in English!&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi Syntaxhighlight]&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
* Add finalized reconstructions of the old Wiki to Category:Checkup.&lt;br /&gt;
* Don't any non-Weihe content until the reconstructions isn't finished.&lt;br /&gt;
* Keep your active reconstructing Pages in &amp;quot;Division of labor&amp;quot; section up to date!&lt;br /&gt;
&lt;br /&gt;
== Divison of labor ==&lt;br /&gt;
* Fabio Cuozzo - Problems on Sequences&lt;br /&gt;
* Daniel Kratschmann - Problems&lt;br /&gt;
* Jan Hohmann - B-Tree&lt;br /&gt;
* Jan Rathjens - Ford-Fulkerson&lt;br /&gt;
* Thomas Lautenschläger - ???&lt;br /&gt;
&lt;br /&gt;
== Page Status ==&lt;br /&gt;
Final: [[:Category:Checkup]]&lt;br /&gt;
&lt;br /&gt;
== To Do ==&lt;br /&gt;
=== Notations ===&lt;br /&gt;
* [[Asymptotic notation]]&lt;br /&gt;
* [[L' Hospital]]&lt;br /&gt;
* [[Master theorem]]&lt;br /&gt;
=== Problems ===&lt;br /&gt;
* [[Maximum matching problem]]&lt;br /&gt;
* [[Max-Flow Problems]]&lt;br /&gt;
* [[Min-Cost Flow Problems]]&lt;br /&gt;
* [[Shortest Paths Problems]]&lt;br /&gt;
** [[All pairs shortest paths]]&lt;br /&gt;
*** [[Floyd-Warshall]]&lt;br /&gt;
*** [[Bellman-Ford]]&lt;br /&gt;
*** [[Shortest paths by repeated squaring]] (variant of Bellman-Ford) &lt;br /&gt;
** [[Single source shortest paths]]&lt;br /&gt;
*** [[Dijkstra]]&lt;br /&gt;
** [[Single source single target shortest paths]]&lt;br /&gt;
*** [[A*]]&lt;br /&gt;
* [[Maximum spanning forest]]&lt;br /&gt;
* [[Problems on Sequences]]&lt;br /&gt;
** [[Basic Problems on Sequences]]&lt;br /&gt;
*** [[Find an element in a sequence]] (DONE)&lt;br /&gt;
*** [[Insert an element in a sequence]] (Empty in old wiki?!)&lt;br /&gt;
*** [[Median]]&lt;br /&gt;
*** [[Merging two sorted sequences]] (DONE)&lt;br /&gt;
** [[Pattern Matching]]&lt;br /&gt;
*** [[One-dimensional string matching]] (DONE)&lt;br /&gt;
*** [[String matching]] (DONE)&lt;br /&gt;
** [[Sorting]]&lt;br /&gt;
*** [[Sorting based on pairwise comparison]]&lt;br /&gt;
*** [[Sorting Sequences of Strings]]&lt;br /&gt;
&lt;br /&gt;
=== Coding Basics ===&lt;br /&gt;
* [[Heritage]]&lt;br /&gt;
* [[Generics]]&lt;br /&gt;
* [[Collections]]&lt;br /&gt;
** [[Iterator]]&lt;br /&gt;
** [[Comparator]]&lt;br /&gt;
&lt;br /&gt;
=== String Matching Algorithms ===&lt;br /&gt;
* [[Simple string matching algorithm]] (DONE)&lt;br /&gt;
* [[String matching based on finite automaton]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Sorting Algorithms ===&lt;br /&gt;
* [[Bubble]]&lt;br /&gt;
* [[Insertion Sort]]&lt;br /&gt;
* [[Quick Sort]]&lt;br /&gt;
* [[Bubble Sort]]&lt;br /&gt;
* [[Merge Sort]]&lt;br /&gt;
* [[Bucket Sort]]&lt;br /&gt;
* [[Selection Sort]]&lt;br /&gt;
* [[Bogo Sort]]&lt;br /&gt;
&lt;br /&gt;
=== Search Algorithms ===&lt;br /&gt;
* [[Binary Search]]&lt;br /&gt;
&lt;br /&gt;
=== Tree Algorithms ===&lt;br /&gt;
* [[Depth-First Search]]&lt;br /&gt;
* [[Breadth-First Search]]&lt;br /&gt;
* [[B-Tree:Find]]&lt;br /&gt;
* [[B-Tree:Minimum]]&lt;br /&gt;
* [[B-Tree:Maximum]]&lt;br /&gt;
* [[B-Tree:Insert]]&lt;br /&gt;
* [[B-Tree:Insert and Rearrange]]&lt;br /&gt;
* [[B-Tree:merge two Siblings]]&lt;br /&gt;
* [[B-Tree:Remove]]&lt;br /&gt;
* [[B-Tree:Shift Key to Sibling]]&lt;br /&gt;
* [[B-Tree:Rotate]]&lt;br /&gt;
* [[B-Tree:Merge]]&lt;br /&gt;
* [[B-Tree:Split-Child]]&lt;br /&gt;
* [[Binary Search Tree:Find]]&lt;br /&gt;
* [[Binary Search Tree:Minimum]]&lt;br /&gt;
* [[Binary Search Tree:Maximum]]&lt;br /&gt;
* [[Binary Search Tree:Insert]]&lt;br /&gt;
* [[Binary Search Tree:Remove]]&lt;br /&gt;
* [[Binary Search Tree:Remove node]]&lt;br /&gt;
* [[Binary Search Tree:Traverse]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Theory ===&lt;br /&gt;
* [[Directed Graph]]&lt;br /&gt;
* [[Bipartite Graph]]&lt;br /&gt;
* [[k-partite Graph]]&lt;br /&gt;
* [[Negative Paths]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Algorithms ===&lt;br /&gt;
* [[Dijkstra]]&lt;br /&gt;
* [[Kruskal]]&lt;br /&gt;
* [[Prim]]&lt;br /&gt;
* [[Bellman-Ford]]&lt;br /&gt;
* [[Floyd-Warshall]]&lt;br /&gt;
* [[Union Find]]&lt;br /&gt;
* [[A*]]&lt;br /&gt;
* [[Alternating paths algorithm]]&lt;br /&gt;
* [[Johnson]]&lt;br /&gt;
&lt;br /&gt;
=== Flow Algorithms ===&lt;br /&gt;
* [[Ford-Fulkerson]]&lt;br /&gt;
=== Data Structures ===&lt;br /&gt;
* [[Linked List]]&lt;br /&gt;
* [[Array List]]&lt;br /&gt;
* [[First In - First Out]]&lt;br /&gt;
* [[First In - Ieast Out]]&lt;br /&gt;
* [[Double Linked List]]&lt;br /&gt;
* [[Heaps]] (DONE (Heap as Array))&lt;br /&gt;
* [[Min-Max Heaps]]&lt;br /&gt;
* [[Hash Table]]&lt;br /&gt;
* [[Directed Tree]]&lt;br /&gt;
* [[Binary Search Tree]]&lt;br /&gt;
* [[B-Trees]]&lt;br /&gt;
* [[Decision Tree]]&lt;br /&gt;
* [[Red-Black Tree]]&lt;br /&gt;
* [[Graphs]]&lt;br /&gt;
&lt;br /&gt;
=== Other Algorithms (LOCKED) ===&lt;br /&gt;
* [[B*]]&lt;br /&gt;
* [[Cyclic Redundancy Check]]&lt;br /&gt;
* [[Eulcid]]&lt;br /&gt;
* [[Gauss]]&lt;br /&gt;
* [[Discrete Fourier transform]]&lt;br /&gt;
* [[Fast Fourier transform]]&lt;br /&gt;
* [[Bresenham]]&lt;br /&gt;
* [[Round Robin]]&lt;br /&gt;
* [[Seperate and Conquer]]&lt;br /&gt;
* [[Message-Digest Algorithm]]&lt;br /&gt;
* [[Secure Hash Algorithm]]&lt;br /&gt;
* [[Sequent calculus]]&lt;br /&gt;
* [[Resolution calculus]]&lt;br /&gt;
* [[Cocke-Younger-Kasami Algorithm]]&lt;br /&gt;
* [[Distance Vector Routing]]&lt;br /&gt;
* [[Link State Round]]&lt;br /&gt;
* [[Z Buffer Algorithm]]&lt;br /&gt;
* [[Marching Squares]]&lt;br /&gt;
* [[Marching Cubes]]&lt;br /&gt;
* [[Bottom-Up Heapsort]]&lt;br /&gt;
* [[Radixsort]]&lt;br /&gt;
* [[Median Cut]]&lt;br /&gt;
* [[Pancake sorting]]&lt;br /&gt;
* [[Karnaugh-Veitch Diagramm]]&lt;br /&gt;
* [[Delanuay Triangulation]]&lt;br /&gt;
* [[Backtracking]]&lt;br /&gt;
* [[Alpha–beta pruning]]&lt;br /&gt;
* [[Beam search]]&lt;br /&gt;
* [[Best-first search]]&lt;br /&gt;
* [[Bidirectional search]]&lt;br /&gt;
* [[Borůvka's algorithm]]&lt;br /&gt;
* [[Branch and bound]]&lt;br /&gt;
* [[D*]]&lt;br /&gt;
* [[Depth-limited search]]&lt;br /&gt;
* [[Edmonds' algorithm]]&lt;br /&gt;
* [[Fringe search]]&lt;br /&gt;
* [[Hill climbing]]&lt;br /&gt;
* [[IDA*]]&lt;br /&gt;
* [[Iterative deepening depth-first search]]&lt;br /&gt;
* [[Jump point search]]&lt;br /&gt;
* [[Lexicographic breadth-first search]]&lt;br /&gt;
* [[SMA*]]&lt;br /&gt;
* [[Uniform-cost search]]&lt;br /&gt;
&lt;br /&gt;
=== Other Data Structures (LOCKED) ===&lt;br /&gt;
* [[Adelson-Velskii and Landis' tree]]&lt;br /&gt;
* [[Patricia-Trie]]&lt;br /&gt;
* [[Suffix Tree]]&lt;br /&gt;
* [[Huffmann Tree]]&lt;br /&gt;
* [[Binary Expression Tree]]&lt;br /&gt;
* [[Hash Set]]&lt;br /&gt;
* [[Incidence Matrix]]&lt;br /&gt;
* [[Voronoi Diagramm]]&lt;br /&gt;
* [[Quad Tree]]&lt;br /&gt;
* [[Oct Tree]]&lt;br /&gt;
* [[kd Tree]]&lt;br /&gt;
* [[Binary space partitioning]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Category:Basic_Problems_on_Sequences&amp;diff=558</id>
		<title>Category:Basic Problems on Sequences</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Category:Basic_Problems_on_Sequences&amp;diff=558"/>
		<updated>2014-10-01T20:05:06Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;Category:Problems on Sequences&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Problems on Sequences]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Merging_two_sorted_sequences&amp;diff=557</id>
		<title>Merging two sorted sequences</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Merging_two_sorted_sequences&amp;diff=557"/>
		<updated>2014-10-01T20:03:34Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;__NOTOC__ Category:Checkup Category:Algorithmic Problem Category:Basic Problems on Sequences ==Input== Two Sets and sequences#Ordered and sorted sequences|sorted...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
[[Category:Algorithmic Problem]]&lt;br /&gt;
[[Category:Basic Problems on Sequences]]&lt;br /&gt;
==Input==&lt;br /&gt;
Two [[Sets and sequences#Ordered and sorted sequences|sorted sequences]], &amp;lt;math&amp;gt;S_{1}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;S_{2}&amp;lt;/math&amp;gt;, that have identical component type and identical definition of [[Genericity#Comparison|comparison]].&lt;br /&gt;
&lt;br /&gt;
==Output==&lt;br /&gt;
A sorted sequence &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, whose element set is the union of the element sets of &amp;lt;math&amp;gt;S_{1}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;S_{2}&amp;lt;/math&amp;gt;, sorted according to the same definition of comparison.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
Linear in the sum of the lengths of the input sequences.&lt;br /&gt;
&lt;br /&gt;
==Known algorithms==&lt;br /&gt;
[[Merge]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Find_an_element_in_a_sequence&amp;diff=556</id>
		<title>Find an element in a sequence</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Find_an_element_in_a_sequence&amp;diff=556"/>
		<updated>2014-10-01T19:53:57Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;__NOTOC__ Category:Checkup Category:Algorithmic Problem Category:Basic Problems on Sequences ==Input== # A sequence &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. # an element &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; of...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
[[Category:Algorithmic Problem]]&lt;br /&gt;
[[Category:Basic Problems on Sequences]]&lt;br /&gt;
==Input==&lt;br /&gt;
# A sequence &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
# an element &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; of the component type of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Output==&lt;br /&gt;
A boolean value:&lt;br /&gt;
# &amp;lt;math&amp;gt;true&amp;lt;/math&amp;gt;, if &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; is currently in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;,&lt;br /&gt;
# &amp;lt;math&amp;gt;false&amp;lt;/math&amp;gt;, otherwise.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
Linear&lt;br /&gt;
&lt;br /&gt;
==Known algorithms==&lt;br /&gt;
# [[Find element in sequence iteratively]]&lt;br /&gt;
# [[Find element in sequence recursively]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Category:Problems_on_Sequences&amp;diff=555</id>
		<title>Category:Problems on Sequences</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Category:Problems_on_Sequences&amp;diff=555"/>
		<updated>2014-10-01T19:46:45Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;Category:Algorithmic Problem&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Algorithmic Problem]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Problems_on_Sequences&amp;diff=554</id>
		<title>Problems on Sequences</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Problems_on_Sequences&amp;diff=554"/>
		<updated>2014-10-01T19:43:34Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Problems_on_Sequences&amp;diff=553</id>
		<title>Problems on Sequences</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Problems_on_Sequences&amp;diff=553"/>
		<updated>2014-10-01T19:41:13Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;Category:Algorithmic Problem&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Algorithmic Problem]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=552</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=552"/>
		<updated>2014-10-01T19:39:23Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Divison of labor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
* &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; [http://www.mediawiki.org/wiki/Manual:Math available now!]&lt;br /&gt;
* ToDo List added&lt;br /&gt;
* Every content has to be in English!&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi Syntaxhighlight]&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
* Add finalized reconstructions of the old Wiki to Category:Checkup.&lt;br /&gt;
* Don't any non-Weihe content until the reconstructions isn't finished.&lt;br /&gt;
* Keep your active reconstructing Pages in &amp;quot;Division of labor&amp;quot; section up to date!&lt;br /&gt;
&lt;br /&gt;
== Divison of labor ==&lt;br /&gt;
* Fabio Cuozzo - Problems on Sequences&lt;br /&gt;
* Daniel Kratschmann - Problems&lt;br /&gt;
* Jan Hohmann - B-Tree&lt;br /&gt;
* Jan Rathjens - Ford-Fulkerson&lt;br /&gt;
* Thomas Lautenschläger - ???&lt;br /&gt;
&lt;br /&gt;
== Page Status ==&lt;br /&gt;
Final: [[:Category:Checkup]]&lt;br /&gt;
&lt;br /&gt;
== To Do ==&lt;br /&gt;
=== Notations ===&lt;br /&gt;
* [[Asymptotic notation]]&lt;br /&gt;
* [[L' Hospital]]&lt;br /&gt;
* [[Master theorem]]&lt;br /&gt;
=== Problems ===&lt;br /&gt;
* [[Maximum matching problem]]&lt;br /&gt;
* [[Max-Flow Problems]]&lt;br /&gt;
* [[Min-Cost Flow Problems]]&lt;br /&gt;
* [[Shortest Paths Problems]]&lt;br /&gt;
** [[All pairs shortest paths]]&lt;br /&gt;
*** [[Floyd-Warshall]]&lt;br /&gt;
*** [[Bellman-Ford]]&lt;br /&gt;
*** [[Shortest paths by repeated squaring]] (variant of Bellman-Ford) &lt;br /&gt;
** [[Single source shortest paths]]&lt;br /&gt;
*** [[Dijkstra]]&lt;br /&gt;
** [[Single source single target shortest paths]]&lt;br /&gt;
*** [[A*]]&lt;br /&gt;
* [[Maximum spanning forest]]&lt;br /&gt;
* [[Problems on Sequences]]&lt;br /&gt;
** [[Basic Problems on Sequences]]&lt;br /&gt;
*** [[Find an element in a sequence]]&lt;br /&gt;
*** [[Insert an element in a sequence]]&lt;br /&gt;
*** [[Median]]&lt;br /&gt;
*** [[Merging two sorted sequences]]&lt;br /&gt;
** [[Pattern Matching]]&lt;br /&gt;
*** [[One-dimensional string matching]] (DONE)&lt;br /&gt;
*** [[String matching]] (DONE)&lt;br /&gt;
** [[Sorting]]&lt;br /&gt;
*** [[Sorting based on pairwise comparison]]&lt;br /&gt;
*** [[Sorting Sequences of Strings]]&lt;br /&gt;
&lt;br /&gt;
=== Coding Basics ===&lt;br /&gt;
* [[Heritage]]&lt;br /&gt;
* [[Generics]]&lt;br /&gt;
* [[Collections]]&lt;br /&gt;
** [[Iterator]]&lt;br /&gt;
** [[Comparator]]&lt;br /&gt;
&lt;br /&gt;
=== String Matching Algorithms ===&lt;br /&gt;
* [[Simple string matching algorithm]] (DONE)&lt;br /&gt;
* [[String matching based on finite automaton]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Sorting Algorithms ===&lt;br /&gt;
* [[Bubble]]&lt;br /&gt;
* [[Insertion Sort]]&lt;br /&gt;
* [[Quick Sort]]&lt;br /&gt;
* [[Bubble Sort]]&lt;br /&gt;
* [[Merge Sort]]&lt;br /&gt;
* [[Bucket Sort]]&lt;br /&gt;
* [[Selection Sort]]&lt;br /&gt;
* [[Bogo Sort]]&lt;br /&gt;
&lt;br /&gt;
=== Search Algorithms ===&lt;br /&gt;
* [[Binary Search]]&lt;br /&gt;
&lt;br /&gt;
=== Tree Algorithms ===&lt;br /&gt;
* [[Depth-First Search]]&lt;br /&gt;
* [[Breadth-First Search]]&lt;br /&gt;
* [[B-Tree:Find]]&lt;br /&gt;
* [[B-Tree:Minimum]]&lt;br /&gt;
* [[B-Tree:Maximum]]&lt;br /&gt;
* [[B-Tree:Insert]]&lt;br /&gt;
* [[B-Tree:Insert and Rearrange]]&lt;br /&gt;
* [[B-Tree:merge two Siblings]]&lt;br /&gt;
* [[B-Tree:Remove]]&lt;br /&gt;
* [[B-Tree:Shift Key to Sibling]]&lt;br /&gt;
* [[B-Tree:Rotate]]&lt;br /&gt;
* [[B-Tree:Merge]]&lt;br /&gt;
* [[B-Tree:Split-Child]]&lt;br /&gt;
* [[Binary Search Tree:Find]]&lt;br /&gt;
* [[Binary Search Tree:Minimum]]&lt;br /&gt;
* [[Binary Search Tree:Maximum]]&lt;br /&gt;
* [[Binary Search Tree:Insert]]&lt;br /&gt;
* [[Binary Search Tree:Remove]]&lt;br /&gt;
* [[Binary Search Tree:Remove node]]&lt;br /&gt;
* [[Binary Search Tree:Traverse]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Theory ===&lt;br /&gt;
* [[Directed Graph]]&lt;br /&gt;
* [[Bipartite Graph]]&lt;br /&gt;
* [[k-partite Graph]]&lt;br /&gt;
* [[Negative Paths]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Algorithms ===&lt;br /&gt;
* [[Dijkstra]]&lt;br /&gt;
* [[Kruskal]]&lt;br /&gt;
* [[Prim]]&lt;br /&gt;
* [[Bellman-Ford]]&lt;br /&gt;
* [[Floyd-Warshall]]&lt;br /&gt;
* [[Union Find]]&lt;br /&gt;
* [[A*]]&lt;br /&gt;
* [[Alternating paths algorithm]]&lt;br /&gt;
* [[Johnson]]&lt;br /&gt;
&lt;br /&gt;
=== Flow Algorithms ===&lt;br /&gt;
* [[Ford-Fulkerson]]&lt;br /&gt;
=== Data Structures ===&lt;br /&gt;
* [[Linked List]]&lt;br /&gt;
* [[Array List]]&lt;br /&gt;
* [[First In - First Out]]&lt;br /&gt;
* [[First In - Ieast Out]]&lt;br /&gt;
* [[Double Linked List]]&lt;br /&gt;
* [[Heaps]] (DONE (Heap as Array))&lt;br /&gt;
* [[Min-Max Heaps]]&lt;br /&gt;
* [[Hash Table]]&lt;br /&gt;
* [[Directed Tree]]&lt;br /&gt;
* [[Binary Search Tree]]&lt;br /&gt;
* [[B-Trees]]&lt;br /&gt;
* [[Decision Tree]]&lt;br /&gt;
* [[Red-Black Tree]]&lt;br /&gt;
* [[Graphs]]&lt;br /&gt;
&lt;br /&gt;
=== Other Algorithms (LOCKED) ===&lt;br /&gt;
* [[B*]]&lt;br /&gt;
* [[Cyclic Redundancy Check]]&lt;br /&gt;
* [[Eulcid]]&lt;br /&gt;
* [[Gauss]]&lt;br /&gt;
* [[Discrete Fourier transform]]&lt;br /&gt;
* [[Fast Fourier transform]]&lt;br /&gt;
* [[Bresenham]]&lt;br /&gt;
* [[Round Robin]]&lt;br /&gt;
* [[Seperate and Conquer]]&lt;br /&gt;
* [[Message-Digest Algorithm]]&lt;br /&gt;
* [[Secure Hash Algorithm]]&lt;br /&gt;
* [[Sequent calculus]]&lt;br /&gt;
* [[Resolution calculus]]&lt;br /&gt;
* [[Cocke-Younger-Kasami Algorithm]]&lt;br /&gt;
* [[Distance Vector Routing]]&lt;br /&gt;
* [[Link State Round]]&lt;br /&gt;
* [[Z Buffer Algorithm]]&lt;br /&gt;
* [[Marching Squares]]&lt;br /&gt;
* [[Marching Cubes]]&lt;br /&gt;
* [[Bottom-Up Heapsort]]&lt;br /&gt;
* [[Radixsort]]&lt;br /&gt;
* [[Median Cut]]&lt;br /&gt;
* [[Pancake sorting]]&lt;br /&gt;
* [[Karnaugh-Veitch Diagramm]]&lt;br /&gt;
* [[Delanuay Triangulation]]&lt;br /&gt;
* [[Backtracking]]&lt;br /&gt;
* [[Alpha–beta pruning]]&lt;br /&gt;
* [[Beam search]]&lt;br /&gt;
* [[Best-first search]]&lt;br /&gt;
* [[Bidirectional search]]&lt;br /&gt;
* [[Borůvka's algorithm]]&lt;br /&gt;
* [[Branch and bound]]&lt;br /&gt;
* [[D*]]&lt;br /&gt;
* [[Depth-limited search]]&lt;br /&gt;
* [[Edmonds' algorithm]]&lt;br /&gt;
* [[Fringe search]]&lt;br /&gt;
* [[Hill climbing]]&lt;br /&gt;
* [[IDA*]]&lt;br /&gt;
* [[Iterative deepening depth-first search]]&lt;br /&gt;
* [[Jump point search]]&lt;br /&gt;
* [[Lexicographic breadth-first search]]&lt;br /&gt;
* [[SMA*]]&lt;br /&gt;
* [[Uniform-cost search]]&lt;br /&gt;
&lt;br /&gt;
=== Other Data Structures (LOCKED) ===&lt;br /&gt;
* [[Adelson-Velskii and Landis' tree]]&lt;br /&gt;
* [[Patricia-Trie]]&lt;br /&gt;
* [[Suffix Tree]]&lt;br /&gt;
* [[Huffmann Tree]]&lt;br /&gt;
* [[Binary Expression Tree]]&lt;br /&gt;
* [[Hash Set]]&lt;br /&gt;
* [[Incidence Matrix]]&lt;br /&gt;
* [[Voronoi Diagramm]]&lt;br /&gt;
* [[Quad Tree]]&lt;br /&gt;
* [[Oct Tree]]&lt;br /&gt;
* [[kd Tree]]&lt;br /&gt;
* [[Binary space partitioning]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=551</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=551"/>
		<updated>2014-10-01T19:32:25Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Problems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
* &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; [http://www.mediawiki.org/wiki/Manual:Math available now!]&lt;br /&gt;
* ToDo List added&lt;br /&gt;
* Every content has to be in English!&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi Syntaxhighlight]&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
* Add finalized reconstructions of the old Wiki to Category:Checkup.&lt;br /&gt;
* Don't any non-Weihe content until the reconstructions isn't finished.&lt;br /&gt;
* Keep your active reconstructing Pages in &amp;quot;Division of labor&amp;quot; section up to date!&lt;br /&gt;
&lt;br /&gt;
== Divison of labor ==&lt;br /&gt;
* Fabio Cuozzo - Pattern Matching&lt;br /&gt;
* Daniel Kratschmann - Problems&lt;br /&gt;
* Jan Hohmann - B-Tree&lt;br /&gt;
* Jan Rathjens - Ford-Fulkerson&lt;br /&gt;
* Thomas Lautenschläger - ???&lt;br /&gt;
&lt;br /&gt;
== Page Status ==&lt;br /&gt;
Final: [[:Category:Checkup]]&lt;br /&gt;
&lt;br /&gt;
== To Do ==&lt;br /&gt;
=== Notations ===&lt;br /&gt;
* [[Asymptotic notation]]&lt;br /&gt;
* [[L' Hospital]]&lt;br /&gt;
* [[Master theorem]]&lt;br /&gt;
=== Problems ===&lt;br /&gt;
* [[Maximum matching problem]]&lt;br /&gt;
* [[Max-Flow Problems]]&lt;br /&gt;
* [[Min-Cost Flow Problems]]&lt;br /&gt;
* [[Shortest Paths Problems]]&lt;br /&gt;
** [[All pairs shortest paths]]&lt;br /&gt;
*** [[Floyd-Warshall]]&lt;br /&gt;
*** [[Bellman-Ford]]&lt;br /&gt;
*** [[Shortest paths by repeated squaring]] (variant of Bellman-Ford) &lt;br /&gt;
** [[Single source shortest paths]]&lt;br /&gt;
*** [[Dijkstra]]&lt;br /&gt;
** [[Single source single target shortest paths]]&lt;br /&gt;
*** [[A*]]&lt;br /&gt;
* [[Maximum spanning forest]]&lt;br /&gt;
* [[Problems on Sequences]]&lt;br /&gt;
** [[Basic Problems on Sequences]]&lt;br /&gt;
*** [[Find an element in a sequence]]&lt;br /&gt;
*** [[Insert an element in a sequence]]&lt;br /&gt;
*** [[Median]]&lt;br /&gt;
*** [[Merging two sorted sequences]]&lt;br /&gt;
** [[Pattern Matching]]&lt;br /&gt;
*** [[One-dimensional string matching]] (DONE)&lt;br /&gt;
*** [[String matching]] (DONE)&lt;br /&gt;
** [[Sorting]]&lt;br /&gt;
*** [[Sorting based on pairwise comparison]]&lt;br /&gt;
*** [[Sorting Sequences of Strings]]&lt;br /&gt;
&lt;br /&gt;
=== Coding Basics ===&lt;br /&gt;
* [[Heritage]]&lt;br /&gt;
* [[Generics]]&lt;br /&gt;
* [[Collections]]&lt;br /&gt;
** [[Iterator]]&lt;br /&gt;
** [[Comparator]]&lt;br /&gt;
&lt;br /&gt;
=== String Matching Algorithms ===&lt;br /&gt;
* [[Simple string matching algorithm]] (DONE)&lt;br /&gt;
* [[String matching based on finite automaton]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Sorting Algorithms ===&lt;br /&gt;
* [[Bubble]]&lt;br /&gt;
* [[Insertion Sort]]&lt;br /&gt;
* [[Quick Sort]]&lt;br /&gt;
* [[Bubble Sort]]&lt;br /&gt;
* [[Merge Sort]]&lt;br /&gt;
* [[Bucket Sort]]&lt;br /&gt;
* [[Selection Sort]]&lt;br /&gt;
* [[Bogo Sort]]&lt;br /&gt;
&lt;br /&gt;
=== Search Algorithms ===&lt;br /&gt;
* [[Binary Search]]&lt;br /&gt;
&lt;br /&gt;
=== Tree Algorithms ===&lt;br /&gt;
* [[Depth-First Search]]&lt;br /&gt;
* [[Breadth-First Search]]&lt;br /&gt;
* [[B-Tree:Find]]&lt;br /&gt;
* [[B-Tree:Minimum]]&lt;br /&gt;
* [[B-Tree:Maximum]]&lt;br /&gt;
* [[B-Tree:Insert]]&lt;br /&gt;
* [[B-Tree:Insert and Rearrange]]&lt;br /&gt;
* [[B-Tree:merge two Siblings]]&lt;br /&gt;
* [[B-Tree:Remove]]&lt;br /&gt;
* [[B-Tree:Shift Key to Sibling]]&lt;br /&gt;
* [[B-Tree:Rotate]]&lt;br /&gt;
* [[B-Tree:Merge]]&lt;br /&gt;
* [[B-Tree:Split-Child]]&lt;br /&gt;
* [[Binary Search Tree:Find]]&lt;br /&gt;
* [[Binary Search Tree:Minimum]]&lt;br /&gt;
* [[Binary Search Tree:Maximum]]&lt;br /&gt;
* [[Binary Search Tree:Insert]]&lt;br /&gt;
* [[Binary Search Tree:Remove]]&lt;br /&gt;
* [[Binary Search Tree:Remove node]]&lt;br /&gt;
* [[Binary Search Tree:Traverse]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Theory ===&lt;br /&gt;
* [[Directed Graph]]&lt;br /&gt;
* [[Bipartite Graph]]&lt;br /&gt;
* [[k-partite Graph]]&lt;br /&gt;
* [[Negative Paths]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Algorithms ===&lt;br /&gt;
* [[Dijkstra]]&lt;br /&gt;
* [[Kruskal]]&lt;br /&gt;
* [[Prim]]&lt;br /&gt;
* [[Bellman-Ford]]&lt;br /&gt;
* [[Floyd-Warshall]]&lt;br /&gt;
* [[Union Find]]&lt;br /&gt;
* [[A*]]&lt;br /&gt;
* [[Alternating paths algorithm]]&lt;br /&gt;
* [[Johnson]]&lt;br /&gt;
&lt;br /&gt;
=== Flow Algorithms ===&lt;br /&gt;
* [[Ford-Fulkerson]]&lt;br /&gt;
=== Data Structures ===&lt;br /&gt;
* [[Linked List]]&lt;br /&gt;
* [[Array List]]&lt;br /&gt;
* [[First In - First Out]]&lt;br /&gt;
* [[First In - Ieast Out]]&lt;br /&gt;
* [[Double Linked List]]&lt;br /&gt;
* [[Heaps]] (DONE (Heap as Array))&lt;br /&gt;
* [[Min-Max Heaps]]&lt;br /&gt;
* [[Hash Table]]&lt;br /&gt;
* [[Directed Tree]]&lt;br /&gt;
* [[Binary Search Tree]]&lt;br /&gt;
* [[B-Trees]]&lt;br /&gt;
* [[Decision Tree]]&lt;br /&gt;
* [[Red-Black Tree]]&lt;br /&gt;
* [[Graphs]]&lt;br /&gt;
&lt;br /&gt;
=== Other Algorithms (LOCKED) ===&lt;br /&gt;
* [[B*]]&lt;br /&gt;
* [[Cyclic Redundancy Check]]&lt;br /&gt;
* [[Eulcid]]&lt;br /&gt;
* [[Gauss]]&lt;br /&gt;
* [[Discrete Fourier transform]]&lt;br /&gt;
* [[Fast Fourier transform]]&lt;br /&gt;
* [[Bresenham]]&lt;br /&gt;
* [[Round Robin]]&lt;br /&gt;
* [[Seperate and Conquer]]&lt;br /&gt;
* [[Message-Digest Algorithm]]&lt;br /&gt;
* [[Secure Hash Algorithm]]&lt;br /&gt;
* [[Sequent calculus]]&lt;br /&gt;
* [[Resolution calculus]]&lt;br /&gt;
* [[Cocke-Younger-Kasami Algorithm]]&lt;br /&gt;
* [[Distance Vector Routing]]&lt;br /&gt;
* [[Link State Round]]&lt;br /&gt;
* [[Z Buffer Algorithm]]&lt;br /&gt;
* [[Marching Squares]]&lt;br /&gt;
* [[Marching Cubes]]&lt;br /&gt;
* [[Bottom-Up Heapsort]]&lt;br /&gt;
* [[Radixsort]]&lt;br /&gt;
* [[Median Cut]]&lt;br /&gt;
* [[Pancake sorting]]&lt;br /&gt;
* [[Karnaugh-Veitch Diagramm]]&lt;br /&gt;
* [[Delanuay Triangulation]]&lt;br /&gt;
* [[Backtracking]]&lt;br /&gt;
* [[Alpha–beta pruning]]&lt;br /&gt;
* [[Beam search]]&lt;br /&gt;
* [[Best-first search]]&lt;br /&gt;
* [[Bidirectional search]]&lt;br /&gt;
* [[Borůvka's algorithm]]&lt;br /&gt;
* [[Branch and bound]]&lt;br /&gt;
* [[D*]]&lt;br /&gt;
* [[Depth-limited search]]&lt;br /&gt;
* [[Edmonds' algorithm]]&lt;br /&gt;
* [[Fringe search]]&lt;br /&gt;
* [[Hill climbing]]&lt;br /&gt;
* [[IDA*]]&lt;br /&gt;
* [[Iterative deepening depth-first search]]&lt;br /&gt;
* [[Jump point search]]&lt;br /&gt;
* [[Lexicographic breadth-first search]]&lt;br /&gt;
* [[SMA*]]&lt;br /&gt;
* [[Uniform-cost search]]&lt;br /&gt;
&lt;br /&gt;
=== Other Data Structures (LOCKED) ===&lt;br /&gt;
* [[Adelson-Velskii and Landis' tree]]&lt;br /&gt;
* [[Patricia-Trie]]&lt;br /&gt;
* [[Suffix Tree]]&lt;br /&gt;
* [[Huffmann Tree]]&lt;br /&gt;
* [[Binary Expression Tree]]&lt;br /&gt;
* [[Hash Set]]&lt;br /&gt;
* [[Incidence Matrix]]&lt;br /&gt;
* [[Voronoi Diagramm]]&lt;br /&gt;
* [[Quad Tree]]&lt;br /&gt;
* [[Oct Tree]]&lt;br /&gt;
* [[kd Tree]]&lt;br /&gt;
* [[Binary space partitioning]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching&amp;diff=550</id>
		<title>String matching</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching&amp;diff=550"/>
		<updated>2014-10-01T19:30:13Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Known algorithms */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
[[Category:Algorithmic Problem]]&lt;br /&gt;
[[Category:Pattern Matching]]&lt;br /&gt;
==Input==&lt;br /&gt;
Two non-empty [[Sets and sequences|sequences]], &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Let &amp;lt;math&amp;gt;n(S),n(T) \in \mathbb{N}&amp;lt;/math&amp;gt; denote the lengths of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
==Output==&lt;br /&gt;
A [[Sets and sequences#Ordered and sorted sequences|sorted sequences]] &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; of positions of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, that is, &amp;lt;math&amp;gt;P[i] \in \{ 1,...,n(S)\}&amp;lt;/math&amp;gt; for all positions of &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. More specifically, &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; contains all positions &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;S[m+j-1]=T[j]&amp;lt;/math&amp;gt; for all &amp;lt;math&amp;gt;j \in \{ 1,...,n(T)\}&amp;lt;/math&amp;gt;. Such a subsequence &amp;lt;math&amp;gt;(S[m],...,S[m+n(T)-1])&amp;lt;/math&amp;gt; is called an '''occurrence''' of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
&lt;br /&gt;
==Known algorithms==&lt;br /&gt;
[[Simple string matching algorithm]]&lt;br /&gt;
&lt;br /&gt;
[[String matching based on finite automaton]]&lt;br /&gt;
&lt;br /&gt;
==Remark==&lt;br /&gt;
Note that occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; may overlap (otherwise, the string matching problem would be trivially solvable in linear time).&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching&amp;diff=549</id>
		<title>String matching</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching&amp;diff=549"/>
		<updated>2014-10-01T19:29:35Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;__NOTOC__ Category:Checkup Category:Algorithmic Problem Category:Pattern Matching ==Input== Two non-empty sequences, &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; and &amp;lt;mat...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
[[Category:Algorithmic Problem]]&lt;br /&gt;
[[Category:Pattern Matching]]&lt;br /&gt;
==Input==&lt;br /&gt;
Two non-empty [[Sets and sequences|sequences]], &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Let &amp;lt;math&amp;gt;n(S),n(T) \in \mathbb{N}&amp;lt;/math&amp;gt; denote the lengths of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
==Output==&lt;br /&gt;
A [[Sets and sequences#Ordered and sorted sequences|sorted sequences]] &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; of positions of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, that is, &amp;lt;math&amp;gt;P[i] \in \{ 1,...,n(S)\}&amp;lt;/math&amp;gt; for all positions of &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. More specifically, &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; contains all positions &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;S[m+j-1]=T[j]&amp;lt;/math&amp;gt; for all &amp;lt;math&amp;gt;j \in \{ 1,...,n(T)\}&amp;lt;/math&amp;gt;. Such a subsequence &amp;lt;math&amp;gt;(S[m],...,S[m+n(T)-1])&amp;lt;/math&amp;gt; is called an '''occurrence''' of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
&lt;br /&gt;
==Known algorithms==&lt;br /&gt;
[[Simple string matching algorithm]]&lt;br /&gt;
[[String matching based on finite automaton]]&lt;br /&gt;
&lt;br /&gt;
==Remark==&lt;br /&gt;
Note that occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; may overlap (otherwise, the string matching problem would be trivially solvable in linear time).&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Category:Pattern_Matching&amp;diff=548</id>
		<title>Category:Pattern Matching</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Category:Pattern_Matching&amp;diff=548"/>
		<updated>2014-10-01T19:15:30Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;Category:Problems on Sequences&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Problems on Sequences]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=547</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=547"/>
		<updated>2014-10-01T19:12:27Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Divison of labor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
* &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; [http://www.mediawiki.org/wiki/Manual:Math available now!]&lt;br /&gt;
* ToDo List added&lt;br /&gt;
* Every content has to be in English!&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi Syntaxhighlight]&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
* Add finalized reconstructions of the old Wiki to Category:Checkup.&lt;br /&gt;
* Don't any non-Weihe content until the reconstructions isn't finished.&lt;br /&gt;
* Keep your active reconstructing Pages in &amp;quot;Division of labor&amp;quot; section up to date!&lt;br /&gt;
&lt;br /&gt;
== Divison of labor ==&lt;br /&gt;
* Fabio Cuozzo - Pattern Matching&lt;br /&gt;
* Daniel Kratschmann - Problems&lt;br /&gt;
* Jan Hohmann - B-Tree&lt;br /&gt;
* Jan Rathjens - Ford-Fulkerson&lt;br /&gt;
* Thomas Lautenschläger - ???&lt;br /&gt;
&lt;br /&gt;
== Page Status ==&lt;br /&gt;
Final: [[:Category:Checkup]]&lt;br /&gt;
&lt;br /&gt;
== To Do ==&lt;br /&gt;
=== Notations ===&lt;br /&gt;
* [[Asymptotic notation]]&lt;br /&gt;
* [[L' Hospital]]&lt;br /&gt;
* [[Master theorem]]&lt;br /&gt;
=== Problems ===&lt;br /&gt;
* [[Maximum matching problem]]&lt;br /&gt;
* [[Max-Flow Problems]]&lt;br /&gt;
* [[Min-Cost Flow Problems]]&lt;br /&gt;
* [[Shortest Paths Problems]]&lt;br /&gt;
** [[All pairs shortest paths]]&lt;br /&gt;
*** [[Floyd-Warshall]]&lt;br /&gt;
*** [[Bellman-Ford]]&lt;br /&gt;
*** [[Shortest paths by repeated squaring]] (variant of Bellman-Ford) &lt;br /&gt;
** [[Single source shortest paths]]&lt;br /&gt;
*** [[Dijkstra]]&lt;br /&gt;
** [[Single source single target shortest paths]]&lt;br /&gt;
*** [[A*]]&lt;br /&gt;
* [[Maximum spanning forest]]&lt;br /&gt;
* [[Problems on Sequences]]&lt;br /&gt;
** [[Basic Problems on Sequences]]&lt;br /&gt;
*** [[Find an element in a sequence]]&lt;br /&gt;
*** [[Insert an element in a sequence]]&lt;br /&gt;
*** [[Median]]&lt;br /&gt;
*** [[Merging two sorted sequences]]&lt;br /&gt;
** [[Pattern Matching]]&lt;br /&gt;
*** [[One-dimensional string matching]]&lt;br /&gt;
*** [[String matching]]&lt;br /&gt;
** [[Sorting]]&lt;br /&gt;
*** [[Sorting based on pairwise comparison]]&lt;br /&gt;
*** [[Sorting Sequences of Strings]]&lt;br /&gt;
&lt;br /&gt;
=== Coding Basics ===&lt;br /&gt;
* [[Heritage]]&lt;br /&gt;
* [[Generics]]&lt;br /&gt;
* [[Collections]]&lt;br /&gt;
** [[Iterator]]&lt;br /&gt;
** [[Comparator]]&lt;br /&gt;
&lt;br /&gt;
=== String Matching Algorithms ===&lt;br /&gt;
* [[Simple string matching algorithm]] (DONE)&lt;br /&gt;
* [[String matching based on finite automaton]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Sorting Algorithms ===&lt;br /&gt;
* [[Bubble]]&lt;br /&gt;
* [[Insertion Sort]]&lt;br /&gt;
* [[Quick Sort]]&lt;br /&gt;
* [[Bubble Sort]]&lt;br /&gt;
* [[Merge Sort]]&lt;br /&gt;
* [[Bucket Sort]]&lt;br /&gt;
* [[Selection Sort]]&lt;br /&gt;
* [[Bogo Sort]]&lt;br /&gt;
&lt;br /&gt;
=== Search Algorithms ===&lt;br /&gt;
* [[Binary Search]]&lt;br /&gt;
&lt;br /&gt;
=== Tree Algorithms ===&lt;br /&gt;
* [[Depth-First Search]]&lt;br /&gt;
* [[Breadth-First Search]]&lt;br /&gt;
* [[B-Tree:Find]]&lt;br /&gt;
* [[B-Tree:Minimum]]&lt;br /&gt;
* [[B-Tree:Maximum]]&lt;br /&gt;
* [[B-Tree:Insert]]&lt;br /&gt;
* [[B-Tree:Insert and Rearrange]]&lt;br /&gt;
* [[B-Tree:merge two Siblings]]&lt;br /&gt;
* [[B-Tree:Remove]]&lt;br /&gt;
* [[B-Tree:Shift Key to Sibling]]&lt;br /&gt;
* [[B-Tree:Rotate]]&lt;br /&gt;
* [[B-Tree:Merge]]&lt;br /&gt;
* [[B-Tree:Split-Child]]&lt;br /&gt;
* [[Binary Search Tree:Find]]&lt;br /&gt;
* [[Binary Search Tree:Minimum]]&lt;br /&gt;
* [[Binary Search Tree:Maximum]]&lt;br /&gt;
* [[Binary Search Tree:Insert]]&lt;br /&gt;
* [[Binary Search Tree:Remove]]&lt;br /&gt;
* [[Binary Search Tree:Remove node]]&lt;br /&gt;
* [[Binary Search Tree:Traverse]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Theory ===&lt;br /&gt;
* [[Directed Graph]]&lt;br /&gt;
* [[Bipartite Graph]]&lt;br /&gt;
* [[k-partite Graph]]&lt;br /&gt;
* [[Negative Paths]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Algorithms ===&lt;br /&gt;
* [[Dijkstra]]&lt;br /&gt;
* [[Kruskal]]&lt;br /&gt;
* [[Prim]]&lt;br /&gt;
* [[Bellman-Ford]]&lt;br /&gt;
* [[Floyd-Warshall]]&lt;br /&gt;
* [[Union Find]]&lt;br /&gt;
* [[A*]]&lt;br /&gt;
* [[Alternating paths algorithm]]&lt;br /&gt;
* [[Johnson]]&lt;br /&gt;
&lt;br /&gt;
=== Flow Algorithms ===&lt;br /&gt;
* [[Ford-Fulkerson]]&lt;br /&gt;
=== Data Structures ===&lt;br /&gt;
* [[Linked List]]&lt;br /&gt;
* [[Array List]]&lt;br /&gt;
* [[First In - First Out]]&lt;br /&gt;
* [[First In - Ieast Out]]&lt;br /&gt;
* [[Double Linked List]]&lt;br /&gt;
* [[Heaps]] (DONE (Heap as Array))&lt;br /&gt;
* [[Min-Max Heaps]]&lt;br /&gt;
* [[Hash Table]]&lt;br /&gt;
* [[Directed Tree]]&lt;br /&gt;
* [[Binary Search Tree]]&lt;br /&gt;
* [[B-Trees]]&lt;br /&gt;
* [[Decision Tree]]&lt;br /&gt;
* [[Red-Black Tree]]&lt;br /&gt;
* [[Graphs]]&lt;br /&gt;
&lt;br /&gt;
=== Other Algorithms (LOCKED) ===&lt;br /&gt;
* [[B*]]&lt;br /&gt;
* [[Cyclic Redundancy Check]]&lt;br /&gt;
* [[Eulcid]]&lt;br /&gt;
* [[Gauss]]&lt;br /&gt;
* [[Discrete Fourier transform]]&lt;br /&gt;
* [[Fast Fourier transform]]&lt;br /&gt;
* [[Bresenham]]&lt;br /&gt;
* [[Round Robin]]&lt;br /&gt;
* [[Seperate and Conquer]]&lt;br /&gt;
* [[Message-Digest Algorithm]]&lt;br /&gt;
* [[Secure Hash Algorithm]]&lt;br /&gt;
* [[Sequent calculus]]&lt;br /&gt;
* [[Resolution calculus]]&lt;br /&gt;
* [[Cocke-Younger-Kasami Algorithm]]&lt;br /&gt;
* [[Distance Vector Routing]]&lt;br /&gt;
* [[Link State Round]]&lt;br /&gt;
* [[Z Buffer Algorithm]]&lt;br /&gt;
* [[Marching Squares]]&lt;br /&gt;
* [[Marching Cubes]]&lt;br /&gt;
* [[Bottom-Up Heapsort]]&lt;br /&gt;
* [[Radixsort]]&lt;br /&gt;
* [[Median Cut]]&lt;br /&gt;
* [[Pancake sorting]]&lt;br /&gt;
* [[Karnaugh-Veitch Diagramm]]&lt;br /&gt;
* [[Delanuay Triangulation]]&lt;br /&gt;
* [[Backtracking]]&lt;br /&gt;
* [[Alpha–beta pruning]]&lt;br /&gt;
* [[Beam search]]&lt;br /&gt;
* [[Best-first search]]&lt;br /&gt;
* [[Bidirectional search]]&lt;br /&gt;
* [[Borůvka's algorithm]]&lt;br /&gt;
* [[Branch and bound]]&lt;br /&gt;
* [[D*]]&lt;br /&gt;
* [[Depth-limited search]]&lt;br /&gt;
* [[Edmonds' algorithm]]&lt;br /&gt;
* [[Fringe search]]&lt;br /&gt;
* [[Hill climbing]]&lt;br /&gt;
* [[IDA*]]&lt;br /&gt;
* [[Iterative deepening depth-first search]]&lt;br /&gt;
* [[Jump point search]]&lt;br /&gt;
* [[Lexicographic breadth-first search]]&lt;br /&gt;
* [[SMA*]]&lt;br /&gt;
* [[Uniform-cost search]]&lt;br /&gt;
&lt;br /&gt;
=== Other Data Structures (LOCKED) ===&lt;br /&gt;
* [[Adelson-Velskii and Landis' tree]]&lt;br /&gt;
* [[Patricia-Trie]]&lt;br /&gt;
* [[Suffix Tree]]&lt;br /&gt;
* [[Huffmann Tree]]&lt;br /&gt;
* [[Binary Expression Tree]]&lt;br /&gt;
* [[Hash Set]]&lt;br /&gt;
* [[Incidence Matrix]]&lt;br /&gt;
* [[Voronoi Diagramm]]&lt;br /&gt;
* [[Quad Tree]]&lt;br /&gt;
* [[Oct Tree]]&lt;br /&gt;
* [[kd Tree]]&lt;br /&gt;
* [[Binary space partitioning]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=One-dimensional_string_matching&amp;diff=546</id>
		<title>One-dimensional string matching</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=One-dimensional_string_matching&amp;diff=546"/>
		<updated>2014-10-01T19:06:26Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Checkup]]&lt;br /&gt;
[[Category:Algorithmic Problem]]&lt;br /&gt;
[[Category:Pattern Matching]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
==Input==&lt;br /&gt;
Two [[Linear sequence|linear sequences]], &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; of length &amp;lt;math&amp;gt;n=|S|&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; of length &amp;lt;math&amp;gt;m=|T|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Output==&lt;br /&gt;
A [[Sets and sequences#Ordered and sorted sequences|sorted sequence]] &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; of integral values from &amp;lt;math&amp;gt;\{ 1,...,n\}&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;i \in R&amp;lt;/math&amp;gt; if, and only if, it is &amp;lt;math&amp;gt;i\le n-m+1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;T[j]=S[i+j-1]&amp;lt;/math&amp;gt; for all &amp;lt;math&amp;gt;j \in \{ 1,...,m \}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
Polynomial.&lt;br /&gt;
&lt;br /&gt;
==Known algorithms==&lt;br /&gt;
# [[Simple string matching algorithm]]&lt;br /&gt;
# [[String matching based on finite automaton]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=One-dimensional_string_matching&amp;diff=545</id>
		<title>One-dimensional string matching</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=One-dimensional_string_matching&amp;diff=545"/>
		<updated>2014-10-01T19:05:04Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: Created page with &amp;quot;Category:Algorithmic Problem Category:Pattern Matching __NOTOC__ ==Input== Two linear sequences, &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; of length &amp;lt;math&amp;gt;n=|S|&amp;lt;/math&amp;gt; and &amp;lt;m...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Algorithmic Problem]]&lt;br /&gt;
[[Category:Pattern Matching]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
==Input==&lt;br /&gt;
Two [[Linear sequence|linear sequences]], &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; of length &amp;lt;math&amp;gt;n=|S|&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; of length &amp;lt;math&amp;gt;m=|T|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Output==&lt;br /&gt;
A [[Sets and sequences#Ordered and sorted sequences|sorted sequence]] &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; of integral values from &amp;lt;math&amp;gt;\{ 1,...,n\}&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;i \in R&amp;lt;/math&amp;gt; if, and only if, it is &amp;lt;math&amp;gt;i\le n-m+1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;T[j]=S[i+j-1]&amp;lt;/math&amp;gt; for all &amp;lt;math&amp;gt;j \in \{ 1,...,m \}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
Polynomial.&lt;br /&gt;
&lt;br /&gt;
==Known algorithms==&lt;br /&gt;
# [[Simple string matching algorithm]]&lt;br /&gt;
# [[String matching based on finite automaton]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=544</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=544"/>
		<updated>2014-10-01T14:09:22Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* String Matching Algorithms */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
* &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; [http://www.mediawiki.org/wiki/Manual:Math available now!]&lt;br /&gt;
* ToDo List added&lt;br /&gt;
* Every content has to be in English!&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi Syntaxhighlight]&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
* Add finalized reconstructions of the old Wiki to Category:Checkup.&lt;br /&gt;
* Don't any non-Weihe content until the reconstructions isn't finished.&lt;br /&gt;
* Keep your active reconstructing Pages in &amp;quot;Division of labor&amp;quot; section up to date!&lt;br /&gt;
&lt;br /&gt;
== Divison of labor ==&lt;br /&gt;
* Fabio Cuozzo - Heaps&lt;br /&gt;
* Daniel Kratschmann - Problems&lt;br /&gt;
* Jan Hohmann - B-Tree&lt;br /&gt;
* Jan Rathjens - Ford-Fulkerson&lt;br /&gt;
* Thomas Lautenschläger - ???&lt;br /&gt;
&lt;br /&gt;
== Page Status ==&lt;br /&gt;
Final: [[:Category:Checkup]]&lt;br /&gt;
&lt;br /&gt;
== To Do ==&lt;br /&gt;
=== Notations ===&lt;br /&gt;
* [[Asymptotic notation]]&lt;br /&gt;
* [[L' Hospital]]&lt;br /&gt;
* [[Master theorem]]&lt;br /&gt;
=== Problems ===&lt;br /&gt;
* [[Maximum matching problem]]&lt;br /&gt;
* [[Max-Flow Problems]]&lt;br /&gt;
* [[Min-Cost Flow Problems]]&lt;br /&gt;
* [[Shortest Paths Problems]]&lt;br /&gt;
** [[All pairs shortest paths]]&lt;br /&gt;
*** [[Floyd-Warshall]]&lt;br /&gt;
*** [[Bellman-Ford]]&lt;br /&gt;
*** [[Shortest paths by repeated squaring]] (variant of Bellman-Ford) &lt;br /&gt;
** [[Single source shortest paths]]&lt;br /&gt;
*** [[Dijkstra]]&lt;br /&gt;
** [[Single source single target shortest paths]]&lt;br /&gt;
*** [[A*]]&lt;br /&gt;
* [[Maximum spanning forest]]&lt;br /&gt;
* [[Problems on Sequences]]&lt;br /&gt;
** [[Basic Problems on Sequences]]&lt;br /&gt;
*** [[Find an element in a sequence]]&lt;br /&gt;
*** [[Insert an element in a sequence]]&lt;br /&gt;
*** [[Median]]&lt;br /&gt;
*** [[Merging two sorted sequences]]&lt;br /&gt;
** [[Pattern Matching]]&lt;br /&gt;
*** [[One-dimensional string matching]]&lt;br /&gt;
*** [[String matching]]&lt;br /&gt;
** [[Sorting]]&lt;br /&gt;
*** [[Sorting based on pairwise comparison]]&lt;br /&gt;
*** [[Sorting Sequences of Strings]]&lt;br /&gt;
&lt;br /&gt;
=== Coding Basics ===&lt;br /&gt;
* [[Heritage]]&lt;br /&gt;
* [[Generics]]&lt;br /&gt;
* [[Collections]]&lt;br /&gt;
** [[Iterator]]&lt;br /&gt;
** [[Comparator]]&lt;br /&gt;
&lt;br /&gt;
=== String Matching Algorithms ===&lt;br /&gt;
* [[Simple string matching algorithm]] (DONE)&lt;br /&gt;
* [[String matching based on finite automaton]] (DONE)&lt;br /&gt;
&lt;br /&gt;
=== Sorting Algorithms ===&lt;br /&gt;
* [[Bubble]]&lt;br /&gt;
* [[Insertion Sort]]&lt;br /&gt;
* [[Quick Sort]]&lt;br /&gt;
* [[Bubble Sort]]&lt;br /&gt;
* [[Merge Sort]]&lt;br /&gt;
* [[Bucket Sort]]&lt;br /&gt;
* [[Selection Sort]]&lt;br /&gt;
* [[Bogo Sort]]&lt;br /&gt;
&lt;br /&gt;
=== Search Algorithms ===&lt;br /&gt;
* [[Binary Search]]&lt;br /&gt;
&lt;br /&gt;
=== Tree Algorithms ===&lt;br /&gt;
* [[Depth-First Search]]&lt;br /&gt;
* [[Breadth-First Search]]&lt;br /&gt;
* [[B-Tree:Find]]&lt;br /&gt;
* [[B-Tree:Minimum]]&lt;br /&gt;
* [[B-Tree:Maximum]]&lt;br /&gt;
* [[B-Tree:Insert]]&lt;br /&gt;
* [[B-Tree:Insert and Rearrange]]&lt;br /&gt;
* [[B-Tree:merge two Siblings]]&lt;br /&gt;
* [[B-Tree:Remove]]&lt;br /&gt;
* [[B-Tree:Shift Key to Sibling]]&lt;br /&gt;
* [[B-Tree:Rotate]]&lt;br /&gt;
* [[B-Tree:Merge]]&lt;br /&gt;
* [[B-Tree:Split-Child]]&lt;br /&gt;
* [[Binary Search Tree:Find]]&lt;br /&gt;
* [[Binary Search Tree:Minimum]]&lt;br /&gt;
* [[Binary Search Tree:Maximum]]&lt;br /&gt;
* [[Binary Search Tree:Insert]]&lt;br /&gt;
* [[Binary Search Tree:Remove]]&lt;br /&gt;
* [[Binary Search Tree:Remove node]]&lt;br /&gt;
* [[Binary Search Tree:Traverse]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Theory ===&lt;br /&gt;
* [[Directed Graph]]&lt;br /&gt;
* [[Bipartite Graph]]&lt;br /&gt;
* [[k-partite Graph]]&lt;br /&gt;
* [[Negative Paths]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Algorithms ===&lt;br /&gt;
* [[Dijkstra]]&lt;br /&gt;
* [[Kruskal]]&lt;br /&gt;
* [[Prim]]&lt;br /&gt;
* [[Bellman-Ford]]&lt;br /&gt;
* [[Floyd-Warshall]]&lt;br /&gt;
* [[Union Find]]&lt;br /&gt;
* [[A*]]&lt;br /&gt;
* [[Alternating paths algorithm]]&lt;br /&gt;
* [[Johnson]]&lt;br /&gt;
&lt;br /&gt;
=== Flow Algorithms ===&lt;br /&gt;
* [[Ford-Fulkerson]]&lt;br /&gt;
=== Data Structures ===&lt;br /&gt;
* [[Linked List]]&lt;br /&gt;
* [[Array List]]&lt;br /&gt;
* [[First In - First Out]]&lt;br /&gt;
* [[First In - Ieast Out]]&lt;br /&gt;
* [[Double Linked List]]&lt;br /&gt;
* [[Heaps]] (DONE (Heap as Array))&lt;br /&gt;
* [[Min-Max Heaps]]&lt;br /&gt;
* [[Hash Table]]&lt;br /&gt;
* [[Directed Tree]]&lt;br /&gt;
* [[Binary Search Tree]]&lt;br /&gt;
* [[B-Trees]]&lt;br /&gt;
* [[Decision Tree]]&lt;br /&gt;
* [[Red-Black Tree]]&lt;br /&gt;
* [[Graphs]]&lt;br /&gt;
&lt;br /&gt;
=== Other Algorithms (LOCKED) ===&lt;br /&gt;
* [[B*]]&lt;br /&gt;
* [[Cyclic Redundancy Check]]&lt;br /&gt;
* [[Eulcid]]&lt;br /&gt;
* [[Gauss]]&lt;br /&gt;
* [[Discrete Fourier transform]]&lt;br /&gt;
* [[Fast Fourier transform]]&lt;br /&gt;
* [[Bresenham]]&lt;br /&gt;
* [[Round Robin]]&lt;br /&gt;
* [[Seperate and Conquer]]&lt;br /&gt;
* [[Message-Digest Algorithm]]&lt;br /&gt;
* [[Secure Hash Algorithm]]&lt;br /&gt;
* [[Sequent calculus]]&lt;br /&gt;
* [[Resolution calculus]]&lt;br /&gt;
* [[Cocke-Younger-Kasami Algorithm]]&lt;br /&gt;
* [[Distance Vector Routing]]&lt;br /&gt;
* [[Link State Round]]&lt;br /&gt;
* [[Z Buffer Algorithm]]&lt;br /&gt;
* [[Marching Squares]]&lt;br /&gt;
* [[Marching Cubes]]&lt;br /&gt;
* [[Bottom-Up Heapsort]]&lt;br /&gt;
* [[Radixsort]]&lt;br /&gt;
* [[Median Cut]]&lt;br /&gt;
* [[Pancake sorting]]&lt;br /&gt;
* [[Karnaugh-Veitch Diagramm]]&lt;br /&gt;
* [[Delanuay Triangulation]]&lt;br /&gt;
* [[Backtracking]]&lt;br /&gt;
* [[Alpha–beta pruning]]&lt;br /&gt;
* [[Beam search]]&lt;br /&gt;
* [[Best-first search]]&lt;br /&gt;
* [[Bidirectional search]]&lt;br /&gt;
* [[Borůvka's algorithm]]&lt;br /&gt;
* [[Branch and bound]]&lt;br /&gt;
* [[D*]]&lt;br /&gt;
* [[Depth-limited search]]&lt;br /&gt;
* [[Edmonds' algorithm]]&lt;br /&gt;
* [[Fringe search]]&lt;br /&gt;
* [[Hill climbing]]&lt;br /&gt;
* [[IDA*]]&lt;br /&gt;
* [[Iterative deepening depth-first search]]&lt;br /&gt;
* [[Jump point search]]&lt;br /&gt;
* [[Lexicographic breadth-first search]]&lt;br /&gt;
* [[SMA*]]&lt;br /&gt;
* [[Uniform-cost search]]&lt;br /&gt;
&lt;br /&gt;
=== Other Data Structures (LOCKED) ===&lt;br /&gt;
* [[Adelson-Velskii and Landis' tree]]&lt;br /&gt;
* [[Patricia-Trie]]&lt;br /&gt;
* [[Suffix Tree]]&lt;br /&gt;
* [[Huffmann Tree]]&lt;br /&gt;
* [[Binary Expression Tree]]&lt;br /&gt;
* [[Hash Set]]&lt;br /&gt;
* [[Incidence Matrix]]&lt;br /&gt;
* [[Voronoi Diagramm]]&lt;br /&gt;
* [[Quad Tree]]&lt;br /&gt;
* [[Oct Tree]]&lt;br /&gt;
* [[kd Tree]]&lt;br /&gt;
* [[Binary space partitioning]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=543</id>
		<title>String matching based on finite automaton</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=543"/>
		<updated>2014-10-01T14:08:37Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[One-dimensional string matching]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop &lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data:'''&lt;br /&gt;
# A current '''maximum prefix length''' &amp;lt;math&amp;gt;q\in \{ 0,...,m\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
# A look-up table &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; with rows &amp;lt;math&amp;gt;\{ 0,...,m\}&amp;lt;/math&amp;gt; and one column for each character in the alphabet &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;. Intended semantics: The value &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; is the length of the longest [[Strings|prefix]] of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; that is also a [[Strings|suffix]] of &amp;lt;math&amp;gt;(T[1],...,T[j],c)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' After &amp;lt;math&amp;gt;i \ge 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie completely in &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt;; in other words, the start indexes in the range &amp;lt;math&amp;gt;(1,...,i-m+1])&amp;lt;/math&amp;gt;.&lt;br /&gt;
# The value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is the largest value &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])=(T[1],...,T[k])&amp;lt;/math&amp;gt;.&lt;br /&gt;
To understand the rationale of the second invariant, note that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])=(T[1],...,T[k])&amp;lt;/math&amp;gt; is equivalent to the informal statement that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])&amp;lt;/math&amp;gt; is a candidate for an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. In particular, &amp;lt;math&amp;gt;i-q+1&amp;lt;/math&amp;gt; is always the &amp;quot;most advanced&amp;quot; candidate (and &amp;lt;math&amp;gt;q=0&amp;lt;/math&amp;gt; means that, at the moment, there is no candidate at all).&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; increases by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' &amp;lt;math&amp;gt;i=n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; is empty.&lt;br /&gt;
# The initial value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is zero.&lt;br /&gt;
# The look-up table &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; must be built.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# Set &amp;lt;math&amp;gt;R:=\emptyset&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;q:=0&amp;lt;/math&amp;gt;.&lt;br /&gt;
# For &amp;lt;math&amp;gt;c\in \Sigma&amp;lt;/math&amp;gt;: If &amp;lt;math&amp;gt;T[1]=c&amp;lt;/math&amp;gt;, set &amp;lt;math&amp;gt;\Delta [0,c]:=1&amp;lt;/math&amp;gt;; otherwise, set &amp;lt;math&amp;gt;\Delta[0,c]:=0&amp;lt;/math&amp;gt;.&lt;br /&gt;
# For &amp;lt;math&amp;gt;j\in \{ 1,...,m\}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;c \in \Sigma&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Set &amp;lt;math&amp;gt;k:=\min \{ m,j+1 \}&amp;lt;/math&amp;gt;.&lt;br /&gt;
## While &amp;lt;math&amp;gt;k&amp;gt;0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;(T[1],...,T[k]) \neq (T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;, decrease &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
## Set &amp;lt;math&amp;gt;\Delta[j,c]:=k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Nothing is to show for &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;, so consider &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;. We have to show that the above-described intended semantics of &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; is indeed fulfilled, because these intended semantics of &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; will be the basis for the correctness proof of the induction step.&lt;br /&gt;
&lt;br /&gt;
Correctness of Step 3 is also easy to see, so consider Step 4.&lt;br /&gt;
&lt;br /&gt;
According to its intended semantics, &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; can neither be larger than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; nor larger than &amp;lt;math&amp;gt;j+1&amp;lt;/math&amp;gt;; in fact, any string longer than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; is not a prefix of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, and any string longer than &amp;lt;math&amp;gt;j+1&amp;lt;/math&amp;gt; is not a suffix of &amp;lt;math&amp;gt;(T[1],...,T[j],c)&amp;lt;/math&amp;gt;. This observation justifies the initialization of &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; in Step 4.1.&lt;br /&gt;
&lt;br /&gt;
Now, the countdown of &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; in Step 4.2 will terminate at the moment when, for the first time, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; fulfills &amp;lt;math&amp;gt;(T[1],...,T[k])=(T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;. Note that this equality is tantamount to the statement that the prefix &amp;lt;math&amp;gt;(T[1],...,T[k])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; is a suffix of &amp;lt;math&amp;gt;(T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;. Due to the countdown, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; is largest, so &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; conforms to its intended semantics. On the other hand, if the countdown terminates with &amp;lt;math&amp;gt;k=0&amp;lt;/math&amp;gt;, there was no such non-empty substring, so it is &amp;lt;math&amp;gt;\Delta [j,c]=0&amp;lt;/math&amp;gt;, which conforms to the intended semantics in this case as well.&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# The current maximum prefix length &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is to be updated to reflect the situation after reading &amp;lt;math&amp;gt;S[i]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# If &amp;lt;math&amp;gt;q=m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; completes an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, so the start index of this occurrence is to be appended to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# Set &amp;lt;math&amp;gt;q:=\Delta [q,S[i]]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# If &amp;lt;math&amp;gt;q=m&amp;lt;/math&amp;gt;, append &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Correctness:''' If the invariant on &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is maintained by Step 1, it is &amp;lt;math&amp;gt;q=m&amp;lt;/math&amp;gt; if, and only if, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; is the last index of an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. This proves correctness of Step 2 and thus maintenance of the first invariant, provided maintenance of the second invariant (the invariant on &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;) is proved. So it remains to show that the invariant on &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is indeed maintained.&lt;br /&gt;
&lt;br /&gt;
Recall that the correctness proof of the induction basis has proved that &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; fulfills the intended semantics as described above. Therefore, the new value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; after the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-th iteration is the largest length &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; of a prefix &amp;lt;math&amp;gt;(T[1],...,T[k]&amp;lt;/math&amp;gt; that is identical to &amp;lt;math&amp;gt;(T[i-k+2],...,T[i],S[i])&amp;lt;/math&amp;gt;. As described above, this is the new &amp;quot;most advanced candidate&amp;quot;, so the new value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is correct.&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
'''Statement:''' The worst-case complexity is in &amp;lt;math&amp;gt;\mathcal{O}(m^3 * |\Sigma | + n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' The first summand results from Step 4 of the induction basis. In fact, for each &amp;lt;math&amp;gt;j \in \{ 1,...,m\}&amp;lt;/math&amp;gt; and each &amp;lt;math&amp;gt;c \in \Sigma&amp;lt;/math&amp;gt;, the value of &amp;lt;math&amp;gt;\Delta [q,c]&amp;lt;/math&amp;gt; is to be computed. The countdown to compute &amp;lt;math&amp;gt;\Delta [q,c]&amp;lt;/math&amp;gt; takes at most &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; iterations. Finally, for the comparison of the two substrings within one step of the countdown, at most &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; pairs of characters have to be compared.&lt;br /&gt;
&lt;br /&gt;
The second summand is the asymptotic complexity of the main loop: the number of iterations is at most &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, and each iteration takes constant time.&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;br /&gt;
There is a more sophisticated approach to computing &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;, which results in &amp;lt;math&amp;gt;\mathcal{O}(m*|\Sigma |)&amp;lt;/math&amp;gt; worst-case complexity&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=542</id>
		<title>String matching based on finite automaton</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=542"/>
		<updated>2014-10-01T14:08:01Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Further information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[One-dimensional string matching]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop &lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data:'''&lt;br /&gt;
# A current '''maximum prefix length''' &amp;lt;math&amp;gt;q\in \{ 0,...,m\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
# A look-up table &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; with rows &amp;lt;math&amp;gt;\{ 0,...,m\}&amp;lt;/math&amp;gt; and one column for each character in the alphabet &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;. Intended semantics: The value &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; is the length of the longest [[Strings|prefix]] of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; that is also a [[Strings|suffix]] of &amp;lt;math&amp;gt;(T[1],...,T[j],c)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' After &amp;lt;math&amp;gt;i \ge 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie completely in &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt;; in other words, the start indexes in the range &amp;lt;math&amp;gt;(1,...,i-m+1])&amp;lt;/math&amp;gt;.&lt;br /&gt;
# The value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is the largest value &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])=(T[1],...,T[k])&amp;lt;/math&amp;gt;.&lt;br /&gt;
To understand the rationale of the second invariant, note that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])=(T[1],...,T[k])&amp;lt;/math&amp;gt; is equivalent to the informal statement that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])&amp;lt;/math&amp;gt; is a candidate for an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. In particular, &amp;lt;math&amp;gt;i-q+1&amp;lt;/math&amp;gt; is always the &amp;quot;most advanced&amp;quot; candidate (and &amp;lt;math&amp;gt;q=0&amp;lt;/math&amp;gt; means that, at the moment, there is no candidate at all).&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; increases by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' &amp;lt;math&amp;gt;i=n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; is empty.&lt;br /&gt;
# The initial value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is zero.&lt;br /&gt;
# The look-up table &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; must be built.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# Set &amp;lt;math&amp;gt;R:=\emptyset&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;q:=0&amp;lt;/math&amp;gt;.&lt;br /&gt;
# For &amp;lt;math&amp;gt;c\in \Sigma&amp;lt;/math&amp;gt;: If &amp;lt;math&amp;gt;T[1]=c&amp;lt;/math&amp;gt;, set &amp;lt;math&amp;gt;\Delta [0,c]:=1&amp;lt;/math&amp;gt;; otherwise, set &amp;lt;math&amp;gt;\Delta[0,c]:=0&amp;lt;/math&amp;gt;.&lt;br /&gt;
# For &amp;lt;math&amp;gt;j\in \{ 1,...,m\}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;c \in \Sigma&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Set &amp;lt;math&amp;gt;k:=\min \{ m,j+1 \}&amp;lt;/math&amp;gt;.&lt;br /&gt;
## While &amp;lt;math&amp;gt;k&amp;gt;0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;(T[1],...,T[k]) \neq (T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;, decrease &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
## Set &amp;lt;math&amp;gt;\Delta[j,c]:=k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Nothing is to show for &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;, so consider &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;. We have to show that the above-described intended semantics of &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; is indeed fulfilled, because these intended semantics of &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; will be the basis for the correctness proof of the induction step.&lt;br /&gt;
&lt;br /&gt;
Correctness of Step 3 is also easy to see, so consider Step 4.&lt;br /&gt;
&lt;br /&gt;
According to its intended semantics, &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; can neither be larger than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; nor larger than &amp;lt;math&amp;gt;j+1&amp;lt;/math&amp;gt;; in fact, any string longer than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; is not a prefix of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, and any string longer than &amp;lt;math&amp;gt;j+1&amp;lt;/math&amp;gt; is not a suffix of &amp;lt;math&amp;gt;(T[1],...,T[j],c)&amp;lt;/math&amp;gt;. This observation justifies the initialization of &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; in Step 4.1.&lt;br /&gt;
&lt;br /&gt;
Now, the countdown of &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; in Step 4.2 will terminate at the moment when, for the first time, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; fulfills &amp;lt;math&amp;gt;(T[1],...,T[k])=(T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;. Note that this equality is tantamount to the statement that the prefix &amp;lt;math&amp;gt;(T[1],...,T[k])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; is a suffix of &amp;lt;math&amp;gt;(T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;. Due to the countdown, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; is largest, so &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; conforms to its intended semantics. On the other hand, if the countdown terminates with &amp;lt;math&amp;gt;k=0&amp;lt;/math&amp;gt;, there was no such non-empty substring, so it is &amp;lt;math&amp;gt;\Delta [j,c]=0&amp;lt;/math&amp;gt;, which conforms to the intended semantics in this case as well.&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# The current maximum prefix length &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is to be updated to reflect the situation after reading &amp;lt;math&amp;gt;S[i]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# If &amp;lt;math&amp;gt;q=m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; completes an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, so the start index of this occurrence is to be appended to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# Set &amp;lt;math&amp;gt;q:=\Delta [q,S[i]]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# If &amp;lt;math&amp;gt;q=m&amp;lt;/math&amp;gt;, append &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Correctness:''' If the invariant on &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is maintained by Step 1, it is &amp;lt;math&amp;gt;q=m&amp;lt;/math&amp;gt; if, and only if, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; is the last index of an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. This proves correctness of Step 2 and thus maintenance of the first invariant, provided maintenance of the second invariant (the invariant on &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;) is proved. So it remains to show that the invariant on &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is indeed maintained.&lt;br /&gt;
&lt;br /&gt;
Recall that the correctness proof of the induction basis has proved that &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; fulfills the intended semantics as described above. Therefore, the new value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; after the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-th iteration is the largest length &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; of a prefix &amp;lt;math&amp;gt;(T[1],...,T[k]&amp;lt;/math&amp;gt; that is identical to &amp;lt;math&amp;gt;(T[i-k+2],...,T[i],S[i])&amp;lt;/math&amp;gt;. As described above, this is the new &amp;quot;most advanced candidate&amp;quot;, so the new value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is correct.&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
'''Statement:''' The worst-case complexity is in &amp;lt;math&amp;gt;\mathcal{O}(m^3 * |\Sigma | + n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' The first summand results from Step 4 of the induction basis. In fact, for each &amp;lt;math&amp;gt;j \in \{ 1,...,m\}&amp;lt;/math&amp;gt; and each &amp;lt;math&amp;gt;c \in \Sigma&amp;lt;/math&amp;gt;, the value of &amp;lt;math&amp;gt;\Delta [q,c]&amp;lt;/math&amp;gt; is to be computed. The countdown to compute &amp;lt;math&amp;gt;\Delta [q,c]&amp;lt;/math&amp;gt; takes at most &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; iterations. Finally, for the comparison of the two substrings within one step of the countdown, at most &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; pairs of characters have to be compared.&lt;br /&gt;
&lt;br /&gt;
The second summand is the asymptotic complexity of the main loop: the number of iterations is at most &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, and each iteration takes constant time.&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;br /&gt;
There is a more sophisticated approach to computing &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;, which results in &amp;lt;math&amp;gt;\mathcal{O}(m*|\Sigma |)&amp;lt;/math&amp;gt; worst-case complexity&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=541</id>
		<title>String matching based on finite automaton</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=541"/>
		<updated>2014-10-01T14:06:31Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Complexity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[One-dimensional string matching]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop &lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data:'''&lt;br /&gt;
# A current '''maximum prefix length''' &amp;lt;math&amp;gt;q\in \{ 0,...,m\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
# A look-up table &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; with rows &amp;lt;math&amp;gt;\{ 0,...,m\}&amp;lt;/math&amp;gt; and one column for each character in the alphabet &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;. Intended semantics: The value &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; is the length of the longest [[Strings|prefix]] of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; that is also a [[Strings|suffix]] of &amp;lt;math&amp;gt;(T[1],...,T[j],c)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' After &amp;lt;math&amp;gt;i \ge 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie completely in &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt;; in other words, the start indexes in the range &amp;lt;math&amp;gt;(1,...,i-m+1])&amp;lt;/math&amp;gt;.&lt;br /&gt;
# The value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is the largest value &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])=(T[1],...,T[k])&amp;lt;/math&amp;gt;.&lt;br /&gt;
To understand the rationale of the second invariant, note that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])=(T[1],...,T[k])&amp;lt;/math&amp;gt; is equivalent to the informal statement that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])&amp;lt;/math&amp;gt; is a candidate for an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. In particular, &amp;lt;math&amp;gt;i-q+1&amp;lt;/math&amp;gt; is always the &amp;quot;most advanced&amp;quot; candidate (and &amp;lt;math&amp;gt;q=0&amp;lt;/math&amp;gt; means that, at the moment, there is no candidate at all).&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; increases by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' &amp;lt;math&amp;gt;i=n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; is empty.&lt;br /&gt;
# The initial value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is zero.&lt;br /&gt;
# The look-up table &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; must be built.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# Set &amp;lt;math&amp;gt;R:=\emptyset&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;q:=0&amp;lt;/math&amp;gt;.&lt;br /&gt;
# For &amp;lt;math&amp;gt;c\in \Sigma&amp;lt;/math&amp;gt;: If &amp;lt;math&amp;gt;T[1]=c&amp;lt;/math&amp;gt;, set &amp;lt;math&amp;gt;\Delta [0,c]:=1&amp;lt;/math&amp;gt;; otherwise, set &amp;lt;math&amp;gt;\Delta[0,c]:=0&amp;lt;/math&amp;gt;.&lt;br /&gt;
# For &amp;lt;math&amp;gt;j\in \{ 1,...,m\}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;c \in \Sigma&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Set &amp;lt;math&amp;gt;k:=\min \{ m,j+1 \}&amp;lt;/math&amp;gt;.&lt;br /&gt;
## While &amp;lt;math&amp;gt;k&amp;gt;0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;(T[1],...,T[k]) \neq (T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;, decrease &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
## Set &amp;lt;math&amp;gt;\Delta[j,c]:=k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Nothing is to show for &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;, so consider &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;. We have to show that the above-described intended semantics of &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; is indeed fulfilled, because these intended semantics of &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; will be the basis for the correctness proof of the induction step.&lt;br /&gt;
&lt;br /&gt;
Correctness of Step 3 is also easy to see, so consider Step 4.&lt;br /&gt;
&lt;br /&gt;
According to its intended semantics, &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; can neither be larger than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; nor larger than &amp;lt;math&amp;gt;j+1&amp;lt;/math&amp;gt;; in fact, any string longer than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; is not a prefix of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, and any string longer than &amp;lt;math&amp;gt;j+1&amp;lt;/math&amp;gt; is not a suffix of &amp;lt;math&amp;gt;(T[1],...,T[j],c)&amp;lt;/math&amp;gt;. This observation justifies the initialization of &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; in Step 4.1.&lt;br /&gt;
&lt;br /&gt;
Now, the countdown of &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; in Step 4.2 will terminate at the moment when, for the first time, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; fulfills &amp;lt;math&amp;gt;(T[1],...,T[k])=(T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;. Note that this equality is tantamount to the statement that the prefix &amp;lt;math&amp;gt;(T[1],...,T[k])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; is a suffix of &amp;lt;math&amp;gt;(T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;. Due to the countdown, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; is largest, so &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; conforms to its intended semantics. On the other hand, if the countdown terminates with &amp;lt;math&amp;gt;k=0&amp;lt;/math&amp;gt;, there was no such non-empty substring, so it is &amp;lt;math&amp;gt;\Delta [j,c]=0&amp;lt;/math&amp;gt;, which conforms to the intended semantics in this case as well.&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# The current maximum prefix length &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is to be updated to reflect the situation after reading &amp;lt;math&amp;gt;S[i]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# If &amp;lt;math&amp;gt;q=m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; completes an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, so the start index of this occurrence is to be appended to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# Set &amp;lt;math&amp;gt;q:=\Delta [q,S[i]]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# If &amp;lt;math&amp;gt;q=m&amp;lt;/math&amp;gt;, append &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Correctness:''' If the invariant on &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is maintained by Step 1, it is &amp;lt;math&amp;gt;q=m&amp;lt;/math&amp;gt; if, and only if, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; is the last index of an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. This proves correctness of Step 2 and thus maintenance of the first invariant, provided maintenance of the second invariant (the invariant on &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;) is proved. So it remains to show that the invariant on &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is indeed maintained.&lt;br /&gt;
&lt;br /&gt;
Recall that the correctness proof of the induction basis has proved that &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; fulfills the intended semantics as described above. Therefore, the new value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; after the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-th iteration is the largest length &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; of a prefix &amp;lt;math&amp;gt;(T[1],...,T[k]&amp;lt;/math&amp;gt; that is identical to &amp;lt;math&amp;gt;(T[i-k+2],...,T[i],S[i])&amp;lt;/math&amp;gt;. As described above, this is the new &amp;quot;most advanced candidate&amp;quot;, so the new value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is correct.&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
'''Statement:''' The worst-case complexity is in &amp;lt;math&amp;gt;\mathcal{O}(m^3 * |\Sigma | + n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' The first summand results from Step 4 of the induction basis. In fact, for each &amp;lt;math&amp;gt;j \in \{ 1,...,m\}&amp;lt;/math&amp;gt; and each &amp;lt;math&amp;gt;c \in \Sigma&amp;lt;/math&amp;gt;, the value of &amp;lt;math&amp;gt;\Delta [q,c]&amp;lt;/math&amp;gt; is to be computed. The countdown to compute &amp;lt;math&amp;gt;\Delta [q,c]&amp;lt;/math&amp;gt; takes at most &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; iterations. Finally, for the comparison of the two substrings within one step of the countdown, at most &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; pairs of characters have to be compared.&lt;br /&gt;
&lt;br /&gt;
The second summand is the asymptotic complexity of the main loop: the number of iterations is at most &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, and each iteration takes constant time.&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=540</id>
		<title>String matching based on finite automaton</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=540"/>
		<updated>2014-10-01T14:00:50Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Induction step */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[One-dimensional string matching]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop &lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data:'''&lt;br /&gt;
# A current '''maximum prefix length''' &amp;lt;math&amp;gt;q\in \{ 0,...,m\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
# A look-up table &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; with rows &amp;lt;math&amp;gt;\{ 0,...,m\}&amp;lt;/math&amp;gt; and one column for each character in the alphabet &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;. Intended semantics: The value &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; is the length of the longest [[Strings|prefix]] of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; that is also a [[Strings|suffix]] of &amp;lt;math&amp;gt;(T[1],...,T[j],c)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' After &amp;lt;math&amp;gt;i \ge 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie completely in &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt;; in other words, the start indexes in the range &amp;lt;math&amp;gt;(1,...,i-m+1])&amp;lt;/math&amp;gt;.&lt;br /&gt;
# The value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is the largest value &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])=(T[1],...,T[k])&amp;lt;/math&amp;gt;.&lt;br /&gt;
To understand the rationale of the second invariant, note that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])=(T[1],...,T[k])&amp;lt;/math&amp;gt; is equivalent to the informal statement that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])&amp;lt;/math&amp;gt; is a candidate for an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. In particular, &amp;lt;math&amp;gt;i-q+1&amp;lt;/math&amp;gt; is always the &amp;quot;most advanced&amp;quot; candidate (and &amp;lt;math&amp;gt;q=0&amp;lt;/math&amp;gt; means that, at the moment, there is no candidate at all).&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; increases by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' &amp;lt;math&amp;gt;i=n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; is empty.&lt;br /&gt;
# The initial value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is zero.&lt;br /&gt;
# The look-up table &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; must be built.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# Set &amp;lt;math&amp;gt;R:=\emptyset&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;q:=0&amp;lt;/math&amp;gt;.&lt;br /&gt;
# For &amp;lt;math&amp;gt;c\in \Sigma&amp;lt;/math&amp;gt;: If &amp;lt;math&amp;gt;T[1]=c&amp;lt;/math&amp;gt;, set &amp;lt;math&amp;gt;\Delta [0,c]:=1&amp;lt;/math&amp;gt;; otherwise, set &amp;lt;math&amp;gt;\Delta[0,c]:=0&amp;lt;/math&amp;gt;.&lt;br /&gt;
# For &amp;lt;math&amp;gt;j\in \{ 1,...,m\}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;c \in \Sigma&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Set &amp;lt;math&amp;gt;k:=\min \{ m,j+1 \}&amp;lt;/math&amp;gt;.&lt;br /&gt;
## While &amp;lt;math&amp;gt;k&amp;gt;0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;(T[1],...,T[k]) \neq (T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;, decrease &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
## Set &amp;lt;math&amp;gt;\Delta[j,c]:=k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Nothing is to show for &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;, so consider &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;. We have to show that the above-described intended semantics of &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; is indeed fulfilled, because these intended semantics of &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; will be the basis for the correctness proof of the induction step.&lt;br /&gt;
&lt;br /&gt;
Correctness of Step 3 is also easy to see, so consider Step 4.&lt;br /&gt;
&lt;br /&gt;
According to its intended semantics, &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; can neither be larger than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; nor larger than &amp;lt;math&amp;gt;j+1&amp;lt;/math&amp;gt;; in fact, any string longer than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; is not a prefix of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, and any string longer than &amp;lt;math&amp;gt;j+1&amp;lt;/math&amp;gt; is not a suffix of &amp;lt;math&amp;gt;(T[1],...,T[j],c)&amp;lt;/math&amp;gt;. This observation justifies the initialization of &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; in Step 4.1.&lt;br /&gt;
&lt;br /&gt;
Now, the countdown of &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; in Step 4.2 will terminate at the moment when, for the first time, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; fulfills &amp;lt;math&amp;gt;(T[1],...,T[k])=(T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;. Note that this equality is tantamount to the statement that the prefix &amp;lt;math&amp;gt;(T[1],...,T[k])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; is a suffix of &amp;lt;math&amp;gt;(T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;. Due to the countdown, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; is largest, so &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; conforms to its intended semantics. On the other hand, if the countdown terminates with &amp;lt;math&amp;gt;k=0&amp;lt;/math&amp;gt;, there was no such non-empty substring, so it is &amp;lt;math&amp;gt;\Delta [j,c]=0&amp;lt;/math&amp;gt;, which conforms to the intended semantics in this case as well.&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# The current maximum prefix length &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is to be updated to reflect the situation after reading &amp;lt;math&amp;gt;S[i]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# If &amp;lt;math&amp;gt;q=m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; completes an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, so the start index of this occurrence is to be appended to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# Set &amp;lt;math&amp;gt;q:=\Delta [q,S[i]]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# If &amp;lt;math&amp;gt;q=m&amp;lt;/math&amp;gt;, append &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Correctness:''' If the invariant on &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is maintained by Step 1, it is &amp;lt;math&amp;gt;q=m&amp;lt;/math&amp;gt; if, and only if, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; is the last index of an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. This proves correctness of Step 2 and thus maintenance of the first invariant, provided maintenance of the second invariant (the invariant on &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;) is proved. So it remains to show that the invariant on &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is indeed maintained.&lt;br /&gt;
&lt;br /&gt;
Recall that the correctness proof of the induction basis has proved that &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; fulfills the intended semantics as described above. Therefore, the new value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; after the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-th iteration is the largest length &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; of a prefix &amp;lt;math&amp;gt;(T[1],...,T[k]&amp;lt;/math&amp;gt; that is identical to &amp;lt;math&amp;gt;(T[i-k+2],...,T[i],S[i])&amp;lt;/math&amp;gt;. As described above, this is the new &amp;quot;most advanced candidate&amp;quot;, so the new value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is correct.&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=539</id>
		<title>String matching based on finite automaton</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=539"/>
		<updated>2014-10-01T13:51:21Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Induction basis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[One-dimensional string matching]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop &lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data:'''&lt;br /&gt;
# A current '''maximum prefix length''' &amp;lt;math&amp;gt;q\in \{ 0,...,m\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
# A look-up table &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; with rows &amp;lt;math&amp;gt;\{ 0,...,m\}&amp;lt;/math&amp;gt; and one column for each character in the alphabet &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;. Intended semantics: The value &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; is the length of the longest [[Strings|prefix]] of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; that is also a [[Strings|suffix]] of &amp;lt;math&amp;gt;(T[1],...,T[j],c)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' After &amp;lt;math&amp;gt;i \ge 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie completely in &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt;; in other words, the start indexes in the range &amp;lt;math&amp;gt;(1,...,i-m+1])&amp;lt;/math&amp;gt;.&lt;br /&gt;
# The value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is the largest value &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])=(T[1],...,T[k])&amp;lt;/math&amp;gt;.&lt;br /&gt;
To understand the rationale of the second invariant, note that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])=(T[1],...,T[k])&amp;lt;/math&amp;gt; is equivalent to the informal statement that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])&amp;lt;/math&amp;gt; is a candidate for an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. In particular, &amp;lt;math&amp;gt;i-q+1&amp;lt;/math&amp;gt; is always the &amp;quot;most advanced&amp;quot; candidate (and &amp;lt;math&amp;gt;q=0&amp;lt;/math&amp;gt; means that, at the moment, there is no candidate at all).&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; increases by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' &amp;lt;math&amp;gt;i=n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; is empty.&lt;br /&gt;
# The initial value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is zero.&lt;br /&gt;
# The look-up table &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; must be built.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# Set &amp;lt;math&amp;gt;R:=\emptyset&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;q:=0&amp;lt;/math&amp;gt;.&lt;br /&gt;
# For &amp;lt;math&amp;gt;c\in \Sigma&amp;lt;/math&amp;gt;: If &amp;lt;math&amp;gt;T[1]=c&amp;lt;/math&amp;gt;, set &amp;lt;math&amp;gt;\Delta [0,c]:=1&amp;lt;/math&amp;gt;; otherwise, set &amp;lt;math&amp;gt;\Delta[0,c]:=0&amp;lt;/math&amp;gt;.&lt;br /&gt;
# For &amp;lt;math&amp;gt;j\in \{ 1,...,m\}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;c \in \Sigma&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Set &amp;lt;math&amp;gt;k:=\min \{ m,j+1 \}&amp;lt;/math&amp;gt;.&lt;br /&gt;
## While &amp;lt;math&amp;gt;k&amp;gt;0&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;(T[1],...,T[k]) \neq (T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;, decrease &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
## Set &amp;lt;math&amp;gt;\Delta[j,c]:=k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Nothing is to show for &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;, so consider &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;. We have to show that the above-described intended semantics of &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; is indeed fulfilled, because these intended semantics of &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; will be the basis for the correctness proof of the induction step.&lt;br /&gt;
&lt;br /&gt;
Correctness of Step 3 is also easy to see, so consider Step 4.&lt;br /&gt;
&lt;br /&gt;
According to its intended semantics, &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; can neither be larger than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; nor larger than &amp;lt;math&amp;gt;j+1&amp;lt;/math&amp;gt;; in fact, any string longer than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; is not a prefix of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, and any string longer than &amp;lt;math&amp;gt;j+1&amp;lt;/math&amp;gt; is not a suffix of &amp;lt;math&amp;gt;(T[1],...,T[j],c)&amp;lt;/math&amp;gt;. This observation justifies the initialization of &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; in Step 4.1.&lt;br /&gt;
&lt;br /&gt;
Now, the countdown of &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; in Step 4.2 will terminate at the moment when, for the first time, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; fulfills &amp;lt;math&amp;gt;(T[1],...,T[k])=(T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;. Note that this equality is tantamount to the statement that the prefix &amp;lt;math&amp;gt;(T[1],...,T[k])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; is a suffix of &amp;lt;math&amp;gt;(T[j-k+2],...,T[j],c)&amp;lt;/math&amp;gt;. Due to the countdown, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; is largest, so &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; conforms to its intended semantics. On the other hand, if the countdown terminates with &amp;lt;math&amp;gt;k=0&amp;lt;/math&amp;gt;, there was no such non-empty substring, so it is &amp;lt;math&amp;gt;\Delta [j,c]=0&amp;lt;/math&amp;gt;, which conforms to the intended semantics in this case as well.&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=538</id>
		<title>String matching based on finite automaton</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=538"/>
		<updated>2014-10-01T13:23:30Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[One-dimensional string matching]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop &lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data:'''&lt;br /&gt;
# A current '''maximum prefix length''' &amp;lt;math&amp;gt;q\in \{ 0,...,m\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
# A look-up table &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; with rows &amp;lt;math&amp;gt;\{ 0,...,m\}&amp;lt;/math&amp;gt; and one column for each character in the alphabet &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;. Intended semantics: The value &amp;lt;math&amp;gt;\Delta [j,c]&amp;lt;/math&amp;gt; is the length of the longest [[Strings|prefix]] of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; that is also a [[Strings|suffix]] of &amp;lt;math&amp;gt;(T[1],...,T[j],c)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' After &amp;lt;math&amp;gt;i \ge 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie completely in &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt;; in other words, the start indexes in the range &amp;lt;math&amp;gt;(1,...,i-m+1])&amp;lt;/math&amp;gt;.&lt;br /&gt;
# The value of &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; is the largest value &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])=(T[1],...,T[k])&amp;lt;/math&amp;gt;.&lt;br /&gt;
To understand the rationale of the second invariant, note that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])=(T[1],...,T[k])&amp;lt;/math&amp;gt; is equivalent to the informal statement that &amp;lt;math&amp;gt;(S[i-k+1],...,S[i])&amp;lt;/math&amp;gt; is a candidate for an occurrence of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. In particular, &amp;lt;math&amp;gt;i-q+1&amp;lt;/math&amp;gt; is always the &amp;quot;most advanced&amp;quot; candidate (and &amp;lt;math&amp;gt;q=0&amp;lt;/math&amp;gt; means that, at the moment, there is no candidate at all).&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; increases by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' &amp;lt;math&amp;gt;i=n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=537</id>
		<title>String matching based on finite automaton</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=String_matching_based_on_finite_automaton&amp;diff=537"/>
		<updated>2014-10-01T13:04:38Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[One-dimensional string matching]]&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:'''&lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data:'''&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=536</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Main_Page&amp;diff=536"/>
		<updated>2014-10-01T10:31:55Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* String Matching Algorithms */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
* &amp;lt;math&amp;gt;LaTeX&amp;lt;/math&amp;gt; [http://www.mediawiki.org/wiki/Manual:Math available now!]&lt;br /&gt;
* ToDo List added&lt;br /&gt;
* Every content has to be in English!&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi Syntaxhighlight]&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
* Add finalized reconstructions of the old Wiki to Category:Checkup.&lt;br /&gt;
* Don't any non-Weihe content until the reconstructions isn't finished.&lt;br /&gt;
* Keep your active reconstructing Pages in &amp;quot;Division of labor&amp;quot; section up to date!&lt;br /&gt;
&lt;br /&gt;
== Divison of labor ==&lt;br /&gt;
* Fabio Cuozzo - Heaps&lt;br /&gt;
* Daniel Kratschmann - Problems&lt;br /&gt;
* Jan Hohmann - B-Tree&lt;br /&gt;
* Jan Rathjens - Ford-Fulkerson&lt;br /&gt;
* Thomas Lautenschläger - ???&lt;br /&gt;
&lt;br /&gt;
== Page Status ==&lt;br /&gt;
Final: [[:Category:Checkup]]&lt;br /&gt;
&lt;br /&gt;
== To Do ==&lt;br /&gt;
=== Notations ===&lt;br /&gt;
* [[Asymptotic notation]]&lt;br /&gt;
* [[L' Hospital]]&lt;br /&gt;
* [[Master theorem]]&lt;br /&gt;
=== Problems ===&lt;br /&gt;
* [[Maximum matching problem]]&lt;br /&gt;
* [[Max-Flow Problems]]&lt;br /&gt;
* [[Min-Cost Flow Problems]]&lt;br /&gt;
* [[Shortest Paths Problems]]&lt;br /&gt;
** [[All pairs shortest paths]]&lt;br /&gt;
*** [[Floyd-Warshall]]&lt;br /&gt;
*** [[Bellman-Ford]]&lt;br /&gt;
*** [[Shortest paths by repeated squaring]] (variant of Bellman-Ford) &lt;br /&gt;
** [[Single source shortest paths]]&lt;br /&gt;
*** [[Dijkstra]]&lt;br /&gt;
** [[Single source single target shortest paths]]&lt;br /&gt;
*** [[A*]]&lt;br /&gt;
* [[Maximum spanning forest]]&lt;br /&gt;
* [[Problems on Sequences]]&lt;br /&gt;
** [[Basic Problems on Sequences]]&lt;br /&gt;
*** [[Find an element in a sequence]]&lt;br /&gt;
*** [[Insert an element in a sequence]]&lt;br /&gt;
*** [[Median]]&lt;br /&gt;
*** [[Merging two sorted sequences]]&lt;br /&gt;
** [[Pattern Matching]]&lt;br /&gt;
*** [[One-dimensional string matching]]&lt;br /&gt;
*** [[String matching]]&lt;br /&gt;
** [[Sorting]]&lt;br /&gt;
*** [[Sorting based on pairwise comparison]]&lt;br /&gt;
*** [[Sorting Sequences of Strings]]&lt;br /&gt;
&lt;br /&gt;
=== Coding Basics ===&lt;br /&gt;
* [[Heritage]]&lt;br /&gt;
* [[Generics]]&lt;br /&gt;
* [[Collections]]&lt;br /&gt;
** [[Iterator]]&lt;br /&gt;
** [[Comparator]]&lt;br /&gt;
&lt;br /&gt;
=== String Matching Algorithms ===&lt;br /&gt;
* [[Simple string matching algorithm]] (DONE)&lt;br /&gt;
* [[String matching based on finite automaton]]&lt;br /&gt;
&lt;br /&gt;
=== Sorting Algorithms ===&lt;br /&gt;
* [[Bubble]]&lt;br /&gt;
* [[Insertion Sort]]&lt;br /&gt;
* [[Quick Sort]]&lt;br /&gt;
* [[Bubble Sort]]&lt;br /&gt;
* [[Merge Sort]]&lt;br /&gt;
* [[Bucket Sort]]&lt;br /&gt;
* [[Selection Sort]]&lt;br /&gt;
* [[Bogo Sort]]&lt;br /&gt;
&lt;br /&gt;
=== Search Algorithms ===&lt;br /&gt;
* [[Binary Search]]&lt;br /&gt;
&lt;br /&gt;
=== Tree Algorithms ===&lt;br /&gt;
* [[Depth-First Search]]&lt;br /&gt;
* [[Breadth-First Search]]&lt;br /&gt;
* [[B-Tree:Find]]&lt;br /&gt;
* [[B-Tree:Minimum]]&lt;br /&gt;
* [[B-Tree:Maximum]]&lt;br /&gt;
* [[B-Tree:Insert]]&lt;br /&gt;
* [[B-Tree:Insert and Rearrange]]&lt;br /&gt;
* [[B-Tree:merge two Siblings]]&lt;br /&gt;
* [[B-Tree:Remove]]&lt;br /&gt;
* [[B-Tree:Shift Key to Sibling]]&lt;br /&gt;
* [[B-Tree:Rotate]]&lt;br /&gt;
* [[B-Tree:Merge]]&lt;br /&gt;
* [[B-Tree:Split-Child]]&lt;br /&gt;
* [[Binary Search Tree:Find]]&lt;br /&gt;
* [[Binary Search Tree:Minimum]]&lt;br /&gt;
* [[Binary Search Tree:Maximum]]&lt;br /&gt;
* [[Binary Search Tree:Insert]]&lt;br /&gt;
* [[Binary Search Tree:Remove]]&lt;br /&gt;
* [[Binary Search Tree:Remove node]]&lt;br /&gt;
* [[Binary Search Tree:Traverse]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Theory ===&lt;br /&gt;
* [[Directed Graph]]&lt;br /&gt;
* [[Bipartite Graph]]&lt;br /&gt;
* [[k-partite Graph]]&lt;br /&gt;
* [[Negative Paths]]&lt;br /&gt;
&lt;br /&gt;
=== Graph Algorithms ===&lt;br /&gt;
* [[Dijkstra]]&lt;br /&gt;
* [[Kruskal]]&lt;br /&gt;
* [[Prim]]&lt;br /&gt;
* [[Bellman-Ford]]&lt;br /&gt;
* [[Floyd-Warshall]]&lt;br /&gt;
* [[Union Find]]&lt;br /&gt;
* [[A*]]&lt;br /&gt;
* [[Alternating paths algorithm]]&lt;br /&gt;
* [[Johnson]]&lt;br /&gt;
&lt;br /&gt;
=== Flow Algorithms ===&lt;br /&gt;
* [[Ford-Fulkerson]]&lt;br /&gt;
=== Data Structures ===&lt;br /&gt;
* [[Linked List]]&lt;br /&gt;
* [[Array List]]&lt;br /&gt;
* [[First In - First Out]]&lt;br /&gt;
* [[First In - Ieast Out]]&lt;br /&gt;
* [[Double Linked List]]&lt;br /&gt;
* [[Heaps]] (DONE (Heap as Array))&lt;br /&gt;
* [[Min-Max Heaps]]&lt;br /&gt;
* [[Hash Table]]&lt;br /&gt;
* [[Directed Tree]]&lt;br /&gt;
* [[Binary Search Tree]]&lt;br /&gt;
* [[B-Trees]]&lt;br /&gt;
* [[Decision Tree]]&lt;br /&gt;
* [[Red-Black Tree]]&lt;br /&gt;
* [[Graphs]]&lt;br /&gt;
&lt;br /&gt;
=== Other Algorithms (LOCKED) ===&lt;br /&gt;
* [[B*]]&lt;br /&gt;
* [[Cyclic Redundancy Check]]&lt;br /&gt;
* [[Eulcid]]&lt;br /&gt;
* [[Gauss]]&lt;br /&gt;
* [[Discrete Fourier transform]]&lt;br /&gt;
* [[Fast Fourier transform]]&lt;br /&gt;
* [[Bresenham]]&lt;br /&gt;
* [[Round Robin]]&lt;br /&gt;
* [[Seperate and Conquer]]&lt;br /&gt;
* [[Message-Digest Algorithm]]&lt;br /&gt;
* [[Secure Hash Algorithm]]&lt;br /&gt;
* [[Sequent calculus]]&lt;br /&gt;
* [[Resolution calculus]]&lt;br /&gt;
* [[Cocke-Younger-Kasami Algorithm]]&lt;br /&gt;
* [[Distance Vector Routing]]&lt;br /&gt;
* [[Link State Round]]&lt;br /&gt;
* [[Z Buffer Algorithm]]&lt;br /&gt;
* [[Marching Squares]]&lt;br /&gt;
* [[Marching Cubes]]&lt;br /&gt;
* [[Bottom-Up Heapsort]]&lt;br /&gt;
* [[Radixsort]]&lt;br /&gt;
* [[Median Cut]]&lt;br /&gt;
* [[Pancake sorting]]&lt;br /&gt;
* [[Karnaugh-Veitch Diagramm]]&lt;br /&gt;
* [[Delanuay Triangulation]]&lt;br /&gt;
* [[Backtracking]]&lt;br /&gt;
* [[Alpha–beta pruning]]&lt;br /&gt;
* [[Beam search]]&lt;br /&gt;
* [[Best-first search]]&lt;br /&gt;
* [[Bidirectional search]]&lt;br /&gt;
* [[Borůvka's algorithm]]&lt;br /&gt;
* [[Branch and bound]]&lt;br /&gt;
* [[D*]]&lt;br /&gt;
* [[Depth-limited search]]&lt;br /&gt;
* [[Edmonds' algorithm]]&lt;br /&gt;
* [[Fringe search]]&lt;br /&gt;
* [[Hill climbing]]&lt;br /&gt;
* [[IDA*]]&lt;br /&gt;
* [[Iterative deepening depth-first search]]&lt;br /&gt;
* [[Jump point search]]&lt;br /&gt;
* [[Lexicographic breadth-first search]]&lt;br /&gt;
* [[SMA*]]&lt;br /&gt;
* [[Uniform-cost search]]&lt;br /&gt;
&lt;br /&gt;
=== Other Data Structures (LOCKED) ===&lt;br /&gt;
* [[Adelson-Velskii and Landis' tree]]&lt;br /&gt;
* [[Patricia-Trie]]&lt;br /&gt;
* [[Suffix Tree]]&lt;br /&gt;
* [[Huffmann Tree]]&lt;br /&gt;
* [[Binary Expression Tree]]&lt;br /&gt;
* [[Hash Set]]&lt;br /&gt;
* [[Incidence Matrix]]&lt;br /&gt;
* [[Voronoi Diagramm]]&lt;br /&gt;
* [[Quad Tree]]&lt;br /&gt;
* [[Oct Tree]]&lt;br /&gt;
* [[kd Tree]]&lt;br /&gt;
* [[Binary space partitioning]]&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Simple_string_matching_algorithm&amp;diff=535</id>
		<title>Simple string matching algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Simple_string_matching_algorithm&amp;diff=535"/>
		<updated>2014-10-01T10:31:03Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[One-dimensional string matching]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop&lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data''' A [[FIFO queue]] &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; of natural numbers, which always contains the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that have been seen only partially thus far.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' After &amp;lt;math&amp;gt;i\ge 0&amp;lt;/math&amp;gt; iterations:&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains exactly the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie completely in the substring &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. In other words, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains the start indexes in the range &amp;lt;math&amp;gt;S[1],...,S[i-m+1]&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; is the length of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;.&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; contains exactly the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie partially in the substring &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. In other words, &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; contains the start indexes in the range &amp;lt;math&amp;gt;S[i-m+2],...,S[i]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; increases by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' &amp;lt;math&amp;gt;i=n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
'''Abstract view:''' &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; have to be empty.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# &amp;lt;math&amp;gt;R:=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;lt;math&amp;gt;I:=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Nothing to show.&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# For each start index in &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;, we decide whether this is still a candidate after we have seen &amp;lt;math&amp;gt;S[i]&amp;lt;/math&amp;gt;. If not, we remove this start index from &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Afterwards:&lt;br /&gt;
## If &amp;lt;math&amp;gt;S[i]=T[1]&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; is a new candidate and is thus appended at the tail of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;.&lt;br /&gt;
## If start index &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; is at the head of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;, this start index is removed from &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; and appended at the tail of &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:''' Obvious.&lt;br /&gt;
&lt;br /&gt;
'''Correctness:'''&lt;br /&gt;
# Due to the second invariant, the induction hypothesis implies that all elements of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; immediately before the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-th iteration must be from the set &amp;lt;math&amp;gt;\{i-m+1,...,i-1\}&amp;lt;/math&amp;gt;. Therefore, if &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; is in &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;, it is the smallest element. Since the elements of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; are in ascending order, &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; is then at the head of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;.&lt;br /&gt;
# A start index &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; is to be dropped if, and only if, it turns out not to be a promising candidate anymore. As the induction hypothesis implies &amp;lt;math&amp;gt;(S[j],...,S[i-1])=(T[1],...,T[i-j])&amp;lt;/math&amp;gt;, this is the case if, and only if, &amp;lt;math&amp;gt;S[i]\neq T[i-j+1]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Clearly, it would be incorrect to transfer any element of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; except &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;. Thus, we are right to focus on &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; in Step 2.2. Now, &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; is in &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; if, and only if, (1) it was present immediately before the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-th iteration and (2) it has survived the first step of the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-th iteration. The induction hypothesis implies &amp;lt;math&amp;gt;(S[i-m+1],...,S[i-1])=(T[1],...,T[m-1])&amp;lt;/math&amp;gt;, so it is correct to transfer &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; if, and only if, it is &amp;lt;math&amp;gt;S[i]=T[m]&amp;lt;/math&amp;gt; as well.&lt;br /&gt;
# Clearly, it would also be incorrect to add any element to &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; except &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;. So we are right to focus on &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; in Step 2.1. Obviously, all elements of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; are less than &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, so we are also right to append &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; at the tail of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; in case &amp;lt;math&amp;gt;S[i]=T[1]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
'''Statement:''' Let &amp;lt;math&amp;gt;r\in \mathbb{N}&amp;lt;/math&amp;gt; denote the maximal number of candidates to be considered simultaneously. Then the worst-case run time is in &amp;lt;math&amp;gt;\mathcal{O}(n*r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Obviously, the first step of an iteration takes &amp;lt;math&amp;gt;\mathcal{O}(r)&amp;lt;/math&amp;gt; time, and the other steps take constant time. The loop has &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; iterations.&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Simple_string_matching_algorithm&amp;diff=534</id>
		<title>Simple string matching algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Simple_string_matching_algorithm&amp;diff=534"/>
		<updated>2014-10-01T10:29:30Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Complexity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[One-dimensional string matching]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop&lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data''' A [[FIFO queue]] &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; of natural numbers, which always contains the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that have been seen only partially thus far.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' After &amp;lt;math&amp;gt;i\ge 0&amp;lt;/math&amp;gt; iterations:&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains exactly the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie completely in the substring &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. In other words, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains the start indexes in the range &amp;lt;math&amp;gt;S[1],...,S[i-m+1]&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; is the length of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;.&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; contains exactly the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie partially in the substring &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. In other words, &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; contains the start indexes in the range &amp;lt;math&amp;gt;S[i-m+2],...,S[i]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; increases by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' &amp;lt;math&amp;gt;i=n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
'''Abstract view:''' &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; have to be empty.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# &amp;lt;math&amp;gt;R:=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;lt;math&amp;gt;I:=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Nothing to show.&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# For each start index in &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;, we decide whether this is still a candidate after we have seen &amp;lt;math&amp;gt;S[i]&amp;lt;/math&amp;gt;. If not, we remove this start index from &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Afterwards:&lt;br /&gt;
## If &amp;lt;math&amp;gt;S[i]=T[1]&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; is a new candidate and is thus appended at the tail of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;.&lt;br /&gt;
## If start index &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; is at the head of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;, this start index is removed from &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; and appended at the tail of &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:''' Obvious.&lt;br /&gt;
&lt;br /&gt;
'''Correctness:'''&lt;br /&gt;
# Due to the second invariant, the induction hypothesis implies that all elements of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; immediately before the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-th iteration must be from the set &amp;lt;math&amp;gt;\{i-m+1,...,i-1\}&amp;lt;/math&amp;gt;. Therefore, if &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; is in &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;, it is the smallest element. Since the elements of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; are in ascending order, &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; is then at the head of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;.&lt;br /&gt;
# A start index &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; is to be dropped if, and only if, it turns out not to be a promising candidate anymore. As the induction hypothesis implies &amp;lt;math&amp;gt;(S[j],...,S[i-1])=(T[1],...,T[i-j])&amp;lt;/math&amp;gt;, this is the case if, and only if, &amp;lt;math&amp;gt;S[i]\neq T[i-j+1]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Clearly, it would be incorrect to transfer any element of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; except &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;. Thus, we are right to focus on &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; in Step 2.2. Now, &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; is in &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; if, and only if, (1) it was present immediately before the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-th iteration and (2) it has survived the first step of the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-th iteration. The induction hypothesis implies &amp;lt;math&amp;gt;(S[i-m+1],...,S[i-1])=(T[1],...,T[m-1])&amp;lt;/math&amp;gt;, so it is correct to transfer &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; if, and only if, it is &amp;lt;math&amp;gt;S[i]=T[m]&amp;lt;/math&amp;gt; as well.&lt;br /&gt;
# Clearly, it would also be incorrect to add any element to &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; except &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;. So we are right to focus on &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; in Step 2.1. Obviously, all elements of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; are less than &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, so we are also right to append &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; at the tail of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; in case &amp;lt;math&amp;gt;S[i]=T[1]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
'''Statement:''' Let &amp;lt;math&amp;gt;r\in \mathbb{N}&amp;lt;/math&amp;gt; denote the maximal number of candidates to be considered simultaneously. Then the worst-case run time is in &amp;lt;math&amp;gt;\mathcal{O}(n*r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Obviously, the first step of an iteration takes &amp;lt;math&amp;gt;\mathcal{O}(r)&amp;lt;/math&amp;gt; time, and the other steps take constant time. The loop has &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; iterations.&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Simple_string_matching_algorithm&amp;diff=533</id>
		<title>Simple string matching algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Simple_string_matching_algorithm&amp;diff=533"/>
		<updated>2014-10-01T10:24:36Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Induction step */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[One-dimensional string matching]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop&lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data''' A [[FIFO queue]] &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; of natural numbers, which always contains the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that have been seen only partially thus far.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' After &amp;lt;math&amp;gt;i\ge 0&amp;lt;/math&amp;gt; iterations:&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains exactly the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie completely in the substring &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. In other words, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains the start indexes in the range &amp;lt;math&amp;gt;S[1],...,S[i-m+1]&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; is the length of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;.&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; contains exactly the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie partially in the substring &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. In other words, &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; contains the start indexes in the range &amp;lt;math&amp;gt;S[i-m+2],...,S[i]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; increases by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' &amp;lt;math&amp;gt;i=n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
'''Abstract view:''' &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; have to be empty.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# &amp;lt;math&amp;gt;R:=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;lt;math&amp;gt;I:=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Nothing to show.&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# For each start index in &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;, we decide whether this is still a candidate after we have seen &amp;lt;math&amp;gt;S[i]&amp;lt;/math&amp;gt;. If not, we remove this start index from &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Afterwards:&lt;br /&gt;
## If &amp;lt;math&amp;gt;S[i]=T[1]&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; is a new candidate and is thus appended at the tail of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;.&lt;br /&gt;
## If start index &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; is at the head of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;, this start index is removed from &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; and appended at the tail of &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:''' Obvious.&lt;br /&gt;
&lt;br /&gt;
'''Correctness:'''&lt;br /&gt;
# Due to the second invariant, the induction hypothesis implies that all elements of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; immediately before the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-th iteration must be from the set &amp;lt;math&amp;gt;\{i-m+1,...,i-1\}&amp;lt;/math&amp;gt;. Therefore, if &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; is in &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;, it is the smallest element. Since the elements of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; are in ascending order, &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; is then at the head of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt;.&lt;br /&gt;
# A start index &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; is to be dropped if, and only if, it turns out not to be a promising candidate anymore. As the induction hypothesis implies &amp;lt;math&amp;gt;(S[j],...,S[i-1])=(T[1],...,T[i-j])&amp;lt;/math&amp;gt;, this is the case if, and only if, &amp;lt;math&amp;gt;S[i]\neq T[i-j+1]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Clearly, it would be incorrect to transfer any element of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; except &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;. Thus, we are right to focus on &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; in Step 2.2. Now, &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; is in &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; if, and only if, (1) it was present immediately before the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-th iteration and (2) it has survived the first step of the &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-th iteration. The induction hypothesis implies &amp;lt;math&amp;gt;(S[i-m+1],...,S[i-1])=(T[1],...,T[m-1])&amp;lt;/math&amp;gt;, so it is correct to transfer &amp;lt;math&amp;gt;i-m+1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; if, and only if, it is &amp;lt;math&amp;gt;S[i]=T[m]&amp;lt;/math&amp;gt; as well.&lt;br /&gt;
# Clearly, it would also be incorrect to add any element to &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; except &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;. So we are right to focus on &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; in Step 2.1. Obviously, all elements of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; are less than &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, so we are also right to append &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; at the tail of &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; in case &amp;lt;math&amp;gt;S[i]=T[1]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Simple_string_matching_algorithm&amp;diff=529</id>
		<title>Simple string matching algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Simple_string_matching_algorithm&amp;diff=529"/>
		<updated>2014-10-01T10:06:00Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Induction basis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[One-dimensional string matching]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop&lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data''' A [[FIFO queue]] &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; of natural numbers, which always contains the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that have been seen only partially thus far.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' After &amp;lt;math&amp;gt;i\ge 0&amp;lt;/math&amp;gt; iterations:&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains exactly the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie completely in the substring &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. In other words, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains the start indexes in the range &amp;lt;math&amp;gt;S[1],...,S[i-m+1]&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; is the length of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;.&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; contains exactly the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie partially in the substring &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. In other words, &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; contains the start indexes in the range &amp;lt;math&amp;gt;S[i-m+2],...,S[i]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; increases by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' &amp;lt;math&amp;gt;i=n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
'''Abstract view:''' &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; have to be empty.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# &amp;lt;math&amp;gt;R:=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;lt;math&amp;gt;I:=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Nothing to show.&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Simple_string_matching_algorithm&amp;diff=528</id>
		<title>Simple string matching algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Simple_string_matching_algorithm&amp;diff=528"/>
		<updated>2014-10-01T09:59:59Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: /* Abstract view */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[One-dimensional string matching]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop&lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data''' A [[FIFO queue]] &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; of natural numbers, which always contains the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that have been seen only partially thus far.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' After &amp;lt;math&amp;gt;i\ge 0&amp;lt;/math&amp;gt; iterations:&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains exactly the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie completely in the substring &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. In other words, &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; contains the start indexes in the range &amp;lt;math&amp;gt;S[1],...,S[i-m+1]&amp;lt;/math&amp;gt;, where &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; is the length of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;.&lt;br /&gt;
# In ascending order, &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; contains exactly the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that lie partially in the substring &amp;lt;math&amp;gt;(S[1],...,S[i])&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. In other words, &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; contains the start indexes in the range &amp;lt;math&amp;gt;S[i-m+2],...,S[i]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; increases by &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' &amp;lt;math&amp;gt;i=n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Simple_string_matching_algorithm&amp;diff=527</id>
		<title>Simple string matching algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Simple_string_matching_algorithm&amp;diff=527"/>
		<updated>2014-10-01T09:51:50Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Main Algorithm]]&lt;br /&gt;
'''Algorithmic problem:''' [[One-dimensional string matching]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop&lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data''' A [[FIFO queue]] &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; of natural numbers, which always contains the start indexes of all occurrences of &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; that have been seen only partially thus far.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Numbers&amp;diff=526</id>
		<title>Numbers</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Numbers&amp;diff=526"/>
		<updated>2014-10-01T09:41:50Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Checkup]]&lt;br /&gt;
[[Category:Background]]&lt;br /&gt;
==Natural numbers==&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbb{N}&amp;lt;/math&amp;gt; denotes the set of positive integral numbers:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;\mathbb{N} := \{1,2,3,...\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;\mathbb{N}_{0} := \mathbb{N} \cup \{0\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We say that &amp;lt;math&amp;gt;\mathbb{N}_{0}&amp;lt;/math&amp;gt; is the set of all '''natural numbers'''.&lt;br /&gt;
&lt;br /&gt;
==Real numbers==&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbb{R}&amp;lt;/math&amp;gt; denotes the set of all '''real numbers'''. We also define the following sets:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;\mathbb{R}^+ := \{x\mid x\in \mathbb{R},x&amp;gt;0\}&amp;lt;/math&amp;gt; (set of all positive real numbers)&lt;br /&gt;
: &amp;lt;math&amp;gt;\mathbb{R}^+_0 := \mathbb{R}^+ \cup \{ 0 \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally &amp;lt;math&amp;gt;+\infty&amp;lt;/math&amp;gt; or, for short, &amp;lt;math&amp;gt;\infty&amp;lt;/math&amp;gt;, denotes the unique number that is larger than all real numbers. Analogously, &amp;lt;math&amp;gt;-\infty&amp;lt;/math&amp;gt; is the unique number that is smaller than all real numbers. By convention the following properties hold for all &amp;lt;math&amp;gt;x\in\mathbb{R}&amp;lt;/math&amp;gt;:&lt;br /&gt;
: &amp;lt;math&amp;gt;x+\infty = \infty + x = \infty + \infty = \infty&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We say that &amp;lt;math&amp;gt;+\infty&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;-\infty&amp;lt;/math&amp;gt; are the '''neutral elements''' of the minimum and maximum operation, respectively:&lt;br /&gt;
: &amp;lt;math&amp;gt;\min\emptyset = +\infty&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;\max\emptyset = -\infty&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Empty sets and intervals==&lt;br /&gt;
# For &amp;lt;math&amp;gt;i&amp;gt;j&amp;lt;/math&amp;gt;, we define &amp;lt;math&amp;gt;\{ x_i,...,x_j\}:=\emptyset&amp;lt;/math&amp;gt;.&lt;br /&gt;
# For &amp;lt;math&amp;gt;a&amp;gt;b&amp;lt;/math&amp;gt;, we define &amp;lt;math&amp;gt;[a,b]:=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Boolean==&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbb{B}&amp;lt;/math&amp;gt; denotes the set of binary truth values ('''Boolean''' values).&lt;br /&gt;
: &amp;lt;math&amp;gt;\mathbb{B}:=\{ true,false\}&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Heap_as_array:_insert&amp;diff=509</id>
		<title>Heap as array: insert</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Heap_as_array:_insert&amp;diff=509"/>
		<updated>2014-10-01T09:06:31Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category: Method of an implementation of a data structure]]&lt;br /&gt;
'''Algorithmic problem:''' [[Bounded priority queue|Bounded priority queue: insert]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop&lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data:'''&lt;br /&gt;
# A '''current index''' &amp;lt;math&amp;gt;k \in \mathbb{N}&amp;lt;/math&amp;gt;.&lt;br /&gt;
# An auxiliary index &amp;lt;math&amp;gt;k' \in \mathbb{N}&amp;lt;/math&amp;gt;.&lt;br /&gt;
# A number &amp;lt;math&amp;gt;ID&amp;lt;/math&amp;gt; storing the ID to be eventually returned for the new heap element.&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' Before and after each iteration:&lt;br /&gt;
# The value of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; is one higher than immediately before the call to this method; one heap item has been inserted, and the key of this heap item is the input key.&lt;br /&gt;
# The heap property is fulfilled for all heap items except for the one at position &amp;lt;math&amp;gt;\lfloor k/2 \rfloor&amp;lt;/math&amp;gt; (for that one, the heap property may or may not be fulfilled).&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; is at least halved.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' One of the following two conditions is fulfilled:&lt;br /&gt;
# either it is &amp;lt;math&amp;gt;k = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
# or, otherwise, the heap property is fulfilled by the heap item at position &amp;lt;math&amp;gt;\lfloor k/2 \rfloor&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# Attach the new heap item at position &amp;lt;math&amp;gt;N + 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Increase &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; by one.&lt;br /&gt;
# Take a position &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; from &amp;lt;math&amp;gt;Unused&amp;lt;/math&amp;gt; and associate &amp;lt;math&amp;gt;Positions[i]&amp;lt;/math&amp;gt; with the new heap item.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# Set &amp;lt;math&amp;gt;N:=N+1&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;TheHeap[N].key:=K&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Extract some &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; from &amp;lt;math&amp;gt;Unused&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;Positions[i]:=N&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;TheHeap[N].ID:=i&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;ID:=i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Obvious.&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# If the current heap item has no parent or the parent fulfills the heap property, terminate the algorithm.&lt;br /&gt;
# Otherwise, exchange the current heap item with its parent. The index &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; follows the heap item.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# If &amp;lt;math&amp;gt;k=1&amp;lt;/math&amp;gt;, terminate the algorithm and return &amp;lt;math&amp;gt;ID&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;k' := \lfloor k/2 \rfloor &amp;lt;/math&amp;gt;.&lt;br /&gt;
# If &amp;lt;math&amp;gt;TheHeap[k'].key \le TheHeap[k].key&amp;lt;/math&amp;gt;, terminate the algorithm and return &amp;lt;math&amp;gt;ID&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Swap &amp;lt;math&amp;gt;Positions[TheHeap[k].ID]&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;Positions[TheHeap[k'].ID]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Swap &amp;lt;math&amp;gt;TheHeap[k].key&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;TheHeap[k'].key&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Swap &amp;lt;math&amp;gt;TheHeap[k].ID&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;TheHeap[k'].ID&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;k := k'&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Correctness:''' Obviously, the heap item at the old &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; now fulfills the heap property, and the new &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; is now the only index that does not necessarily fulfill it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
'''Statement:''' The asymptotic complexity is logarithmic in the worst case.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Obvious.&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;br /&gt;
Note that the loop is identical to the loop in [[Heap as array: decrease key]].&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
	<entry>
		<id>https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Heap_as_array:_extract_minimum&amp;diff=508</id>
		<title>Heap as array: extract minimum</title>
		<link rel="alternate" type="text/html" href="https://wiki.algo.informatik.tu-darmstadt.de/index.php?title=Heap_as_array:_extract_minimum&amp;diff=508"/>
		<updated>2014-10-01T09:05:53Z</updated>

		<summary type="html">&lt;p&gt;Cuozzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Checkup]]&lt;br /&gt;
[[Category:Algorithm]]&lt;br /&gt;
[[Category:Method of an implementation of a data structure]]&lt;br /&gt;
'''Algorithmic problem:''' [[Bounded priority queue|Bounded priority queue: extract minimum]]&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
'''Type of algorithm:''' loop&lt;br /&gt;
&lt;br /&gt;
'''Auxiliary data:'''&lt;br /&gt;
# A '''current index''' &amp;lt;math&amp;gt;k \in \mathbb{N}&amp;lt;/math&amp;gt;.&lt;br /&gt;
# An auxiliary index &amp;lt;math&amp;gt;k' \in \mathbb{N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Abstract view==&lt;br /&gt;
'''Invariant:''' Before and after each iteration:&lt;br /&gt;
# The value of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; is one less than immediately before the call to this method; one heap item has been removed, namely the one that was at position &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
# The heap property is fulfilled for all heap items except for the one at index &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; (for that one, the heap property may or may not be fulfilled).&lt;br /&gt;
&lt;br /&gt;
'''Variant:''' &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; is at least doubled.&lt;br /&gt;
&lt;br /&gt;
'''Break condition:''' The heap property is fulfilled by &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; (note that the heap property is trivially fulfilled by &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; once &amp;lt;math&amp;gt;2 * k &amp;gt; N&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==Induction basis==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# Overwrite &amp;lt;math&amp;gt;TheHeap[1]&amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt;TheHeap[N]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Decrease &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; by one.&lt;br /&gt;
# Update &amp;lt;math&amp;gt;Positions&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;Unused&amp;lt;/math&amp;gt; accordingly.&lt;br /&gt;
&lt;br /&gt;
'''Implementation:'''&lt;br /&gt;
# Insert &amp;lt;math&amp;gt;TheHeap[1].ID&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;Unused&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;TheHeap[1].key := TheHeap[N].key&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;TheHeap[1].ID := TheHeap[N].ID&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;N := N-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;Positions[TheHeap[1].ID] := 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;k := 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Proof:''' Obvious.&lt;br /&gt;
&lt;br /&gt;
==Induction step==&lt;br /&gt;
'''Abstract view:'''&lt;br /&gt;
# If the current heap item fulfills the heap property, terminate the algorithm.&lt;br /&gt;
# Otherwise, exchange the current heap item with one of its children, viz. the smaller one (ties arbitrarily broken). The index &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; follows the heap item.&lt;br /&gt;
&lt;br /&gt;
'''Implementation'''&lt;br /&gt;
# If &amp;lt;math&amp;gt;2*k&amp;gt;N&amp;lt;/math&amp;gt;, terminate the algorithm.&lt;br /&gt;
# If &amp;lt;math&amp;gt;2*k+1&amp;gt;N&amp;lt;/math&amp;gt;, set &amp;lt;math&amp;gt;k' := 2*k&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Otherwise, set&lt;br /&gt;
## &amp;lt;math&amp;gt;k' := 2*k&amp;lt;/math&amp;gt; if &amp;lt;math&amp;gt;TheHeap[2k] \le TheHeap[2k+1]&amp;lt;/math&amp;gt;;&lt;br /&gt;
## &amp;lt;math&amp;gt;k' := 2*k+1&amp;lt;/math&amp;gt;, otherwise.&lt;br /&gt;
# If &amp;lt;math&amp;gt;TheHeap[k] \le TheHeap[k']&amp;lt;/math&amp;gt;, terminate the algorithm.&lt;br /&gt;
# Swap &amp;lt;math&amp;gt;Positions[TheHeap[k].ID]&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;Positions[TheHeap[k'].ID]&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Swap &amp;lt;math&amp;gt;TheHeap[k].key&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;TheHeap[k'].key&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Swap &amp;lt;math&amp;gt;TheHeap[k].ID&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;TheHeap[k'].ID&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;k := k'&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Correctness:''' Obviously, the heap item at the former position &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; now fulfills the heap property, and the new &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; is now the only index that does not necessarily fulfill it.&lt;br /&gt;
&lt;br /&gt;
==Complexity==&lt;br /&gt;
'''Statement:''' The asymptotic complexity is logarithmic in the worst case.&lt;br /&gt;
'''Proof:''' Obvious.&lt;br /&gt;
&lt;br /&gt;
==Further information==&lt;/div&gt;</summary>
		<author><name>Cuozzo</name></author>
	</entry>
</feed>