<?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=Cuthill-McKee-Algorithmus</id>
	<title>Cuthill-McKee-Algorithmus - 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=Cuthill-McKee-Algorithmus"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Cuthill-McKee-Algorithmus&amp;action=history"/>
	<updated>2026-06-05T11:22:53Z</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=Cuthill-McKee-Algorithmus&amp;diff=2541929&amp;oldid=prev</id>
		<title>imported&gt;Fan-vom-Wiki: fehlendes Leerzeichen</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Cuthill-McKee-Algorithmus&amp;diff=2541929&amp;oldid=prev"/>
		<updated>2025-10-16T08:24:01Z</updated>

		<summary type="html">&lt;p&gt;fehlendes Leerzeichen&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Datei:can 73 cm.pdf|miniatur|Cuthill-McKee-Sortierung derselben Matrix]]&lt;br /&gt;
[[Datei:can 73 rcm.pdf|miniatur|Umgekehrte Cuthill-McKee-Sortierung derselben Matrix]]&lt;br /&gt;
&lt;br /&gt;
Der &amp;#039;&amp;#039;&amp;#039;Cuthill-McKee-Algorithmus&amp;#039;&amp;#039;&amp;#039; (benannt nach Elizabeth Cuthill und James&amp;lt;ref name=&amp;quot;mckee&amp;quot;&amp;gt;{{Webarchiv|url=http://calhoun.nps.edu/bitstream/handle/10945/30131/recommendationsf00fran.pdf |wayback=20210910184613 |text=&amp;#039;&amp;#039;Recommendations for ship hull surface representation&amp;#039;&amp;#039; |archiv-bot=2024-11-20 20:18:07 InternetArchiveBot }}, page 6&amp;lt;/ref&amp;gt; McKee) ist in der [[Numerische Mathematik|numerischen Mathematik]] ein [[Algorithmus]], der eine [[Symmetrische Matrix|symmetrische]] [[dünnbesetzte Matrix]] in eine [[Bandmatrix]] mit einer geringeren [[Bandmatrix|Bandbreite]] transformiert.&amp;lt;ref name=&amp;quot;cm&amp;quot;&amp;gt; E. Cuthill and J. McKee. [http://portal.acm.org/citation.cfm?id=805928 &amp;#039;&amp;#039;Reducing the bandwidth of sparse symmetric matrices&amp;#039;&amp;#039;] In Proc. 24th Nat. Conf. [[Association for Computing Machinery|ACM]], pages 157–172, 1969.&amp;lt;/ref&amp;gt;  Für Bandmatrizen existieren sehr effiziente Berechnungsalgorithmen, beispielsweise für die Lösung von sehr großen [[Lineares Gleichungssystem|linearen Gleichungssystemen]] (siehe [[BLAS]]).&lt;br /&gt;
&lt;br /&gt;
Der &amp;#039;&amp;#039;&amp;#039;umgekehrte Cuthill-McKee-Algorithmus&amp;#039;&amp;#039;&amp;#039; von Alan George ist derselbe Algorithmus mit umgekehrter Indexreihenfolge. Im Allgemeinen führt der umgekehrte Algorithmus zu einem geringeren Fill-in, wenn eine [[Gaußsches Eliminationsverfahren|Gaußelimination]] durchgeführt wird. Unter „Fill-in“ versteht man das Entstehen von Nichtnull-Elementen an Positionen, die in der ursprünglichen Matrix mit Null besetzt sind.&amp;lt;ref name=&amp;quot;gl&amp;quot;&amp;gt; J. A.  George and J. W-H. Liu, Computer Solution of Large Sparse Positive Definite Systems, Prentice-Hall, 1981 &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Cuthill-McKee-Algorithmus unterscheidet sich von der [[Breitensuche]] für [[Graphen]] durch seine Reihenfolge, die durch Nummerierung adjazenter Knoten anhand ihres Grades ermittelt wird.&lt;br /&gt;
&lt;br /&gt;
== Algorithmus ==&lt;br /&gt;
Es sei &amp;lt;math&amp;gt;M\!&amp;lt;/math&amp;gt; eine &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt; [[Adjazenzmatrix]], also eine [[symmetrische Matrix]], die als Einträge nur Nullen und Einsen besitzt. Der Cuthill-McKee-Algorithmus ist eine Umnummerierung der Knoten des durch die Adjazenzmatrix repräsentierten Graphen, um die Bandbreite der Adjazenzmatrix zu reduzieren. Der Algorithmus errechnet ein &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-Tupel von Knoten, die die neue Reihenfolge darstellen, wie folgt:&lt;br /&gt;
&lt;br /&gt;
*Man wähle einen Startknoten &amp;lt;math&amp;gt;x\!&amp;lt;/math&amp;gt; und setze &amp;lt;math&amp;gt;R:=(x)\!&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Für &amp;lt;math&amp;gt;i=1,2,\dots&amp;lt;/math&amp;gt; führe, solange &amp;lt;math&amp;gt;|R|&amp;lt;n&amp;lt;/math&amp;gt; ist, folgende Schritte aus:&lt;br /&gt;
&lt;br /&gt;
:* Konstruiere die Menge der adjazenten Knoten &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt; von &amp;lt;math&amp;gt;R_i&amp;lt;/math&amp;gt;, wobei &amp;lt;math&amp;gt;R_i&amp;lt;/math&amp;gt; die &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-te Komponente von &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; ist, und schließe alle Knoten aus, die schon in &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; enthalten sind: &amp;lt;math&amp;gt;A_i := \operatorname{Adj}(R_i) \setminus R&amp;lt;/math&amp;gt;&lt;br /&gt;
:* Sortiere &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt; nach steigendem [[Knotengrad]].&lt;br /&gt;
:* Hänge &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt; an das Ergebnis-Tupel &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; an.&lt;br /&gt;
&lt;br /&gt;
=== Wahl des Startknotens ===&lt;br /&gt;
Die Qualität der durch den Algorithmus bestimmten neuen Nummerierung bzw. [[Permutation]] hängt entscheidend von der Wahl des Startknotens ab. Da das Bandbreitenminimierungsproblem [[NP-Schwere|NP-schwer]] ist&amp;lt;ref&amp;gt;{{Literatur |Autor=Uriel Feige |Titel=Coping with the NP-Hardness of the Graph Bandwidth Problem |Sammelwerk=Algorithm Theory - SWAT 2000 |Band=1851 |Verlag=Springer Berlin Heidelberg |Ort=Berlin, Heidelberg |Datum=2000 |ISBN=978-3-540-67690-4 |DOI=10.1007/3-540-44985-x_2 |Seiten=10–19 |Online=http://link.springer.com/10.1007/3-540-44985-X_2 |Abruf=2020-03-23}}&amp;lt;/ref&amp;gt;, fällt auch die Wahl eines optimalen Startknotens in diese [[Komplexitätsklasse]]. Stattdessen schlagen Cuthill und McKee vor, immer einen Knoten minimalen Grads zu wählen&amp;lt;ref name=&amp;quot;cm&amp;quot; /&amp;gt;, dies hat sich aber in der Praxis nicht bewährt. Alternativ ist auch die Wahl eines peripheren Knotens, also eines Knotens im [[Weg (Graphentheorie)#Länge und Abstand|Rand]] des Graphen, als Startknoten naheliegend. Das Bestimmen eines peripheren Knotens ist allerdings nur in quadratischer Laufzeit möglich, was den eigentlichen Algorithmus dominiert. Daher begnügt man sich in der Praxis damit einen &amp;#039;&amp;#039;&amp;#039;pseudo-peripheren Knoten&amp;#039;&amp;#039;&amp;#039; zu wählen, der auf folgende Weise ermittelt werden kann:&lt;br /&gt;
&lt;br /&gt;
# Man wähle einen beliebigen Knoten &amp;lt;math&amp;gt;x \in X\!&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Man erzeuge die Schichtung &amp;lt;math&amp;gt;\{L_0(x),...,L_{\varepsilon(x)}(x)\}\!&amp;lt;/math&amp;gt; mit der Wurzel &amp;lt;math&amp;gt;x\!&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Man wähle einen beliebigen Knoten minimalen Grades &amp;lt;math&amp;gt;r \in L_{\varepsilon(x)}(x)\!&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Man erzeuge die Schichtung &amp;lt;math&amp;gt;\{L_0(r),...,L_{\varepsilon(r)}(r)\}\!&amp;lt;/math&amp;gt; mit der Wurzel &amp;lt;math&amp;gt;r\!&amp;lt;/math&amp;gt;. Falls &amp;lt;math&amp;gt;\varepsilon(r) &amp;gt; \varepsilon(x)\!&amp;lt;/math&amp;gt;, ersetze man &amp;lt;math&amp;gt;x\!&amp;lt;/math&amp;gt; durch &amp;lt;math&amp;gt;r\!&amp;lt;/math&amp;gt; und gehe nach 3.&lt;br /&gt;
# &amp;lt;math&amp;gt;r\!&amp;lt;/math&amp;gt; ist ein pseudo-peripherer Knoten.&lt;br /&gt;
&lt;br /&gt;
Als Exzentrizität &amp;lt;math&amp;gt;\varepsilon(x)\!&amp;lt;/math&amp;gt; eines Knotens &amp;lt;math&amp;gt;x\!&amp;lt;/math&amp;gt; eines zusammenhängenden Graphen bezeichnet man die Größe &amp;lt;math&amp;gt;\varepsilon(x):=\underset{y\in X}{\max} \text{ dist}(x, y) .\!&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Der Algorithmus wird angewendet, um die [[Bandmatrix|Bandbreite]] von Matrizen zu reduzieren und damit zum Beispiel den Aufwand der [[Gaußsches Eliminationsverfahren|Gauß-Elimination]] bei der Lösung linearer Gleichungssysteme drastisch zu verringern.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.boost.org/doc/libs/1_37_0/libs/graph/doc/cuthill_mckee_ordering.html Dokumentation des Cuthill–McKee-Algorithmus] für die [[Boost (C++-Bibliothek)|Boost C++-Bibliothek]] (englisch)&lt;br /&gt;
* [http://ciprian-zavoianu.blogspot.com/2009/01/project-bandwidth-reduction.html Beschreibung des Cuthill–McKee-Algorithmus] (englisch)&lt;br /&gt;
*[http://www.scielo.br/scielo.php?pid=S2179-84512019000300497&amp;amp;script=sci_arttext#DavisHu2011 Ein Vergleich der Qualität und Effizienz verschiedener Algorithmen zur Wahl eines pseudo-peripheren Knotens] (englisch)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Numerische Mathematik]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Fan-vom-Wiki</name></author>
	</entry>
</feed>