1 unstable release
0.1.0 | Aug 16, 2022 |
---|
#1779 in Algorithms
210KB
5.5K
SLoC
PTAS für schwere Probleme auf planaren Graphen
Ein PTAS (engl.: Polynomial Time Approximation Scheme) ist ein Approximationsalgorithmus für ein (meist schweres) Problem, der einen Wert $ε > 0$ als Parameter hat und eine Lösung ausgibt, die bei Minimierungsproblemen höchstens $(1 + ε)$-Mal und bei Maximierungsproblemen mindestens $(1 - ε)$-Mal so groß wie die Optimallösung ist. Wichtig ist, dass die Laufzeit des Algorithmus polynomiell in $n$ sein muss.
Bakers Ansatz
Eine Technik zum Entwurf von PTAS für verschiedene schwere Probleme auf planaren Graphen wurde 1994 von Baker entwickelt [^1]. Im Wesentlichen werden folgende Schritte durchgeführt:
- Aufteilen des Eingabegraphen in k-außenplanare Ringe (wobei $k=1/ε$)
- Berechnung der optimalen Lösung auf jedem Ring mit Hilfe von Baumzerlegungen und dynamischer Programmierung
- Kombinieren der optimalen Teillösungen zu approximativer Gesamtlösung
Projektbeschreibung
Im Rahmen dieses Projekts wurde Bakers Ansatz implementiert. Hier wird auf die verwendeten Datenstrukturen und Algorithmen zum Umgang mit planaren Graphen und planaren Einbettungen eingegangen. Hier werden die die Algorithmen für die einzelnen Schritte des PTAS beschrieben. Eine Übersicht über die durchgeführen Laufzeittests ist hier zu finden.
[^1]: BAKER, BRENDA S. 1994. Appoximation Algorithms for NP-Complete Problems on Planar Graphs, J. ACM 41, January 1994, pp 153-180
Das CLI-Tool
Erstellen
Um das CLI Tool zu bauen, kann folgender Befehl verwendet werden:
cargo build --release --features="cli"
Verwendung
Das CLI Tool kann hiernach folgendermaßen verwendet werden:
./target/release/graph-algo-ptas-cli <options>
- oder
cargo run --release --features="cli" -- <options>
(Hierbei wirdcargo build
nicht benötigt.)
Dabei können folgende Optionen angegeben werden:
USAGE:
graph-algo-ptas-cli [OPTIONS] [SUBCOMMAND]
OPTIONS:
-g, --generate <n> Generate Random graph with n vertices
-h, --help Print help information
-i, --input <FILE> File in dot format to read input graph from
-V, --version Print version information
SUBCOMMANDS:
embed Generates an embedding for the graph
help Print this message or the help of the given subcommand(s)
independent-set Calculates Maximal Independent Set (Default)
print Prints the generated/input graph
vertex-cover Calculates Minimal Vertex Cover
⚠️ Hierbei ist zu beachten, dass die Option
-g <n>
oder-i <FILE>
immer angegeben werden muss.
Die Library
Zur Verwendung dieser Crate
muss einfach nur graph-algo-ptas
zur cargo.toml
hinzugefügt werden. Eine Dokumentation aller zur Verfügung stehenden Funktionen befindet sich hier.
Dependencies
~5MB
~92K SLoC