Advertisement
techno-

p3 calvoritmos

Nov 2nd, 2022
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.24 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/time.h>
  4.  
  5. //Samuel Varela, Javier Rapela, Javier Loureiro
  6.  
  7. double microsegundos() {
  8.     struct timeval t;
  9.     if (gettimeofday(&t, NULL) < 0 )
  10.         return 0.0;
  11.     return (t.tv_usec + t.tv_sec * 1000000.0);
  12. }
  13.  
  14. void inicializar_semilla() {
  15.     srand(time(NULL));
  16. }
  17.  
  18. struct nodo {
  19.     int elem;
  20.     int num_repeticiones;
  21.     struct nodo *izq, *der;
  22. };
  23.  
  24. typedef struct nodo *posicion;
  25. typedef struct nodo *arbol;
  26.  
  27.  
  28. static struct nodo *crearnodo(int e) {
  29.     struct nodo *p = malloc(sizeof(struct nodo));
  30.     if (p == NULL) {
  31.         printf("memoria agotada\n"); exit(EXIT_FAILURE);
  32.     }
  33.     p->elem = e;
  34.     p->num_repeticiones = 1;
  35.     p->izq = NULL;
  36.     p->der = NULL;
  37.     return p;
  38. }
  39.  
  40. arbol insertar(int e, arbol a){
  41.     if (a == NULL)
  42.         return crearnodo(e);
  43.     else if (e < a->elem)
  44.         a->izq = insertar(e, a->izq);
  45.     else if (e > a->elem)
  46.         a->der = insertar(e, a->der);
  47.     else
  48.         a->num_repeticiones++;
  49.     return a;
  50. }
  51.  
  52. arbol creararbol() { /* devuelve un arbol vacio */
  53.     arbol e =NULL;
  54.     return e;
  55. }
  56.  
  57. int esarbolvacio(arbol e){
  58.     return (e==NULL);
  59. }
  60.  
  61. posicion buscar(int key, arbol root){
  62.  
  63.     if (root == NULL || root->elem == key)
  64.         return root;
  65.  
  66.     if (root->elem < key)
  67.         return buscar(key, root->der);
  68.  
  69.     return buscar(key,root->izq);
  70. }
  71.  
  72.  
  73.  
  74. void liberarMemoria(arbol nodo){
  75.     if (nodo != NULL) {
  76.  
  77.         liberarMemoria(nodo->izq);
  78.         liberarMemoria(nodo->der);
  79.         free(nodo);
  80.     }
  81. }
  82.  
  83. arbol eliminararbol(arbol nodo){
  84.     liberarMemoria(nodo);
  85.     nodo=NULL;
  86.     return nodo;
  87. }
  88.  
  89. posicion hijoizquierdo(arbol nodo){
  90.     return nodo->izq;
  91. }
  92.  
  93. posicion hijoderecho(arbol nodo){
  94.     return nodo->der;
  95. }
  96.  
  97. int elemento(posicion nodo){
  98.     return nodo->elem;
  99. }
  100.  
  101. int numerorepeticiones(posicion nodo){
  102.     return nodo->num_repeticiones;
  103. }
  104.  
  105. int altura(arbol node){
  106.     if (node == NULL) {
  107.         return -1;
  108.     }else {
  109.  
  110.         int altizq = altura(node->izq);
  111.         int altder = altura(node->der);
  112.  
  113.         if (altizq > altder)
  114.             return (altizq + 1);
  115.         else
  116.             return (altder + 1);
  117.     }
  118. }
  119.  
  120. void visualizar2(arbol e){
  121.     if(esarbolvacio(e)){
  122.         return;
  123.     }
  124.     if(e->izq != NULL) {
  125.         printf("(");
  126.     }
  127.     visualizar2(e->izq);
  128.     if(e->izq != NULL) {
  129.         printf(")");
  130.     }
  131.     printf(" %d ",e->elem);
  132.     if(e->der != NULL) {
  133.         printf("(");
  134.     }
  135.     visualizar2(e->der);
  136.     if(e->der != NULL) {
  137.         printf(")");
  138.     }
  139.  
  140. }
  141.  
  142. void visualizar(arbol e){
  143.     if(esarbolvacio(e)){
  144.         printf("().");
  145.     }else {
  146.         visualizar2(e);printf(".");
  147.      }
  148.     }
  149.  
  150.  
  151. void test(){
  152.     arbol e = creararbol();
  153.     printf("arbol vacio: ");
  154.     visualizar(e);
  155.     printf("\naltura del arbol: ");
  156.     printf("%d",altura(e));
  157.     e=insertar(3,e);
  158.     printf("\nInserto un 3\n");
  159.     e=insertar(1,e);
  160.     printf("Inserto un 1\n");
  161.     e=insertar(2,e);
  162.     printf("Inserto un 2\n");
  163.     e=insertar(5,e);
  164.     printf("Inserto un 5\n");
  165.     e=insertar(4,e);
  166.     printf("Inserto un 4\n");
  167.     e=insertar(5,e);
  168.     printf("Inserto un 5\n");
  169.     printf("arbol: ");
  170.     visualizar(e);
  171.     printf("\n");
  172.     printf("altura del arbol: ");
  173.     printf("%d",altura(e));
  174.     printf("\n");
  175.     if(buscar(1,e)!=NULL) {
  176.         printf("Busco 1 y encuentro 1 repetido: %d veces\n", buscar(1, e)->num_repeticiones);
  177.     }else{
  178.         printf("Busco 1 y no encuentro nada\n");
  179.     }
  180.     if(buscar(2,e)!=NULL) {
  181.         printf("Busco 2 y encuentro 2 repetido: %d veces\n", buscar(2, e)->num_repeticiones);
  182.     }else{
  183.         printf("Busco 2 y no encuentro nada\n");
  184.     }
  185.     if(buscar(3,e)!=NULL) {
  186.         printf("Busco 3 y encuentro 3 repetido: %d veces\n", buscar(3, e)->num_repeticiones);
  187.     }else{
  188.         printf("Busco 3 y no encuentro nada\n");
  189.     }
  190.     if(buscar(4,e)!=NULL) {
  191.         printf("Busco 4 y encuentro 4 repetido: %d veces\n", buscar(4, e)->num_repeticiones);
  192.     }else{
  193.         printf("Busco 4 y no encuentro nada\n");
  194.     }
  195.     if(buscar(5,e)!=NULL) {
  196.         printf("Busco 5 y encuentro 5 repetido: %d veces\n", buscar(5, e)->num_repeticiones);
  197.     }else{
  198.         printf("Busco 5 y no encuentro nada\n");
  199.     }
  200.     if(buscar(6,e)!=NULL) {
  201.         printf("Busco 6 y encuentro 6 repetido: %d veces\n", buscar(6, e)->num_repeticiones);
  202.     }else{
  203.         printf("Busco 6 y no encuentro nada\n");
  204.     }
  205.     printf("Borro todos los nodos liberando la memoria:\n");
  206.     e=eliminararbol(e);
  207.     printf("arbol vacio: ");
  208.     visualizar(e);
  209.     printf("\naltura del arbol: ");
  210.     printf("%d",altura(e));
  211. }
  212.  
  213.  
  214. int main() {
  215.     int n;
  216.     int cont;
  217.     int random;
  218.     int listaIns=0;
  219.     int listaBus=0;
  220.     arbol a;
  221.     double t1, t2, t_ins, t_bus;
  222.     double tiemposIns[6];
  223.     double tiemposBus[6];
  224.     test();
  225.     printf("\n\nn        t_ins(n)        t_bus(n)\n");
  226.     for(n=8000;n<=256000;n=n*2){
  227.         inicializar_semilla();
  228.         a = creararbol();
  229.         t1=microsegundos();
  230.         for(cont=0;cont<n;cont++){
  231.             random=(rand() % n);
  232.             insertar(random,a);
  233.         }
  234.         t2=microsegundos();
  235.         t_ins=t2-t1;
  236.  
  237.         tiemposIns[listaIns]=t_ins;
  238.         listaIns++;
  239.  
  240.         t1=microsegundos();
  241.         for(cont=0;cont<n;cont++){
  242.             random=(rand() % n);
  243.             buscar(random,a);
  244.         }
  245.         t2=microsegundos();
  246.         t_bus=t2-t1;
  247.  
  248.         tiemposBus[listaBus]=t_bus;
  249.         listaBus++;
  250.  
  251.         printf("%d    %f    %f\n", n, t_ins, t_bus);
  252.     }
  253.  
  254.     printf("\nInsercion de n elementos\n");
  255.     printf("n        t(n)        t(n)/f(n)       t(n)/g(n)        t(n)/h(n)\n");
  256.     cont=0;
  257.     for(n=8000;n<=256000;n=n*2){
  258.             printf("%d    %f     %f     %f     %f\n", n, tiemposIns[cont], tiemposIns[cont], tiemposIns[cont], tiemposIns[cont]);
  259.             cont++;
  260.     }
  261.  
  262.     printf("\nBusqueda de n elementos\n");
  263.     printf("n        t(n)        t(n)/f(n)       t(n)/g(n)        t(n)/h(n)\n");
  264.     cont=0;
  265.     for(n=8000;n<=256000;n=n*2){
  266.         printf("%d    %f     %f     %f     %f\n", n, tiemposBus[cont], tiemposBus[cont], tiemposBus[cont], tiemposBus[cont]);
  267.         cont++;
  268.     }
  269.     return 0;
  270. }
  271.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement