<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Pr%C3%A4fixsumme</id>
	<title>Präfixsumme - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Pr%C3%A4fixsumme"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Pr%C3%A4fixsumme&amp;action=history"/>
	<updated>2026-06-11T11:28:54Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Pr%C3%A4fixsumme&amp;diff=1087221&amp;oldid=prev</id>
		<title>imported&gt;Ulanwp: 6 Vorlagen Cite Book nach Vorlage Literatur konvertiert; siehe WP-Empfehlung und Fehler beseitigt; 5 Vorlagen Cite Journal nach Literatur konvertiert</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Pr%C3%A4fixsumme&amp;diff=1087221&amp;oldid=prev"/>
		<updated>2022-11-17T13:16:31Z</updated>

		<summary type="html">&lt;p&gt;6 Vorlagen Cite Book nach Vorlage Literatur konvertiert; siehe WP-Empfehlung und Fehler beseitigt; 5 Vorlagen Cite Journal nach Literatur konvertiert&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;In der [[Informatik]] ist die &amp;#039;&amp;#039;&amp;#039;Präfixsumme&amp;#039;&amp;#039;&amp;#039; einer Folge von Zahlen &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, … die Zahlenfolge &amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, … ihrer [[Partialsumme]]n:&lt;br /&gt;
: &amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
: &amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
: &amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;+ &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&lt;br /&gt;
: …&lt;br /&gt;
&lt;br /&gt;
Beispielsweise ist die Präfixsumme der [[natürliche Zahl|natürlichen Zahlen]] die Folge der [[Dreieckszahl]]en:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin-left:2em&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Eingabefolge&amp;#039;&amp;#039;&amp;#039; || &amp;amp;nbsp;1 || &amp;amp;nbsp;2 || &amp;amp;nbsp;3 || &amp;amp;nbsp;4 || &amp;amp;nbsp;5 || &amp;amp;nbsp;6 || …&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Präfixsumme&amp;#039;&amp;#039;&amp;#039; || &amp;amp;nbsp;1 || &amp;amp;nbsp;3 || &amp;amp;nbsp;6 || 10 || 15 || 21 || …&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Präfixsumme ist mit einer einfachen Schleife [[Sequentialisierung|sequenziell]] berechenbar, indem mit der Formel&lt;br /&gt;
: &amp;#039;&amp;#039;s&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039; = &amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;&amp;#039;&amp;#039;i&amp;#039;&amp;#039;−1&amp;lt;/sub&amp;gt; + &amp;#039;&amp;#039;a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039;&lt;br /&gt;
für &amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;gt;0 jeder Summenwert sukzessive aufaddiert wird. Die Präfixsumme bildet die Grundlage für Algorithmen wie den [[Countingsort]].&amp;lt;ref name=&amp;quot;clrs&amp;quot;&amp;gt;{{Literatur |Autor=Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein |Titel=Introduction to Algorithms |Auflage=2 |Verlag=MIT Press, McGraw-Hill |Datum=2001 |ISBN=0-262-03293-7 |Kapitel=8.2 Counting Sort |Seiten=168–170}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
Sie kann statt der Summierung als Basisoperation eine allgemeine [[Assoziativgesetz|assoziative]] [[Zweistellige Verknüpfung|binäre Operation]] verwenden, womit sie beispielsweise zur [[Polynominterpolation]] oder zur [[Zeichenkette|Stringbearbeitung]] eingesetzt&amp;lt;ref name=&amp;quot;blelloch11&amp;quot;&amp;gt;{{Literatur |Autor=Guy Blelloch |Titel=Prefix Sums and Their Applications (Lecture Notes) |Verlag=Carnegie Mellon University |Datum=2011 |Online=[http://www.cs.cmu.edu/afs/cs/academic/class/15750-s11/www/handouts/PrefixSumBlelloch.pdf Online]}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;callahan1995&amp;quot;&amp;gt;{{Literatur |Autor=Paul Callahan, S. Rao Kosaraju |Titel=A Decomposition of Multi-Dimensional Point Sets with Applications to k-Nearest-Neighbors and n-Body Potential Fields |Sammelwerk=Journal of the ACM |Band=42 |Nummer=1 |Datum=1995}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
und in der [[Funktionale Programmierung|funktionalen Programmierung]] auf [[Funktion höherer Ordnung|Funktionen höherer Ordnung]] angewandt werden kann; in diesem Falle wird sie auch &amp;#039;&amp;#039;&amp;#039;Scan&amp;#039;&amp;#039;&amp;#039; genannt. Da die Präfixsumme mit dem Fork-join-Modell&amp;lt;ref name=&amp;quot;fork-join&amp;quot;&amp;gt;A. de Vries (2014): [http://www4.fh-swf.de/media/downloads/fbtbw/download_8/devries_1/Funktionen-Streams.pdf Funktionale Programmierung und Streams in Java] (PDF) Einführendes Vorlesungsskript Wirtschaftsinformatik, [[FH Südwestfalen|FH Südwestfalen Hagen]], §&amp;amp;nbsp;3&amp;lt;/ref&amp;gt; zudem effizient auf [[Mehrkernprozessor]]systemen und [[Rechnercluster]]n berechnet werden kann, spielt sie in Betrachtungen zu [[Paralleler Algorithmus|parallelen Algorithmen]] eine wichtige theoretische und praktische Rolle, als zu lösendes Testproblem ebenso wie als Subroutine wichtiger paralleler Algorithmen.&amp;lt;ref name=&amp;quot;lf80&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;tv85&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;Prefix.book.92&amp;quot;&amp;gt;{{Literatur |Autor=S. Lakshmivarahan, S.K. Dhall |Titel=Parallelism in the Prefix Problem |Verlag=[[Oxford University Press]] |Datum=1994 |ISBN=0-19-508849-2}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mathematisch kann die Berechnung der Präfixsumme von endlichen auf unendliche Folgen verallgemeinert werden. Sie stellt dann eine [[Reihe (Mathematik)|Reihe]] dar. Die Präfixsummierung ist ein [[linearer Operator]] auf einem [[Vektorraum]] endlicher oder unendlicher Folgen. Seine Inverse ist ein [[Differenz-Operator]].&lt;br /&gt;
&lt;br /&gt;
== Präfixoperationen (&amp;#039;&amp;#039;Scans&amp;#039;&amp;#039;) von Funktionen höherer Ordnung ==&lt;br /&gt;
Die eigentliche Präfixsumme basiert auf der [[Zweistellige Verknüpfung|binären Operation]] der [[Addition]]. In der [[Funktionale Programmierung|funktionalen Programmierung]] kann die Präfixsumme auf jede binäre [[Assoziativgesetz|assoziative]] Operation verallgemeinert werden, also statt einer Präfix&amp;#039;&amp;#039;summe&amp;#039;&amp;#039; eine Präfix&amp;#039;&amp;#039;operation&amp;#039;&amp;#039; darstellen. (Allerdings wird oft der Begriff „Präfixsumme“ auch dafür verwendet.) Die aus dieser Verallgemeinerung resultierende Präfixoperation ist eine [[Funktion höherer Ordnung]] und wird auch &amp;#039;&amp;#039;&amp;#039;Scan&amp;#039;&amp;#039;&amp;#039; genannt. Zum Beispiel kann die Folge der [[Fakultät (Mathematik)|Fakultäten]] (&amp;#039;&amp;#039;a&amp;lt;sub&amp;gt;k&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039;) als Präfixprodukt berechnet werden, indem die Addition durch die Multiplikation ersetzt wird:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin-left:2em&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Eingabefolge&amp;#039;&amp;#039;&amp;#039; || &amp;amp;nbsp;1 || &amp;amp;nbsp;2 || &amp;amp;nbsp;3 || &amp;amp;nbsp;4 || &amp;amp;nbsp;&amp;amp;nbsp;5 || &amp;amp;nbsp;&amp;amp;nbsp;6 || …&lt;br /&gt;
|- &lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Präfixprodukt&amp;#039;&amp;#039;&amp;#039; || &amp;amp;nbsp;1 || &amp;amp;nbsp;2 || &amp;amp;nbsp;6 || 24 || 120 || 720 || …&lt;br /&gt;
|}&lt;br /&gt;
Die Scan-Operation ist daher ähnlich der [[MapReduce|Reduce-Operation]], allerdings liefert &amp;#039;&amp;#039;Scan&amp;#039;&amp;#039; die gesamte Folge der Partialoperationen, während &amp;#039;&amp;#039;Reduce&amp;#039;&amp;#039; nur den Wert der letzten Partialoperation als Ergebnis liefert.&lt;br /&gt;
&lt;br /&gt;
In [[Haskell (Programmiersprache)|Haskell]] gibt es zwei Varianten von &amp;#039;&amp;#039;Scan&amp;#039;&amp;#039;, nämlich &amp;lt;code&amp;gt;scanl&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;scanl1&amp;lt;/code&amp;gt;.&amp;lt;ref&amp;gt;{{Literatur |Titel=Haskell 98 Language and Libraries: The Revised Report |Datum=2002 |Kapitel=Standard Prelude |Online=[http://www.haskell.org/onlinereport/standard-prelude.html Online]}}&amp;lt;/ref&amp;gt; Die prozeduralen [[Message Passing Interface|MPI]]-Bibliotheken bieten eine Operation &amp;lt;code&amp;gt;MPI_Scan&amp;lt;/code&amp;gt; an, um eine Scan-Operation zwischen vernetzten Processoreinheiten zu berechnen. Die Programmiersprache [[C++]] hat eine Funktion &amp;lt;code&amp;gt;partial_sum&amp;lt;/code&amp;gt; in ihrer Standardbibliothek, welche, trotz ihres Namens, eine Scan-Operation mit einer beliebigen binären Operation ausführt. Die Programmiersprache [[Java (Programmiersprache)|Java]] bietet (ab der Version 1.8) in dem Standardpaket &amp;lt;code&amp;gt;java.util.Arrays&amp;lt;/code&amp;gt; eine Methode &amp;lt;code&amp;gt;parallelPrefix&amp;lt;/code&amp;gt; in mehreren Varianten an, die neben dem zu bearbeitenden Array einen binären Operator erwartet.&amp;lt;ref name=&amp;quot;java&amp;quot;&amp;gt;[http://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html Java SE 8 API] (2014)&amp;lt;/ref&amp;gt; Die Präfixsumme eines Arrays &amp;lt;code&amp;gt;a[k]&amp;lt;/code&amp;gt; wird damit durch die folgende Anweisung berechnet und in dem Eingabearray gespeichert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Arrays.parallelPrefix(a, (x,y) -&amp;gt; x + y);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Der binäre Operator ist hier als [[Lambda-Ausdruck]], also eine [[anonyme Funktion]] mit zwei Parametern angegeben. Entsprechend kann die Fakultät nach obigem Beispiel als Präfixprodukt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Arrays.parallelPrefix(a, (x,y) -&amp;gt; x * y);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
programmiert werden.&lt;br /&gt;
&lt;br /&gt;
== Parallele Berechnung ==&lt;br /&gt;
[[Datei:Prefix sum 16.svg|mini|Abfolge der Rechenschritte einer parallelen Präfixsumme mit 16 Eingabeeinträgen]]&lt;br /&gt;
Mit Hilfe des Fork-join-Modells&amp;lt;ref name=&amp;quot;fork-join&amp;quot; /&amp;gt; kann eine Präfixsumme mit den folgenden Schritten effizient parallel berechnet werden.&amp;lt;ref name=&amp;quot;lf80&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;offman&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;krapchenko&amp;quot; /&amp;gt;&lt;br /&gt;
# Berechne die Summen der aufeinanderfolgenden Paareinträge, in denen der erste Eintrag jeweils einen geraden Index hat: &amp;#039;&amp;#039;z&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;z&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, ….&lt;br /&gt;
# Berechne rekursiv die Präfixsumme &amp;#039;&amp;#039;w&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;w&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;w&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, … der Folge &amp;#039;&amp;#039;z&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;z&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;z&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, ….&lt;br /&gt;
# Drücke jeden Term der Ergebnisfolge &amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, … als die Summe von höchstens zwei Termen dieser Zwischenfolge aus: &amp;#039;&amp;#039;y&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;y&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; = &amp;#039;&amp;#039;z&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;y&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = &amp;#039;&amp;#039;z&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + &amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;y&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = &amp;#039;&amp;#039;w&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; etc. Nach dem ersten Wert ist jede sukzessive Zahl &amp;#039;&amp;#039;y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039; entweder eine Kopie des Werts mit halb so großem Index in der Folge &amp;#039;&amp;#039;w&amp;#039;&amp;#039;, oder sie ist der vorherige Wert plus einem Wert in der originalen Folge &amp;#039;&amp;#039;a&amp;#039;&amp;#039;.&lt;br /&gt;
Hat die Eingabefolge &amp;#039;&amp;#039;n&amp;#039;&amp;#039; Einträge, so schreitet die Rekursion bis zu einer Tiefe von &amp;#039;&amp;#039;O&amp;#039;&amp;#039;(log &amp;#039;&amp;#039;n&amp;#039;&amp;#039;) fort, was ebenso die Begrenzung der parallelen Laufzeit darstellt. Die Anzahl der Schritte des Algorithmus beträgt &amp;#039;&amp;#039;O&amp;#039;&amp;#039;(&amp;#039;&amp;#039;n&amp;#039;&amp;#039;) und kann auf einer [[Parallel Random Access Machine|PRAM]] mit &amp;#039;&amp;#039;O&amp;#039;&amp;#039;(&amp;#039;&amp;#039;n&amp;#039;&amp;#039;/log &amp;#039;&amp;#039;n&amp;#039;&amp;#039;) Prozessoren implementiert werden, indem in Runden, in denen mehr Einträge als Prozessoren vorhanden sind, einem Prozessor einfach mehrere Indizes zugewiesen werden.&amp;lt;ref name=&amp;quot;lf80&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parallele Algorithmen für Präfixsummen können auf andere Präfixoperationen (Scans) [[Assoziativgesetz|assoziativer]] [[Zweistellige Verknüpfung|binärer Operationen]] verallgemeinert werden.&amp;lt;ref name=&amp;quot;lf80&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;tv85&amp;quot; /&amp;gt; Sie laufen effizient auf paralleler Hardware wie [[Mehrkernprozessor]]en, [[Global Processing Unit|GPU]]&amp;#039;s oder [[Rechnercluster]]n ab.&amp;lt;ref&amp;gt;{{Literatur |Autor=Shubhabrata Sengupta, Mark Harris, Yao Zhang, John D. Owens |Titel=Proceedings of the 22nd ACM SIGGRAPH/EUROGRAPHICS Symposium on Graphics Hardware |Datum=2007 |Kapitel=Scan primitives for GPU computing |Seiten=97–106 |Online=[http://graphics.idav.ucdavis.edu/publications/print_pub?pub_id=915 Online]}}&amp;lt;/ref&amp;gt; Viele parallele Implementierungen verwenden dazu zwei Durchgänge: im ersten Durchgang werden die partiellen Präfixsummen auf jeder Prozessoreinheit berechnet; die Präfixsumme dieser Teilsummen wird dann berechnet und zum zweiten Durchgang an die einzelnen Prozessoreinheiten zurückgesendet, die nun mit dem bekannten Präfix als Anfangswert weiterrechnen. Asymptotisch angenähert erfordert diese Methode etwa zwei Lese- und eine Schreiboperation pro Eintrag.&lt;br /&gt;
&lt;br /&gt;
== Anwendungen ==&lt;br /&gt;
* [[Countingsort]] ist ein Algorithmus zur Sortierung einer Folge ganzer Zahlen, der die Präfixsumme eines [[Histogramm]]s der Schlüsselhäufigkeiten verwendet, um die Position jedes Schlüssels in der sortierten Ausgabefolge zu bestimmen. Der Algorithmus hat lineare Zeitkomplexität &amp;#039;&amp;#039;O(n)&amp;#039;&amp;#039; für ganzzahlige Schlüsselwerte, die kleiner als die Anzahl Einträge sind, und ebenso lineare Speicherkomplexität. Countingsort wiederum kann eine von zwei möglichen Subroutinen für den [[Radixsort]].&amp;lt;ref name=&amp;quot;clrs&amp;quot; /&amp;gt;&lt;br /&gt;
* [[List ranking]] ist das Problem, eine [[Liste (Datenstruktur)|verkettete Liste]] in ein [[Feld (Datentyp)|Array]] derselben Elementfolge zu transformieren. Es kann durch Berechnung einer Präfixsumme der Folge 1, 1, 1, … und der Zuordnung jedes Listenelements zu seinem Präfixsummenwert als Array-Index. Durch Kombination von List Ranking, Präfixsumme und [[Eulerkreisproblem|Eulerkreise]] können viele wichtige Probleme an [[Baum (Graphentheorie)|Baumstrukturen]] effizient durch parallele Algorithmen gelöst werden.&amp;lt;ref name=&amp;quot;tv85&amp;quot;&amp;gt;{{Literatur |Autor=Robert E. Tarjan, Uzi Vishkin |Titel=An efficient parallel biconnectivity algorithm |Sammelwerk=[[SIAM Journal on Computing]] |Band=14 |Nummer=4 |Datum=1985 |Seiten=862–874 |DOI=10.1137/0214061}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Parallele Präfixsummenalgorithmen können für den Entwurf von [[Addierwerk]]en verwendet werden, also Boole’schen [[Schaltnetz]]en, die zwei &amp;#039;&amp;#039;n&amp;#039;&amp;#039;-stellige [[Binärzahl]]en addieren. Hierbei kann eine Folge von [[Übertragbit]]s als eine Präfixoperation der [[Konjunktion (Logik)|Konjunktion]] &amp;lt;math&amp;gt;f(x,y) = x \wedge y&amp;lt;/math&amp;gt; der Folge von Bitpaaren berechnet werden; jedes Bit der Ergebniszahl ist dann ein [[XOR]] der beiden Eingabebits und des zugehörigen Übertragbits. Damit kann man ein paralleles Addierwerk für &amp;#039;&amp;#039;n&amp;#039;&amp;#039;-stellige Binärzahlen mit &amp;#039;&amp;#039;O&amp;#039;&amp;#039;(&amp;#039;&amp;#039;n&amp;#039;&amp;#039;) [[Logikgatter]]n and &amp;#039;&amp;#039;O&amp;#039;&amp;#039;(log &amp;#039;&amp;#039;n&amp;#039;&amp;#039;) Rechenschritten realisieren.&amp;lt;ref name=&amp;quot;lf80&amp;quot;&amp;gt;{{Literatur |Autor=R. E. Ladner, M. J. Fischer |Titel=Parallel Prefix Computation |Sammelwerk=[[Journal of the ACM]] |Band=27 |Nummer=4 |Datum=1980 |Seiten=831–838 |DOI=10.1145/322217.322232}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;offman&amp;quot;&amp;gt;{{Literatur |Autor=Yuri Petrovich Ofman |Titel=Об алгоритмической сложности дискретных функций |Sammelwerk=[[Proceedings of the USSR Academy of Sciences|Doklady Akademii Nauk SSSR]] |Band=145 |Nummer=1 |Datum=1962 |Sprache=ru |Seiten=48–51 |Kommentar=English translation, &amp;#039;&amp;#039;On the algorithmic complexity of discrete functions&amp;#039;&amp;#039;. In: &amp;#039;&amp;#039;Soviet Physics Doklady&amp;#039;&amp;#039;, 7, S. 589–591 1963}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;krapchenko&amp;quot;&amp;gt;{{Literatur |Autor=V. M. Khrapchenko |Titel=Asymptotic Estimation of Addition Time of a Parallel Adder |Sammelwerk=Problemy Kibernet. |Band=19 |Datum=1967 |Sprache=ru |Seiten=107–122 |Kommentar=English translation in: &amp;#039;&amp;#039;Syst. Theory Res.&amp;#039;&amp;#039;, 19, 1970, S. 105–122}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Der [[Gray-Code]] einer ganzen [[Binärzahl|binären Zahl]] &amp;#039;&amp;#039;n&amp;#039;&amp;#039; kann einfach durch Berechnung des [[XOR]] von &amp;#039;&amp;#039;n&amp;#039;&amp;#039; und &amp;#039;&amp;#039;n&amp;#039;&amp;#039;/2 (also der [[Arithmetische Verschiebung|Rechtsverschiebung]] von &amp;#039;&amp;#039;n&amp;#039;&amp;#039; um ein Bit) gebildet werden. Die inverse Operation, also die Dekodierung eines Gray-Codes &amp;#039;&amp;#039;x&amp;#039;&amp;#039; in eine Binärzahl, kann als Präfixsumme der Bits von &amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;amp;nbsp;[[modulo]]&amp;amp;nbsp;2 ausgedrückt werden, also als Präfixoperation mit der assoziativen XOR-Funktion &amp;lt;math&amp;gt;f(x_1,x_2) = x_1 \oplus x_2&amp;lt;/math&amp;gt;.&amp;lt;ref&amp;gt;{{Literatur |Autor=Henry S. Warren |Titel=Hacker’s Delight |Verlag=Addison-Wesley |Datum=2003 |ISBN=978-0-201-91465-8 |Seiten=236 |Online=[http://books.google.com/books?id=iBNKMspIlqEC&amp;amp;pg=PA236 Google Books]}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Parallele Präfixprodukte (mit der Multiplikation als assoziative Operation) können als Baustein von schnellen parallelen Algorithmen zur [[Polynominterpolation]] eingesetzt werden. Insbesondere können sie zur Koeffizientenberechnung nach dem Schema der dividierten Differenz im [[Polynominterpolation#Newtonscher Algorithmus|Newton’schen Algorithmus]] verwendet werden.&amp;lt;ref&amp;gt;{{Literatur |Autor=O. Eğecioğlu, E. Gallopoulos, C. Koç |Titel=A parallel method for fast and practical high-order Newton interpolation |Band=30 |Nummer=2 |Datum=1990 |Seiten=268–288 |DOI=10.1007/BF02017348 |Online=[http://www.springer.com/mathematics/computational+science+%26+engineering/journal/10543 BIT Computer Science and Numerical Mathematics]}}&amp;lt;/ref&amp;gt; Ähnlich kann die [[Hermiteinterpolation|Hermite-Interpolation]] oder die [[Interpolation]] von [[Funktion (Mathematik)|Funktionen]] mit Hilfe der [[Vandermonde-Matrix|Vandermonde-Matrizen]] effizient parallel berechnet werden.&amp;lt;ref&amp;gt;{{Literatur |Autor=O. Eğecioğlu, E. Gallopoulos, C. Koç |Titel=Fast computation of divided differences and parallel Hermite interpolation |Sammelwerk=Journal of Complexity |Band=5 |Datum=1989 |Seiten=417–437 |DOI=10.1016/0885-064X(89)90018-6}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Reihe (Mathematik)]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{MathWorld |id=CumulativeSum |title=Cumulative Sum}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SORTIERUNG:Prafixsumme}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Algorithmus]]&lt;br /&gt;
[[Kategorie:Computercluster]]&lt;br /&gt;
[[Kategorie:Parallelverarbeitung]]&lt;br /&gt;
[[Kategorie:Theoretische Informatik]]&lt;br /&gt;
[[Kategorie:Verteiltes System]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Ulanwp</name></author>
	</entry>
</feed>