Giter VIP home page Giter VIP logo

089 / graphs Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 0.0 996 KB

Ein tolles Tool für und mit Graphen. Es entstand im Rahmen der Vorlesung Algorithmen und Datenstrukturen II, Hochschule München im Sommersemester 2017 (https://ob.cs.hm.edu/lectures/algdatii.html). Mit diesem Tool können verschiedene Eigenschaften von Graphen ermittelt und ausgegeben werden. Die Ergebnisse werden übersichtlich dargestellt und können in verschiedenen Ausgabeformaten ausgegeben werden.

Home Page: https://089.github.io/Graphs/

License: MIT License

CMake 2.71% C++ 91.06% Shell 6.23%
graph-algorithms graphs graphviz-dot

graphs's People

Contributors

089 avatar kvn-stgl avatar mniggl avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

graphs's Issues

Feature: isMultigraph

Wiki DE

Mehrfachkante/Multikante: Zwischen zwei Knoten verlaufen in einem Multigraphen mehrere gleichartige Kanten. Die einzelnen Kanten werden als parallele Kanten bezeichnet.

Wiki EN

Multiple edges are two or more edges that connect the same two vertices. A loop is an edge (directed or undirected) that connects a vertex to itself; it may be permitted or not, according to the application. In this context, an edge with two different ends is called a link.
A multigraph, as opposed to a simple graph, is an undirected graph in which multiple edges (and sometimes loops) are allowed.
Where graphs are defined so as to disallow both multiple edges and loops, a multigraph is often defined to mean a graph which can have both multiple edges and loops,[6] although many use the term pseudograph for this meaning.[7] Where graphs are defined so as to allow both multiple edges and loops, a multigraph is often defined to mean a graph without loops.[8]

main zu command line tool umformen

Beispiel wget

user@computer:~$ wget
wget: URL fehlt
Syntax: wget [OPTION]... [URL]...

»wget --help« gibt weitere Informationen.
user@computer:~$ wget --help
GNU Wget 1.17.1, ein nicht-interaktives Netz-Werkzeug zum Download von Dateien.
Syntax: wget [OPTION]... [URL]...

Erforderliche Argumente zu langen Optionen sind auch bei kurzen Optionen erforderlich.

Beim Start:
  -V,  --version                   Programmversion von Wget anzeigen und beenden
  -h,  --help                      diese Hilfe anzeigen
  -b,  --background                nach dem Starten in den Hintergrund gehen
  -e,  --execute=BEFEHL            einen ».wgetrc«-artigen Befehl ausführen

Log-Datei schreiben und Eingabe-Datei:
  -o,  --output-file=DATEI         Protokoll-Meldungen in DATEI schreiben
  -a,  --append-output=DATEI       Meldungen an DATEI anhängen
  -d,  --debug                     Debug-Ausgabe anzeigen
  -q,  --quiet                     keine Ausgabe von Meldungen
  -v,  --verbose                   ausführliche Meldungen (Vorgabe)
  -nv, --no-verbose                weniger Meldungen, aber nicht stumm

[...]
Fehlerberichte und Verbesserungsvorschläge bitte an <[email protected]>
schicken.

Für die deutsche Übersetzung ist die Mailingliste
<[email protected]> zuständig.

Tool umbenennen

  1. Tool von graphtool(Gui) in graphs umbenennen
  2. CMake und Co entsprechend anpassen
  3. Testen, dass nichts kaputt gegangen ist

BUG in isForest

Bitte fixen, falls noch Zeit und Lust:

Für graphtoolGui -iml "[0 1 1 1 1 0 0 0 0 0 0; 1 0 0 0 0 0 0 0 0 0 0; 1 0 0 0 0 0 0 0 0 0 0; 1 0 0 0 0 0 0 1 1 1 0; 1 0 0 0 0 1 1 0 0 0 0; 0 0 0 0 1 0 0 0 0 0 0; 0 0 0 0 1 0 0 0 0 0 0; 0 0 0 1 0 0 0 0 0 0 0; 0 0 0 1 0 0 0 0 0 0 0; 0 0 0 1 0 0 0 0 0 0 1; 0 0 0 0 0 0 0 0 0 1 0]" -na gibt die Function hasCycle() true statt false aus (siehe #57. Das führt dazu, dass auch deine Funktion nicht gut funktioniert.

Im Codeteil

    if(hasCycle() || !isDirected()) {
        isForestFlag = false;
        return false;
    }

bin ich mir nicht ganz sicher, ob !isDirected() an der Stelle richtig ist. Warum sollte ein ungerichteter Graph ohne weitere Überprüfung kein Wald sein (siehe Beispiel oben)?

Feature: hat Zyklus (boolean)

Überprüft den gegebenen Graphen auf einen Zyklus.
Sobald der erste Zyklus gefunden wurde, wird true zurück gegeben.
Falls kein Zyklus gefunden wurde, wird false zurück gegeben.

Feature: Graph is vollständig

[...] bezeichnet einen einfachen Graph, in dem jeder Knoten mit jedem anderen Knoten durch eine Kante verbunden ist. Der vollständige Graph mit n Knoten ist (bis auf Isomorphie) eindeutig bestimmt und wird mit K_n bezeichnet.

Feature: isSimpleGraph

Ein einfacher Graph (auch schlichter Graph) ist in der Graphentheorie ein ungerichteter Graph ohne Mehrfachkanten und ohne Schleifen.

fix isSymmetricMatrix

  1. muss in "isSquareMatrix" umbenannt werden. Eine Adjazenzmatrix muss quadratisch sein, nicht symmetrisch.
  2. Doku in .h-Datei ergänzen
  3. erst nach den pull requests #39 #43

Feature: isFreeOfLoops

(boolean) gibt an, ob Graph schleifenfrei ist (keine Werte auf der Hauptdiagonalen)

  • Hilfsfunktion für isSimpleGraph #28

Repo übernehmen?

Ich habe Ihnen Admin-Rechte in diesem Repo gegeben.

Sie können damit das Repo in ihren eigenen Account oder eine andere Organisation übernehmen.

Gehen Sie dazu auf Settings und scrollen Sie ganz nach unten. In der "Danger Zone" finden Sie "Transfer ownership".

Wenn Sie das Repo nicht übernehmen wollen, werde ich es Ende Juli löschen.

Feature: indeg/outdeg (Grad) von Knoten v_1 ist (int)

  1. Für die Berechnung des jeweiligen Grades reicht es, bezogen auf die Adjazenzmatrix, wenn für
    • outdeg: alle Werte > 0 in der Zeile des jeweiligen Knotens gezählt werden.
    • indeg: alle Werte > 0 in der Spalte des jeweiligen Knotens gezählt werden.
  2. Für ungerichtete Graphen gilt: indeg = outdeg
  3. Aus Wikipedia:

Der Grad d_G(v) in einem Graphen ist die Anzahl der Kanten, die den Knoten v mit anderen Knoten verbinden. Eine Schlinge wird dabei doppelt gezählt. Oft wird auch die Notation \deg _G(v) (engl. degree) verwendet.

Boost support verbessern

Derzeit wird die Systemeigene Boost-Version verwendet. Dies führ zu Inkompatibilität und Komplexität beim kompilieren (Windows). Boost sollte als ExternalProject in der CMake definiert werden.

Alle Features werden sinnvoll getestet

  1. Bei der Implementierung eines Features ist der bearbeitende Entwickler für den Unittest verantwortlich
  2. Wir schauen aber auch mit wachem Auge auf den Code der Kollegen und überprüfen insbesondere kompliziertere Algorithmen/Programmkonstrukte gemeinsam

Aus der Aufgabenstellung

Unittests mit “vernünftiger” Code-Abdeckung

BUG in hasCycle()

Bitte fixen, falls noch Zeit und Lust (Wäre gut, weil isForest abhängt):

Für graphtoolGui -iml "[0 1 1 1 1 0 0 0 0 0 0; 1 0 0 0 0 0 0 0 0 0 0; 1 0 0 0 0 0 0 0 0 0 0; 1 0 0 0 0 0 0 1 1 1 0; 1 0 0 0 0 1 1 0 0 0 0; 0 0 0 0 1 0 0 0 0 0 0; 0 0 0 0 1 0 0 0 0 0 0; 0 0 0 1 0 0 0 0 0 0 0; 0 0 0 1 0 0 0 0 0 0 0; 0 0 0 1 0 0 0 0 0 0 1; 0 0 0 0 0 0 0 0 0 1 0]" -na gibt die Function hasCycle() true statt false aus, was der graphischen Darstellung widerspricht.

Webseite in gh-pages

Der Branch GH-Pages dient als GitHub-Branch für die die Webseite. Somit können alle Dateien, welche in diesen Branch abgelegt werden, live betrachtet werden.
Die vorhandene Dokumentation für Doxygen bleibt dabei unberührt.

Feature: Graph ist regulär

In der Graphentheorie heißt ein Graph regulär, falls alle seine Knoten gleich viele Nachbarn haben, also den gleichen Grad besitzen. Bei einem regulären gerichteten Graphen muss weiter die stärkere Bedingung gelten, dass alle Knoten den gleichen Eingangs- und Ausgangsgrad besitzen.[1] Ein regulärer Graph mit Knoten vom Grad k wird k-regulär oder regulärer Graph vom Grad k genannt.

Ist Wald

Angabe, ob der Graph ein gerichteter Wald ist (siehe Folien)

Features auswählen

Folgende Features sind derzeit geplant. Wenn du eines bearbeiten möchtest, hake es ab und erstelle ein Issue mit dem Bezeichnungsschema "Feature: Graph hat Kreis" und einer kurzen, aber guten Beschreibung für genau dieses Feature. Ordne dir das Feature bitte selbst zu. Nicht aufgeführte Features bitte mir mitteilen, damit ich sie aufnehmen kann.

Evtl. ist es sinnvoll den Ergebnissen noch Begründungen mitzuliefern, die als Log oder dergleichen ausgegeben werden (z.B. Graph ist regulär weil alle Knoten gleich viele Nachbarn haben)

Bezogen auf einen Graph G = (V, E) (gewünschte/mögliche Rückgabewerte stehen in Klammern):

  • hat Kreis (boolean)
  • hat Kreis (Teilgraph)
  • hat Zyklus (boolean)
  • hat Hamiltonkreis (boolean)
  • hat Hamiltonkreis (Teilgraph/Graph)
  • hat Eulerkreis (boolean)
  • hat Eulerkreis (Teilgraph/Graph)
  • hat offenen Eulerzug/-pfad/-weg (boolean)
  • hat offenen Eulerzug/-pfad/-weg (Teilgraph/Graph)
  • ist Kreis (boolean) überprüft ob übergebener Parameter ein Kreis in G ist
  • ist Zyklus (boolean) überprüft ob übergebener Parameter ein Zyklus in G ist
  • ist Hamiltonkreis (boolean) überprüft ob übergebener Parameter ein Hamiltonkreis in G ist
  • ist Eulerkreis (boolean) überprüft ob übergebener Parameter ein Eulerkreis in G ist
  • ist offenen Eulerzug/-pfad/-weg (boolean) überprüft ob übergebener Parameter ein offener Eulerzug in G ist
  • ist Baum
  • ist vollständig
  • ist regulär (boolean)
  • Anzahl Knoten (int)
  • Anzahl Kanten (int)
  • hat Weg (boolean), überprüft, ob G einen bestimmten Weg (Parameter) hat
  • Länge des Weges (int)
  • Ist einfacher Weg (boolean)
  • v_1 ist Nachbar von v_2 (boolean), nach Übergabe von zwei Parametern; abhängig von (Un-)Gerichtetheit von G
  • get Adjazenzmatrix (Array/BitSet oder dergleichen mit geeignetem Datentyp)
  • get Inzidenzmatrix (Array/BitSet oder dergleichen mit geeignetem Datentyp)
  • v_1 ist erreichbar von v_2 (boolean), gibt an ob es einen Weg von v_1 nach v_2 gibt
  • indeg/outdeg (Grad) von Knoten v_1 ist (int)
  • hat x Zusammenhangskomponenten (int)
  • ist planar (boolean)
  • ist isomorph (boolean) überprüft ob der als Parameter übergebene Graph G_1 isomorph zu G ist
  • ist Wald (boolean)
  • ist bipartit (boolean)
  • get Spannbaum (Teilgraph)
  • ist Clique (boolean) überprüft, ob der als Parameter übergebene Teilgraph ein eine Clique ist
  • hat Clique (Teigraph) mithilfe Greedy-Algorithmus (! NP-vollständig)
  • ist Kante im Graphen (boolean), als Parameter ein Paar ((v, v′ ), (v′ , v)) übergeben
  • Graph ist gerichtet (bool == true), ungerichtet (bool = false)
  • isFreeOfLoops, (boolean) gibt an, ob Graph schleifenfrei ist (keine Werte auf der Hauptdiagonalen)
  • isSimpleGraph (boolean), "ein ungerichteter Graph ohne Mehrfachkanten und ohne Schleifen." (wikipedia)
  • isMultigraph, (boolean) "Zwischen zwei Knoten verlaufen in einem Multigraphen mehrere gleichartige Kanten."

Projekt anlegen

  1. Github-Repo anlegen/befüllen
  2. Clion sinnvoll einrichten
    1. moderner C++-Code (C++11, C++14)
    2. Einrückung festlegen (Tab oder Spaces)
  3. .gitignore erstellen
  4. Ergebnis pushen

Ziel: Einer legt die gemeinsamen Einstellungen der Entwicklungsumgebung fest. Die anderen können mit diesem Stand mit ihrer Arbeit beginnen.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.