Exemplo n.º 1
0
// devuelve true si encuentra la clave en el arbol, false en caso contrario.
bool abb_pertenece(const abb_t *arbol, const char *clave){
	return abb_buscar(arbol, clave) != NULL;
}
Exemplo n.º 2
0
// tiempos y ocupacion deben poder aguantar la cantidad de elementos en cs.
// en particular deben ser de tamaño 23 para el experimento default.
static void _run_once(const char *estructura,
		      struct cadena_struct *cs,
		      long double *tiempos_insercion,
		      unsigned long long *ocupacion,
		      long double *tiempos_busqueda_normal,
		      long double *tiempos_busqueda_cargados,
		      long double *tiempos_eliminacion
		      )
{
  struct timeval inicio;
  struct timeval fin;
  abb abb;
  avl avl;
  splaytree stree;

  if(strcmp(estructura, "abb") == 0) abb_new(&abb);
  if(strcmp(estructura, "avl") == 0) avl_new(&avl);
  if(strcmp(estructura, "splaytree") == 0) splaytree_new(&stree);

  int k;
  int potencia = 0;

  long double sumatiempo = 0.0;

  gettimeofday(&inicio, NULL);
  for (k=0; k<cs->num_elems; k++) {
    char *lacadena = get_cadena(cs, k);
    if(strcmp(estructura, "abb") == 0) abb_insertar(&abb, lacadena, lacadena, TAMANO_CADENA+1);
    if(strcmp(estructura, "avl") == 0) avl_insertar(&avl, lacadena, lacadena, TAMANO_CADENA+1);
    if(strcmp(estructura, "splaytree") == 0) splaytree_insertar(&stree, lacadena, lacadena, TAMANO_CADENA+1);

    if(k+1 == 1<<potencia){
      // por ahora reportamos resultados en pantallax.
      gettimeofday(&fin, NULL);
      // un hack para un comportamiento molesto... el primer elemento asumimos que se inserta en tiempo 0
      if(k==0) tiempos_insercion[potencia] = 0.0;
      else {
	sumatiempo += elapsed_time(&fin, &inicio);
	tiempos_insercion[potencia] = sumatiempo;
      }
      
      if(strcmp(estructura, "abb") == 0) ocupacion[potencia] = abb_espacio(&abb);
      if(strcmp(estructura, "avl") == 0) ocupacion[potencia] = avl_espacio(&avl);
      if(strcmp(estructura, "splaytree") == 0) ocupacion[potencia] = splaytree_espacio(&stree);
      potencia++;
      gettimeofday(&inicio, NULL);
    }
  }

  // terminamos las inserciones. Lo buscamos todo
  sumatiempo = 0.0;
  potencia = 0;
  gettimeofday(&inicio, NULL);
  
  for (k=0; k < cs->num_elems; k++) {
    char *lacadena = get_cadena(cs, k);
    if(strcmp(estructura, "abb") == 0) abb_buscar(&abb, lacadena);
    if(strcmp(estructura, "avl") == 0) avl_buscar(&avl, lacadena);
    if(strcmp(estructura, "splaytree") == 0) splaytree_buscar(&stree, lacadena);

    if(k+1 == 1<<potencia){
      gettimeofday(&fin, NULL);
      sumatiempo += elapsed_time(&fin, &inicio);
      tiempos_busqueda_normal[potencia] = sumatiempo;
      potencia++;
      gettimeofday(&inicio, NULL);
    }
  }
  
  // fin búsquedas
  sumatiempo = 0.0;
  potencia = 0;
  gettimeofday(&inicio, NULL);

  for (k=0; k < BUSCAR_CADENAS_RAND; k++) {
    int indicerand = 0;
    int undecimo = (int)cs->num_elems/10;
    if(drand48() < 0.9) indicerand = (int)intrand(undecimo);
    else indicerand = undecimo + intrand(cs->num_elems - undecimo - 1);

    char *lacadena = get_cadena(cs, indicerand);

    if(strcmp(estructura, "abb") == 0) abb_buscar(&abb, lacadena);
    if(strcmp(estructura, "avl") == 0) avl_buscar(&avl, lacadena);
    if(strcmp(estructura, "splaytree") == 0) splaytree_buscar(&stree, lacadena);

    if(k+1 == 1<<potencia){
      gettimeofday(&fin, NULL);
      sumatiempo += elapsed_time(&fin, &inicio);
      tiempos_busqueda_cargados[potencia] = sumatiempo;
      potencia++;
      gettimeofday(&inicio, NULL);
    }
  }

  sumatiempo = 0.0;
  potencia = 0;
  gettimeofday(&inicio, NULL);

  for (k=0; k < cs->num_elems; k++) {
    char *lacadena = get_cadena(cs, k);

    if(strcmp(estructura, "abb") == 0) abb_eliminar(&abb, lacadena);
    if(strcmp(estructura, "avl") == 0) avl_eliminar(&avl, lacadena);
    if(strcmp(estructura, "splaytree") == 0) splaytree_eliminar(&stree, lacadena);

    if (k+1 == 1<<potencia) {
      gettimeofday(&fin, NULL);
      sumatiempo += elapsed_time(&fin, &inicio);
      tiempos_eliminacion[potencia] = sumatiempo;
      potencia++;
      gettimeofday(&inicio, NULL);
    }
  }
  
  
  if(strcmp(estructura, "abb") == 0) abb_dispose(&abb);
  if(strcmp(estructura, "avl") == 0) avl_dispose(&avl);
  if(strcmp(estructura, "splaytree") == 0) splaytree_dispose(&stree);
}
Exemplo n.º 3
0
// Devuelve el dato del nodo que contiene la clave pasada por parametro.
void* abb_obtener (const abb_t* arbol, const char* clave){
	abb_nodo_t* nodo_buscado = abb_buscar(arbol, clave);
	if (!nodo_buscado)
		return NULL;
	return nodo_buscado->dato;
}