2009-05-07 6 views
4

Ich versuche, ein VB6-Programm zu schreiben (für ein Lachen), das Ereigniszeiten + den kritischen Pfad, der nur auf einem PRECEDENCE TABLE basiert, berechnet. Ich möchte, dass meine Schüler es als Prüfmechanismus verwenden, dh. alles tun, ohne das Aktivitätsnetzwerk zu zeichnen. Ich bin froh, dass ich das alles machen kann, sobald ich für jede Aktivität Start und Ziel habe. Wie ordne ich Ereignisse zu, ohne das Netzwerk zu zeichnen. Alles, was mir einfällt, funktioniert für ein bestimmtes Beispiel und funktioniert dann nicht für ein anderes. Ich brauche einen allgemeineren Algorithmus und es macht mich mental. Hilfe!Kritische Pfadanalyse

Ich bin kein professioneller Programmierer - ich mache das in meiner Freizeit, um Lehrmaterialien zu erstellen - einfaches Englisch würde wirklich geschätzt werden.

+0

Können Sie Ihr Problem etwas genauer beschreiben? – BobbyShaftoe

+0

1. Der Student gibt Aktivitätsnamen, Abhängigkeiten und Aktivitätsdauern ein. Mein Programm erzeugt ein Kaskadendiagramm, die Projektdauer und (mehr oder weniger) den kritischen Pfad. Das funktioniert. Sobald ich das Start- und Zielereignis für jede Aktivität kenne, berechnet mein Programm die frühesten und spätesten Ereigniszeiten, die Gesamtschwimmerwerte und gibt die kritischen Ereignisse und Aktivitäten an. Das funktioniert. Mein Problem ist die Kennzeichnung der Start- und End-Ereignisse für jede Aktivität auf der Grundlage der Rangfolge-Tabelle. Ich kann dies für ein bestimmtes Beispiel tun (mit oder ohne Dummies), aber ich kann es nicht allgemein machen. Kann es gemacht werden? –

Antwort

5

Okay, so haben Sie eine Präzedenztabelle, die ich nehme eine Tabelle von Paaren wie

A → B
B → C

und so weiter zu sein, für Aktivitäten {A, B, C}. Jede der Aktivitäten hat auch eine Dauer und (vielleicht) eine Verteilung auf die Dauer, also wissen Sie, dass A 3 Tage dauert, B 2 und so weiter. Dies würde als "A muss vor B beendet sein, das vor C beendet werden muss" interpretiert.

Richtig?

Nun ist es naheliegend, den Graphen von Aktivitäten und Pfeilen zu konstruieren - tatsächlich haben Sie den Graphen in der Inzidenzliste. Der kritische Teil ist der Pfad mit der größten Gewichtung (größte Summe von Zeiten). Dies ist ein longest-path problem, und unter der Annahme, dass Ihr Diagramm nicht zyklisch ist (was ohnehin schlecht wäre), kann es mit topological sort oder transitive closure gelöst werden.

+1

Mehr oder weniger. Mein Problem ist, dass eine typische A-Level-Frage eine Tabelle mit mehreren Abhängigkeiten hat, so dass E von B, C und D (sagen wir) abhängt und dann F von D und E (sagen wir) abhängt. Es sind diese vielfältigen Verbindungen, die mich verrückt machen. Ich bin heute auf die Idee einer topologischen Sorte gestoßen. Ich weiß nicht viel darüber, aber ist das der richtige Weg? (Ich bin O. K. mit Vermeidung von Zyklen) –

+1

Yup, das wäre es. Die Links sollten Ihnen helfen. Ihre Diagramme sollten azyklisch sein, da Sie sonst eine Aktivität haben, die letztendlich von sich selbst abhängt. Topo-Art und transitive Schließung sind wirklich isomorph; eine ist auf Matrizen (die Kantenmatrix), die andere verwendet ein Graphenmodell. Geben Sie einige Beispieldaten in die Frage ein und ich helfe Ihnen dabei, das herauszufinden. (heh) Ich kenne VB6 nicht bei * all *, aber ich kann dir einen Pseudocode geben, der helfen sollte. –

+0

Das ist was ich wirklich will. Ich bin stolz. Ich möchte es selbst sortieren, aber ich brauche einen Hinweis. Ich werde dir zeigen, was ich morgen machen will. In gewisser Weise ist es nicht der Code, der mich nervt, es ist der grundlegende Ansatz. Ich kann (versuchen) den Code selbst zu schleifen. Ich werde einige der von Ihnen vorgeschlagenen Links ausprobieren. Ta! –

Verwandte Themen