2010-11-21 18 views
1

Je souhaite tracer le temps en fonction de la taille de l'entrée, pour le problème de sous-séquence commune la plus longue dans les approches de programmation récursive et dynamique. Jusqu'à présent, j'ai développé des programmes pour évaluer les fonctions lcs dans les deux sens, un générateur de chaîne aléatoire simple (avec l'aide de here) et un program pour tracer le graphique. Maintenant, je dois connecter tout cela de la manière suivante.Temps de tracé en fonction de la taille de l'entrée pour la plus longue sous-séquence commune Problème

Maintenant, je dois connecter tout cela. Autrement dit, les deux programmes de calcul de lcs devraient fonctionner environ 10 fois avec la sortie du générateur de chaîne aléatoire simple donné comme arguments de ligne de commande à ces programmes.

Le temps nécessaire pour l'exécution de ces programmes sont calculés et ce ainsi que la longueur des cordes utilisées sont stockées dans un fichier comme

l=15, r=0.003, c=0.001 

Ceci est analysé par le programme python pour remplir les listes suivantes

sequence_lengths = [] 
recursive_times = [] 
dynamic_times = [] 

puis le graphique est tracé. J'ai les questions suivantes concernant ci-dessus.

1) Comment transmettre la sortie d'un programme C à un autre programme C en tant qu'argument de ligne de commande?

2) Y a-t-il une fonction pour évaluer le temps nécessaire pour exécuter la fonction en microsecondes? Actuellement, la seule option que j'ai est la fonction de temps dans unix. Être un utilitaire de ligne de commande rend plus difficile à gérer.

Toute aide serait grandement appréciée.

Répondre

0

Si les données transmises de programme à programme sont petites et peuvent être converties en format de caractères, vous pouvez les transmettre sous la forme d'un ou plusieurs arguments de ligne de commande. Sinon, vous pouvez l'écrire dans un fichier et transmettre son nom en argument.

Pour les programmes Python, de nombreuses personnes utilisent la classe du module Timer pour mesurer la vitesse d'exécution du code. Vous pouvez également rouler en utilisant les fonctions clock() ou time() du module time. La résolution dépend de la plate-forme utilisée.

0

1) Il y a plusieurs façons, le plus simple est d'utiliser system avec une chaîne construite à partir de la sortie (ou popen pour l'ouvrir comme un tuyau si vous avez besoin de relire sa sortie), ou si vous souhaitez quitter la programme en cours, vous pouvez utiliser les différents exec (en plaçant la sortie dans les arguments).

Dans une sh shell, vous pouvez aussi le faire avec command2 $(command1 args_to_command_1)

2) Pour le moment en C, voir clock et getrusage.