Skip to content
Snippets Groups Projects
Select Git revision
  • db4e3b3bf08f26af9fdd6ace4b73f2e04c0b5349
  • tp1 default protected
  • tp5_12313574_12001045
  • tp5_12314926
  • tp5_11924788_11705416
  • tp6 protected
  • tp5 protected
  • tp5_12008351_12106646
  • tp4 protected
  • tp3 protected
  • tp2 protected
  • master protected
12 results

Analyzer.java

Blame
  • Analyzer.java 4.44 KiB
    import java.io.*;
    import java.util.ArrayList;
    
    /**
        Classe utilisée pour faire des statistiques élémentaires
        sur une séquence d'opérations.
     */
    public class Analyzer {
    
        /**
            Constructeur de la classe analyse
            Complexité en temps/espace, pire et meilleur cas : O(1)
         */
        public Analyzer() {
            cost = new ArrayList<Double>();
            cumulative_cost = new ArrayList<Double>();
            cumulative_square = 0.;
        }
    
        /**
            Ajoute un coût, une valeur à l'analyse.
            Complexité en temps/espace, pire cas : O(size)
            Complexité en temps/espace, meilleur cas : O(1)
            Complexité amortie : O(1)
            @param x est la valeur que l'on souhaite ajouter à l'analyse.
         */
        void append(double  x){
            cost.add(x);
            cumulative_cost.add( (!cumulative_cost.isEmpty()) ? cumulative_cost.get(cumulative_cost.size()-1)+x : x);
            cumulative_square += x*x;
        }
    
        /**
            Renvoie la somme des coûts enregistrés dans cette analyse.
            Complexité en temps/espace, meilleur cas : O(1)
            @returns la somme des coûts enregistrés dans cette analyse.
         */
        double get_total_cost(){
            return cumulative_cost.get(cumulative_cost.size()-1);
        }
    
        /**
            Renvoie le coût amorti d'une opération.
            Complexité en temps/espace, meilleur cas : O(1)
            @param pos est l'indice de l'opération pour laquelle on veut connaître le coût amorti.
            @returns le coût amorti d'une opération.
         */
        double get_amortized_cost(int pos){
            return (pos > 0)? cumulative_cost.get(pos)/pos : cumulative_cost.get(pos);
        }
    
        /**
            Renvoie la moyenne des coûts de toutes les opérations enregistrées dans l'analyse.
            Complexité en temps/espace, meilleur cas : O(1)
            @returns la moyenne des coûts de toutes les opérations enregistrées dans l'analyse.
         */
        double get_average_cost(){
            if(cumulative_cost.isEmpty())
                throw new RuntimeException("List is empty");
            return cumulative_cost.get(cumulative_cost.size()-1)/cumulative_cost.size();
        }
    
        /**
            Renvoie la variance des coûts de toutes les opérations enregistrées dans l'analyse.
            Complexité en temps/espace, meilleur cas : O(1)
            @returns la variance des coûts de toutes les opérations enregistrées dans l'analyse.
         */
        double get_variance(){
            double mean, mean_square;
            mean = get_average_cost();
            mean_square = mean * mean;
            return cumulative_square - mean_square;
        }
    
        /**
            Renvoie l'écart-type des coûts de toutes les opérations enregistrées dans l'analyse.
            Complexité en temps/espace, meilleur cas : O(1)
            @returns l'écart-type des coûts de toutes les opérations enregistrées dans l'analyse.
         */
        double get_standard_deviation(){
            return Math.sqrt(get_variance());
        }
    
        /**
            Sauvegarde la liste des coûts et des coûts amortis dans un fichier.
            Complexité en temps, meilleur/pire cas : O(size)
            @param path est le chemin du fichier dans lequel la sauvegarde est faite.
         */
        void save_values(String path){
            int i;
            File file = new File(path);
            FileWriter fr = null;
            try {
                fr = new FileWriter(file);
                for (i = 0; i < cost.size(); ++i){
                    fr.write(i+" "+cost.get(i)+" "+get_amortized_cost(i)+"\n");
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                //close resources
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
            Affiche la liste des coûts et des coûts amortis sur la sortie standard.
            Complexité en temps, meilleur/pire cas : O(size)
         */
        void plot_values(){
            int i;
            for (i = 0; i < cost.size(); ++i){
                System.out.println(i+" "+cost.get(i)+" "+get_amortized_cost(i));
            }
        }
    
    
        // Coût de chaque opération. Peut représenter du temps ou une autre mesure.
        private ArrayList<Double> cost;
        // Coût cumulatif. La case i contient la somme des coûts des i premières opérations.
        // Permet de calculer le coût amorti d'une opération.
        private ArrayList<Double> cumulative_cost;
        // Carré du coût cumulatif. Sert à calculer la variance. On ne garde que la dernière valeur.
        private double cumulative_square;
    
    
    }