2009-05-07 14 views
4

J'essaye d'écrire un programme VB6 (pour rire) qui calculera les temps d'événement + le chemin critique JUSTE BASÉ SUR UNE TABLE DE PRÉCÉDANCE. Je veux que mes étudiants l'utilisent comme un mécanisme de vérification. tout faire sans dessiner le réseau d'activités. Je suis heureux de pouvoir faire tout cela une fois que j'ai commencé et terminé les événements pour chaque activité. Comment allouer des événements sans dessiner le réseau. Tout ce que je propose fonctionne pour un exemple spécifique et ne fonctionne pas pour un autre. J'ai besoin d'un algorithme plus général et ça me rend mental. Aidez-moi!analyse de chemin critique

Je ne suis pas un programmeur professionnel - je le fais dans mon temps libre pour créer des ressources pédagogiques - un anglais simple serait vraiment apprécié.

+0

Pouvez-vous fournir un peu plus de détails sur votre problème? – BobbyShaftoe

+0

1. L'étudiant entre les noms d'activité, les dépendances et les durées d'activité. Mon programme produira un diagramme en cascade, la durée du projet et (plus ou moins) le chemin critique. Cela marche. Une fois que je connaîtrai l'événement de départ et d'arrivée pour chaque activité, mon programme calculera les temps de l'événement le plus tôt et le plus tard, le total des flottants et donnera les événements et les activités critiques. Cela marche. Mon problème est d'étiqueter les événements de début et de fin pour chaque activité en fonction de la table de précédence. Je peux le faire pour un exemple spécifique (avec ou sans mannequin) mais je ne peux pas le faire de manière générale. Peut-il être fait? –

Répondre

5

Bon, vous avez une table de priorité, que je considère être une table de paires comme

A → B
B → C

et ainsi de suite, pour les activités {A, B, C}. Chacune des activités a aussi une durée et (peut-être) une distribution sur la durée, donc vous savez que A prend 3 jours, B prend 2, et ainsi de suite. Ceci serait interprété comme "Un doit être fini avant B qui doit être fini avant C".

À droite?

Maintenant, la chose la plus évidente à faire est de construire le graphique des activités et des flèches - en fait, vous avez essentiellement le graphique sous forme de liste d'incidence. La partie critique est le chemin le plus grand (la plus grande somme de fois). C'est un longest-path problem, et en supposant que votre graphique n'est pas cyclique (ce qui serait mauvais de toute façon), il peut être résolu avec topological sort ou transitive closure.

+1

Plus ou moins. Mon problème est qu'une question de niveau A typique a une table avec des dépendances multiples de sorte que E dépend de B, C et D (disons) et que F dépend de D et E (disons). Ce sont ces interconnexions multiples qui me rendent fou. Je suis tombé sur l'idée d'un tri topologique aujourd'hui. Je n'en sais pas grand-chose, mais est-ce le chemin à parcourir? (Je suis O.K. avec éviter les cycles) –

+1

Ouais, ce serait ça. Les liens devraient vous aider. Vos graphiques devraient être acycliques, car sinon vous auriez une activité qui dépend, éventuellement, de lui-même. Le tri de Topo et la fermeture transitive sont vraiment isomorphes; l'un est sur des matrices (la matrice de bord) l'autre utilise un modèle de graphe. Mettez des exemples de données dans la question et je vous aiderai à vous en sortir. (heh) Je ne connais pas VB6 à * tout * mais je peux vous donner un pseudo-code qui devrait aider. –

+0

C'est ce que je veux vraiment. Je suis fière. Je veux le trier moi-même mais j'ai besoin d'un indice. Je vais vous montrer ce que j'essaie de faire demain. D'une certaine manière, ce n'est pas le code qui me dérange, c'est l'approche de base. Je peux (essayer) de rectifier le code moi-même. Je vais vérifier quelques-uns des liens que vous avez suggérés. Ta! –