Solucion Examen Est Dat Final

Post on 25-Sep-2015

9 views 1 download

description

solucion del examen final de estructuras de datos

Transcript of Solucion Examen Est Dat Final

  • ESCUELASUPERIORPOLITECNICADELLITORAL

    FACULTADDEINGENIERIAENELECTRICIDADYCOMPUTACIONESTRUCTURASDEDATOS

    SEGUNDAEVALUACIONIITERMINO20112012

    Nombre:________________________________________________Matricula:_______________Paralelo:_______Tema1(15ptos) Dadolasiguientetabladehash,implementadausandolatcnicadehashabierto,comoquedaralatablasisellenaconlatcnicadehashcerrado,usandounafuncinderehashlineal.Considerequelosdatosfueroningresadosenordenalfabtico.

    D,E

    A,B.C

    F,G,H

    G

    H

    D

    A

    B

    C

    E

    F

    Tema2(25ptos)Grafiqueelrbolquecontieneelcdigodehuffmanparalossmbolosyfrecuenciasdelasiguientetabla:

  • Letra Frecuencia CdigoHuffmanS 10 110 I 12 111 E 16 00 P 5 1001 U 9 101 D 3 1000

    Espacioenblanco

    14 01

    Luegocodificarelsiguientemensaje: SISEPUEDE110111011100001100110100100000

    P5D3

    DP8 U9

    DPU17

    I12S10

    SI22

    E16

    DPUSI39

    EDPUSI69

    14

    E30

  • Tema3(30ptos)Twittermantieneporcadausuariounalistaconsusmensajesordenadosenformacronolgica,delmsrecientealmsantiguo.Siunusuarioquiereseguiraotro(verlosmensajesquepublica),Twitterledaaccesoalalistademensajesdeelusuarioaseguir.Twitterfuncionadetalformaqueenlacomputadoradelusuario,aparecenlos10ltimosmensajesquefueronpublicadosporlaspersonasalasqueelusuariosigue.TwittermanejalosmensajesconelsiguienteTDA:typedef struct Mensaje{ string texto; time tiempo; } Mensaje; SepidequeustedescribaunafuncinobtenerMensajequerecibaunarreglodelistasdemensajesdetamaoN(dondeNeselnmerodeusuariosalosquesesesigueenTwitter)yqueretorneunheapconlos10ltimosmensajes.Lafunciondebeserptimaenelsentidodequeelrecorridodelaslistasdebedeminimizarse.NOTA:AsumaqueelTDAHeaptienecapacidaddecompararvariablesdetipotime.Heap *obtenerMensaje(List *L[], int n){ Heap *H = heapNew(10, DESC, timeCompare); NodeList **p = malloc(sizeof(NodeList *) * n); int i = 0; inicializar(p, L, n); int j = llenarHeapConDiezPrimeros(H, p, n); mejorarHeap(H, p, n, j); } int llenarHeapConDiezPrimeros (Heap *H, NodeList **p, int n){ int i, j = 0; for(i = 0; i < 10; i++){ if(p[j%n]!= NULL) {

    heapEnQueue(H, nodeListGetCont(p[j%n])); p[j%n] = p[j%n]->next; } j++;

    } return j%n; } void mejorarHeap((Heap *H, NodeList **p, int n, int j){ while(!todasEstanRevisadas(p, n)){ if(p[j%n]!= NULL && timeCompare(heapGetElement(H, 0), nodeListGetCont(p[j%n])) > 0){ heapDeQueue(H); heapEnQueue(H, nodeListGetCont(p[j%n])); p[j%n] = p[j%n]->next;

    }else p[j%n]= NULL;

    j ++; } Tema4(30puntos)LosgelogosdelInstitutogeofsicoEcuatorianodeseanimplementarunsistemadesimulacindelaerupcindelvolcn

    Tungurahua.Paraellosehadefinidoelsiguientemapadelasciudadesqueestnubicadasenlasquebradasositiospordondepasaralalava,dondeelpuntoTrepresentaelvolcn.

  • Conelobjetivodeconocerelimpactodeunaerupcinenlazona,sehaestimadoenelmapaelporcentajedelavaquepasaraporcadaciudadposiblementeafectada.Adicionalmente,sehaconsideradoque,dependiendodelareadela

    ciudadafectada,cadaciudadretendra100toneladasporkilometrocuadrado.Estodisminuiralacantidaddelavaquepodrallegaralassiguientesciudades.

    LasuperficieenKm.cuadradosdecadaciudadeslasiguiente:B=10,C=11,D=4,E=15,F=16,G=8,H=12,I=8,J=6,K=10,

    L=20,M=10.Enesecaso,sielvolcngenerase10.000toneladasdelava,solo2000(el20%)llegaranalaciudadI,dondeseretendran800toneladas,quedandosolo1200paraafectaralasciudadesaledaasaI(KyJ)

    EscribaunafuncincalcularLavaquedadaunaciudadyunacantidadXdelavageneradaporelvolcn,calculelacantidaddelavaquellegaraalaciudad.int calcularLava(Gvertex *vorigen, Gvertex *vdestino, int X){ gVertexVisit(vorigen);a List *Ladj = gVertexGetAdjacents(vorigen); NodeList *p; for(p = listGetHeader(Ladj); p!= NULL; p = p->next){ Gedge *e = nodeListGetCont(p); Gvertex *vd = gEdgeGetDestination(e); if(!gVertexIsVisited(vd)){

    double *porcentaje = gEdgeGetExtraInfo(e); X = X * (*porcentaje); double *area = gVertexGetContent(vd);

    if(vdestino == vd) return X ;

    if(area*100 < X) X = X area*100; else X = 0;

    return calcularLava(vd, vdestino, X); }

    } }