Ejemplo n.º 1
0
int main(void){
  OrdinaryHeap H[REPEAT][MAX_MERGE];
  FILE *fp;
  int size, each_size, merges;
  int method;
  int x, i, merge_cnt, rpt;
  clock_t start, stop;
  double duration;

  /* initialize */
  fp = fopen("settings.txt", "r");
  fscanf(fp, "%d%d", &size, &merges);
  fclose(fp);
  each_size = size / merges;

  fp = fopen("test_cases/test_all.txt", "r");
  for (merge_cnt = 0; merge_cnt < merges; merge_cnt++){
    H[0][merge_cnt] = create_ordinary_heap(size);
    for (i = 0; i < each_size; i++){
      fscanf(fp, "%d", &x);
      insert_ordinary_heap(x, H[0][merge_cnt]);
    }
  }
  fclose(fp);

  /* copy heap since a merge operation destroy the original heap */
  for (rpt = 1; rpt < REPEAT; rpt++)
    for (merge_cnt = 0; merge_cnt < merges; merge_cnt++)
      H[rpt][merge_cnt] = copy_heap(H[0][merge_cnt], H[rpt][merge_cnt]);

  /* Start test */
  start = clock();

  for (rpt = 0; rpt < REPEAT; rpt++)
    for (merge_cnt = 0; merge_cnt < merges - 1; merge_cnt++)
      H[rpt][merge_cnt + 1] = merge_heap(H[rpt][merge_cnt + 1],
                                         H[rpt][merge_cnt]);

  stop = clock();
  duration = ((double)(stop - start)) / CLOCKS_PER_SEC;

  printf("%lf\n", duration);

  return 0;
}
Ejemplo n.º 2
0
int main (int argc, char **argv) {
    int i, n, tot;
    double start, stop;
    FILE **entrada, *saida;

    n = argc - 3;
    entrada = malloc (n * sizeof (FILE));
    saida = fopen (argv[argc - 1], "r+");

    for (i = 2; i < argc - 1; i++)
        entrada[i - 2] = fopen (argv[i], "r");

    if (argv[1][1] == 'h') {
        start = (double) clock () / CLOCKS_PER_SEC;
        tot = merge_heap (entrada, saida, n);
        stop = (double) clock () / CLOCKS_PER_SEC;
    }
    else {
        start = (double) clock () / CLOCKS_PER_SEC;
        tot = merge_simple (entrada, saida, n);
        stop = (double) clock () / CLOCKS_PER_SEC;
    }

    fflush (saida);

    printf ("Tempo gasto: %.3f\n", stop - start);
    printf ("Quantidade de arquivos de entrada: %d\n", n);
    printf ("Quantidade de numeros: %d\n", tot);

    if (DEBUG) verify (saida, tot);

    for(i = 0; i < n; i++)
        fclose (entrada[i]);
    fclose (saida);
    free (entrada);

    return EXIT_SUCCESS;
}