Abzählen und Konstruktion der Strukturisomere von Alkanen, Alkenen und Alkinen

Ähnliche Dokumente
Anzahl von Strukturisomeren der Alkane

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Isomorphie von Bäumen

9.2 Invertierbare Matrizen

WS 2009/10. Diskrete Strukturen

Übungen zu Einführung in die Lineare Algebra und Geometrie

Algorithmen und Datenstrukturen

Dipl.-Volksw. Markus Pullen Wintersemester 2012/13

Datenstrukturen & Algorithmen Lösungen zu Blatt 4 FS 15

Lösungen zu Kapitel 5

3. Übungsblatt zur Lineare Algebra I für Physiker

Polynome und ihre Nullstellen

3. Übungsblatt zu Algorithmen I im SoSe 2017

Übungen zu Einführung in die Lineare Algebra und Geometrie

D-MATH, D-PHYS, D-CHAB Analysis I HS 2016 Prof. Manfred Einsiedler Philipp Wirth. Lösung 3

Strukturisomere der Alkane

HM I Tutorium 1. Lucas Kunz. 27. Oktober 2016

Isomorphismus. Definition Gruppen-Isomorphismus. Seien (G, +) und (G, ) Gruppen. Die Abbildung f : G G heißt Gruppen-Isomorphismus, falls gilt

Dynamische Systeme und Zeitreihenanalyse // Komplexe Zahlen 3 p.2/29

Datenstrukturen & Algorithmen

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

1 Potenzen und Polynome

x x y x y Informatik II Schaltkreise Schaltkreise Schaltkreise Rainer Schrader 3. November 2008

Schleifeninvarianten. Dezimal zu Binär

Ganzrationale Funktionen

Datenstrukturen und Algorithmen (SS 2013)

Einführung in die Theoretische Informatik

Lineare Algebra für D-ITET, D-MATL, RW. Beispiellösung für Serie 10. Aufgabe ETH Zürich D-MATH. Herbstsemester Dr. V. Gradinaru D.

8.2 Invertierbare Matrizen

Dynamisches Huffman-Verfahren

Alle Vektoren sind hier Spaltenvektoren. Eine Matrix besteht aus nebeneinandergeschrie-

3 Elementare Umformung von linearen Gleichungssystemen und Matrizen

Serie 3: Ringe, Körper, Vektorräume

Bipartite Graphen. Beispiele

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

A2.3 Lineare Gleichungssysteme

(a, b)-bäume / 1. Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss.

Der Dreyfus-Wagner Algorithmus für das Steiner Baum Problem

Zentralübung zur Vorlesung Diskrete Strukturen

Lineare Algebra II 3. Übungsblatt

Einführung in die Mathematik des Operations Research

Es wurde in der Vorlesung gezeigt, daß man die Matrixgleichung Ax=b auch in der Form

13 (2-4)-Bäume Implementierbare Funktionen. (2-4)-Bäume sind durch folgende Eigenschaften deniert: 1. Alle Äste sind gleich lang

Komplexe Zahlen. Allgemeines. Definition. Darstellungsformen. Umrechnungen

f(x 0 ) = lim f(b k ) 0 0 ) = 0

Kapiteltests zum Leitprogramm Binäre Suchbäume

Graphentheorie. Eulersche Graphen. Eulersche Graphen. Eulersche Graphen. Rainer Schrader. 14. November Gliederung.

4.13. Permutationen. Definition. Eine Permutation der Elementen {1,..., n} ist eine bijektive Abbildung

12 (2-4)-Bäume Implementierbare Funktionen. (2-4)-Bäume sind durch folgende Eigenschaften deniert: 1. Alle Äste sind gleich lang

DEUTSCHE BUNDESBANK Seite 1 Z Prüfzifferberechnungsmethoden zur Prüfung von Kontonummern auf ihre Richtigkeit (Stand: September 2015)

Musterlösung. 1 Relationen. 2 Abbildungen. TUM Ferienkurs Lineare Algebra 1 WiSe 08/09 Dipl.-Math. Konrad Waldherr

Tutoraufgabe 1 (Suchen in Graphen):

Algorithmen und ihre Programmierung -Teil 2-

Sätze über ganzrationale Funktionen

Duplizieren von Report-Vorlagen für die Erstellung umfangreicher Reports (ab ArtemiS SUITE 7.2)

Algo&Komp. - Wichtige Begriffe Mattia Bergomi Woche 6 7

Zentralübung zur Vorlesung Diskrete Strukturen (Prof. Mayr)

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 5. Asymptotische Laufzeitkomplexität Definition Regeln Beispiele

Mischungsverhältnisse: Nehmen wir an, es stehen zwei Substanzen (zum Beispiel Flüssigkeiten) mit spezifischen Gewicht a = 2 kg/l bzw.

Zweiter Teil des Tutorials. Workspace M-files Matrizen Flow Control Weitere Datenstrukturen Gemeinsames Beispiel erarbeiten

Lineare Algebra I. Prof. Dr. M. Rost. Übungen Blatt 6 (WS 2010/2011) Abgabetermin: Donnerstag, 27. November

Automatische Teilbarkeitstests

Blockmatrizen. Beispiel 1 Wir berechnen das Produkt von A R 4 6 mit B R 6 4 :

Lineare Gleichungssysteme

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

7. Sortieren Lernziele. 7. Sortieren

Graphdurchmusterung, Breiten- und Tiefensuche

Übungen zu Numerisches Programmieren

Fortgeschrittene Netzwerk- und Graph-Algorithmen

6.2. Ringe und Körper

Grundlagen der Mathematik

Bäume, Suchbäume und Hash-Tabellen

LR Zerlegung. Michael Sagraloff

Kapitel III Ringe und Körper

Grundkurs Mathematik I

Diskrete Strukturen. Hausaufgabe 1 (5 Punkte) Hausaufgabe 2 (5 Punkte) Wintersemester 2007/08 Lösungsblatt Januar 2008

LINEARE GLEICHUNGSSYSTEME. Wir besprechen hier, wie MathematikerInnen an das Lösen linearer Gleichungssysteme wie. x + y + z = 1

Mathematischer Vorbereitungskurs für Ökonomen

KLAUSUR zur Numerik I mit Lösungen. Aufgabe 1: (10 Punkte) [ wahr falsch ] 1. Die maximale Ordnung einer s-stufigen Quadraturformel ist s 2.

Mathematik II für Studierende der Informatik. Wirtschaftsinformatik (Analysis und lineare Algebra) im Sommersemester 2015

Algorithmen & Komplexität

Lineare Schieberegisterfolgen

$Id: linabb.tex,v /01/09 13:27:34 hk Exp hk $

2.2 Allgemeine (vergleichsbasierte) Sortierverfahren

Theorie und Praxis geometrischer Algorithmen

2 Darstellung von Zahlen und Zeichen

Addition, Subtraktion und Multiplikation von komplexen Zahlen z 1 = (a 1, b 1 ) und z 2 = (a 2, b 2 ):

WURZEL Werkstatt Mathematik Polynome Grundlagen

Algebraische und arithmetische Algorithmen

1. Definition der komplexen Zahlen Ziel: neuerliche Zahlbereichserweiterung, so dass auch Quadratwurzeln aus negativen Zahlen

Grundlagen Algorithmen und Datenstrukturen Kapitel 13

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Multiplizierer. Beispiel komplexer arithmetischer Schaltung. Langsamer als Addition, braucht mehr Platz. Sequentielle Multiplikation

Satz 324 Sei M wie oben. Dann gibt es für ein geeignetes k Konstanten c i > 0 und Permutationsmatrizen P i, i = 1,...

Strukturierte Extraktion von Text aus PDF. Präsentation der Masterarbeit von Fabian Schillinger

GERICHTETER GEWICHTETER GRAPH DESIGNDOKUMENT

Kapitel 3. Kapitel 3 Gleichungen

Einleitung. Kapitel 1

2.9 Die komplexen Zahlen

Kostenmodell. Daniel Graf, Tobias Pröger. 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016)

Transkript:

Dokumentation zum Softwarepraktikum Abzählen und Konstruktion der Strukturisomere von Alkanen, Alkenen und Alkinen Bearbeitet von: Sabine Böhm Florian Häberlein Betreuer: Dr. Axel Kohnert Dipl.-math. Sascha Kurz Universität Bayreuth Wintersemester 2004/2005

1. Abzählen der Strukturisomere von Alkanen, Alkenen und Alkinen Basierend auf dem Artikel Anzahl von Strukturisomeren der Alkane von Sascha Kurz haben wir seine Implementierung des Algorithmus geändert und den Algorithmus auf das Abzählen von Alkenen und Alkinen erweitert. Die Vorgehensweise wird im folgenden Kapitel beschrieben. 1.1 Änderung der Implementierung des Algorithmus zum Abzählen der Strukturisomere der Alkane Die ursprüngliche Implementierung des Algorithmus 1.14 (counting alkanes) aus dem oben genannten Artikel basiert auf der Idee, dass Polynome von erzeugenden Funktionen der Alkane als Vektoren dargestellt werden können, in deren i-ten Komponente der i-te Koeffizient des Polynoms steht, wobei nur ganzzahlige Koeffizienten vorkommen. Unsere Aufgabe war es nun die Datenstruktur der Polynome so umzuändern, dass ein Polynom in einer ganzen Zahl gespeichert werden kann, da die Multiplikation von Polynomen dargestellt durch Zahlen eine geringere Komplexität und damit eine geringere Laufzeit hat als die Multiplikation der Polynome dargestellt durch Vektoren. Diese Tatsache beweist folgendes Diagramm, das die Rechenzeiten eines Programms darstellt, das zwei Polynome 10 mal multipliziert. Zeit in Sekunden Grad des Polynoms 900 800 700 600 500 400 300 200 100 0 Rechenzeit in Sekunden bei der Implementierung mit Vektoren Rechenzeit in Sekunden bei der Implementierung mit Zahlen 10 50 100 200 300 400 500 750 1000 0,01 0,37 1,53 7,26 18,63 41,05 85,61 217,17 814,36 0 0,01 0,16 1,65 3,53 7,19 7,44 36,07 37,35 Unter der Annahme, dass alle Koeffizienten des Polynoms kleiner als 4 n sind, wobei n die maximale Anzahl der C-Atome der abzuzählenden Alkane ist, kann man also eine bijektive Funktion mit der zugehörigen Umkehrfunktion vector2number: IN n IN number2vector: IN IN n definieren, die die geforderten Ansprüche erfüllt. Da wir diese Funktionen nach der kompletten Umänderung der Implementierung nicht mehr benötigten, verzichten wir hier auf die genaue Funktionsdefinition und richten unser Augenmerk auf das Ergebnis der Abbildung: Bei einer gegebenen Funktion f(x) = a 0 + a 1 x 1 + a 2 x 2 +... + a n x n werden die

Koeffizienten in einer Zahl gespeichert, die sich aus n+1 Blöcken der jeweiligen Größe 2n-Bit zusammensetzt. In jedem Block können daher Zahlen bis zu einer Größe von 2 2n = 4 n gespeichert werden. Da jeder Koeffizient des Polynoms kleiner 4 n ist, ist somit die Abbildung eindeutig, wohldefiniert und bijektiv. Zur Veranschaulichung ist hier der allgemeine Aufbau der Zahl dargestellt: 011... 0001 110...1011................ 011...1101 110... 1001 (n+1)-ter Block, der den Koeffizienten a n mit 2n-Bits darstellt n-ter Block, der den Koeffizienten a n-1 mit 2n- Bits darstellt 2. Block, der den Koeffizienten a 1 mit 2n- Bits darstellt 1. Block, der den Koeffizienten a 0 mit 2n- Bits darstellt Nachdem diese erste Hürde geschafft war, haben wir die verwendeten Funktionen im Algorithmus der neuen Datenstruktur angepasst. Die Funktion add, die vorher zwei Polynome in n+1 Schritten addierte, addiert nun die beiden Polynome, dargestellt durch Zahlen, in einem Schritt. Ebenso die Funktion multiply, die vorher zwei Polynome komponentenweise in mehreren Schritten multiplizierte, leistet nun dasselbe, jedoch in einem Schritt. Da bei der Multiplikation von zwei Polynomen vom Grad n auch Koeffizienten a m 0 mit m>n auftreten, uns aber bei der Berechnung nur Koeffizienten mit mn interessieren, haben wir ein Gesamtschema eingeführt. Dies ist eine Zahl, die aus (n+1)*2n-bit 1-ern besteht und mit deren Hilfe man durch den Bitweise-Und-Operator die überflüssigen Koeffizienten abschneiden kann. Die Änderung der Funktionen CycleIndex_2, CycleIndex_3 und CycleIndex_4 war nun der nächste Schritt. In diesen Funktionen wird neben dem Addieren und Multiplizieren von Polynomen auch die Multiplikation eines Polynoms mit einer natürlichen Zahl, das Teilen eines Polynoms durch eine natürliche Zahl und die Berechnung von f(x m ) durchgeführt. Das Multiplizieren und das Dividieren durch eine natürliche Zahl wird für jeden Koeffizienten einzeln vorgenommen, indem man die Zahl mit invertierter Blockreihenfolge in einer temporären Zahl speichert und dann beim wiederholten Rückspeichern mit erneut invertierter, also der ursprünglichen Blockreihenfolge, für jeden Block mit der natürlichen Zahl multipliziert bzw. durch die natürliche Zahl dividiert. Die Berechnung von f(x m ) wird wieder mit Hilfe von Bitoperatoren durchgeführt. Dazu wird das Polynom bis zum Grad n / m in umgekehrter Reihenfolge der Blöcke, welche die Koeffizienten beschreiben, in einer temporären Zahl gespeichert. Beim Rückspeichern der Zahl werden nun zwischen den Blöcken immer m-1 Blöcke bestehend aus 2n 0-ern eingefügt. Nun steht in der neuen Zahl im 1-ten Block gerade a 0, im m-ten Block steht a 1 usw. Insgesamt steht nun in der neuen Zahl das Polynom f(x m ), was gerade gewünscht war. Nachdem nun die Datenstruktur geändert wurde und die Funktionen der neuen Datenstruktur angepasst wurden, ergab sich noch ein Problem, dass vor allem bei der Berechnung für kleinere n auftrat: In den Funktionen CycleIndex_2, CycleIndex_3 und CycleIndex_4 können die Koeffizienten von Zwischenergebnissen größer als 4 n werden. Damit vergrößerte sich der Platzbedarf für die Koeffizienten in der Zahl und der Platz des zugewiesenen Blockes reicht nicht mehr aus. Die Folge war, dass dadurch andere Koeffizienten verändert wurden und es zu falschen Ergebnissen kam. Um dies zu verhindern wurde die alte Blockgröße 2n vergrößert, so dass auch für Zwischenergebnisse die größer als 4 n sind ausreichend Platz vorhanden ist. Das folgende Diagramm zeigt die durchschnittlichen Rechenzeiten der Programme für die beiden Implementierungen und für verschiedene n. Dabei wurde für die Implementierung mit Zahlen eine von Sascha Kurz verbesserte Version verwendet.

Zeit in Sekunden (logarithmisch) Anzahl der C-Atome 10000 1000 100 10 1 0,1 0,01 20 40 80 160 320 640 Rechenzeit in Sekunden bei der Implementierung mit Vektoren Rechenzeit in Sekunden bei der Implementierung mit Zahlen 0,01 0,09 1,26 11,27 103,58 1125,15 0,01 0,06 0,58 8,81 157,3 3360,84 Man sieht deutlich, dass für mehr als 160 C-Atome die Implementierung mit Vektoren wieder schneller ist. Dies liegt daran, dass im Originalprogramm sehr speicher- und rechenzeitsparend gearbeitet wurde. Die durch uns veränderte Version birgt noch weitere Zeiteinsparmöglichkeiten, sodass die theoretisch schnellere Implementierung mit Zahlen (siehe Diagramm oben) auch praktisch umgesetzt wirklich schneller ist. 1.2 Erweiterung des Algorithmus auf das Abzählen der Strukturisomere der Alkene Ausgehend von der neuen Implementierung mit Zahlen haben wir den Algorithmus 1.14 (counting alkanes) aus dem oben genannten Artikel so geändert, dass nun die Strukturisomere der Alkene gezählt werden. Dazu wurde die Grenze der maximalen Höhe der Teilbäume von (n+1)/2 auf n-2 erhöht, da bei einem Alken mit n C-Atomen die größte Höhe für einen Teilbaum gerade n-2 ist. Die Berechnung der Wurzelbäume blieb natürlich gleich. Lediglich das Zusammensetzen der Wurzelbäume zu einem Alken hat sich verändert. Dazu haben wir 5 Fälle unterschieden, wobei wir im folgenden Modell annehmen, dass das jeweilige Isomer so gedreht oder gespiegelt ist, dass einer Wurzelbäume mit der aktuell größten Höhe der Wurzelbaum W1 ist. W1 W3 W2 W4 1. Wurzelbaum W1 ist der einzige Wurzelbaum mit der aktuell größten Höhe, alle anderen Wurzelbaum haben eine kleinere Höhe 2. Die Wurzelbäume W1 und W2 haben beide die aktuell größte Höhe, die Wurzelbäume W3 und W4 haben kleinere Höhe 3. Wurzelbaum W1 und genau einer der beiden Wurzelbäume W3 oder W4 haben die aktuell größte Höhe, die beiden anderen haben eine kleinere Höhe 4. Drei der vier Wurzelbäume haben die aktuell größte Höhe, der vierte hat eine kleinere Höhe

5. Alle vier Wurzelbäume haben die aktuell größte Höhe 1.3 Erweiterung des Algorithmus auf das Abzählen der Strukturisomere der Alkine Wie bei der Änderung des Algorithmus 1.14 (counting alkanes) für Alkene haben wir die Grenze der maximalen Höhe der Teilbäume der Alkine auf n-2 erhöht. Die Berechnung der Wurzelbäume blieb natürlich ebenfalls gleich. Beim Zusammensetzen der Wurzelbäume zu Alkinen haben wir zwei Fälle unterschieden, wobei wir im folgenden Modell annehmen, dass das jeweilige Isomer so gedreht ist, dass W1 ein Wurzelbaum mit der aktuell größten Höhe ist. W1 W2 1. Wurzelbaum W1 und Wurzelbaum W2 haben die aktuell größte Höhe 2. Wurzelbaum W1 hat die aktuell größte Höhe und Wurzelbaum W2 hat eine kleinere Höhe

2. Konstruktion der Strukturisomere der Alkene und Alkine Basierend auf dem Artikel Anzahl von Strukturisomeren der Alkane von Sascha Kurz haben wir seine Implementierung der Algorithmen zur Konstruktion von Alkanen geändert und den Algorithmus auf die Konstruktion von Alkenen und Alkinen erweitert. Die Vorgehensweise wird im folgenden Kapitel beschrieben. 2.1 Erweiterung des Algorithmus auf die Konstruktion der Alkene Ausgehend von der Implementierung der Algorithmen 1.9, 1.12 und 1.13 von Sascha Kurz haben wir die Implementierung auf die Konstruktion von Alkene erweitert. Wir benutzen wieder das gleiche Modell eines Alkens wie in Kapitel 1.2. Die Datenstruktur eines Alkens beschränkt sich somit auf die Speicherung der vier Wurzelbäume. Eine Unterscheidung ob die längste Kette der C-Atome gerade oder ungerade ist wird nicht mehr benötigt. Die Konstruktion ist in acht Fälle gegliedert um alle möglichen Moleküle zu konstruieren. Dabei läuft der Wurzelbaum W1 alle möglichen Wurzelbäume der aktuellen maximalen Höhe durch. Alle anderen Wurzelbäume laufen alle restlichen Höhen inklusive der aktuellen maximalen Höhe durch, wobei folgende Fälle unterschieden werden: 1. Alle Wurzelbäume sind ungleich: W1 > W2 > W3 > W4 2. Zwei Wurzelbäume sind gleich (erster Fall): W1 > W2 > W3 = W4 3. Zwei Wurzelbäume sind gleich (zweiter Fall): W1 = W2 > W3 > W4 4. Zwei Wurzelbäume sind gleich (zweiter Fall): W1 > W2 = W3 > W4 5. Je zwei Wurzelbäume sind gleich: W1 = W2 > W3 = W4 6. Drei Wurzelbäume sind gleich (erster Fall): W1 > W2 = W3 = W4 7. Drei Wurzelbäume sind gleich (zweiter Fall): W1 = W2 = W3 > W4 8. Alle vier Wurzelbäume sind gleich: W1 = W2 = W3 = W4 In jedem der acht Fälle werden dann alle möglichen Stellungen der Wurzelbäume zu der Liste der Alkene hinzugefügt. Zur graphischen Ausgabe der Alkene wird eine XML-Datei im GRAPHDB-Format erstellt. Dabei werden die Wurzelbäume Knoten für Knoten durchgelaufen und anschließend werden noch die zugehörigen H-Atome in die Datei ausgegeben. Die Dokumentation zum GRAPHDB-Format findet man unter http://btm2xg.mat.uni-bayreuth.de/graphdb/. 2.2 Erweiterung des Algorithmus auf die Konstruktion der Alkine Ausgehend von der Implementierung der Algorithmen 1.9, 1.12 und 1.13 von Sascha Kurz haben wir die Implementierung auf die Konstruktion von Alkine erweitert. Wir benutzen wieder das gleiche Modell eines Alkins wie in Kapitel 1.3. Die Datenstruktur eines Alkins beschränkt sich somit auf die Speicherung der zwei Wurzelbäume. Eine Unterscheidung ob die längste Kette der C-Atome gerade oder ungerade ist wird nicht mehr benötigt. Bei der Konstruktion werden für den Teilbaum W1 alle möglichen Bäume mit der aktuellen maximalen Höhe h durchlaufen. Für den rechten Teilbaum werden alle Teilbäume bis zur Höhe h durchlaufen. Die jeweiligen Alkine werden dann zur Liste der Alkine hinzugefügt. Zur graphischen Ausgabe der Alkene wird eine XML-Datei im GRAPHDB-Format erstellt. Dabei werden die Wurzelbäume Knoten für Knoten durchgelaufen und anschließend werden noch die zugehörigen H-Atome in die Datei ausgegeben. Die Dokumentation zum GRAPHDB-Format findet man unter http://btm2xg.mat.uni-bayreuth.de/graphdb/.