Home

 

Resolução da 2ª frequência de PED

 15.06.2001


  Ex.1 (4 valores)

 

Temos um conjunto de inteiros C armazenado numa lista simplesmente ligada. Queremos saber se a condição seguinte é verificada ou não:

  "x "y "z  Π C,  x + y + z < M , onde M é uma constante dada. Escrever as subrotinas necessárias para fazer esta verificação.

 

R-

            Soma (x, y, z, M)                                x, y, z - elementos
                        Se x + y + z < M                     l - lista
                       
Entao devolve V                     M - constante
                       
Senao devolve F

             Soma1 (x, y, l, M)
                        Se evaz ( l )
                        Entao devolve V
                       
Senao se soma (x, y, cabeça ( l ), M)
                       
Entao devolve soma1 (x, y, cauda ( l ), M)
                       
Senao devolve F

Soma2 (x, l, M)
                       
Se evaz ( l )
                       
Entao devolve V
                       
Senao se soma1 (x, cabeça ( l ), l, M)
                       
Entao devolve soma2 (x, cauda ( l ), M)
                       
Senao devolve F

             Soma3 (x, l, M)
                       
Se evaz ( l )
                       
Entao devolve V
                       
Senao se soma2 (cabeça ( l ), l, M)
                       
Entao devolve soma3 (cauda ( l ), M)
                       
Senao devolve F

 


Ex. 2 (5 valores)

 

a) Criar uma árvore Red-Black com as seguintes inserções :

50, 70, 30, 45, 60, 42, 41, depois eliminar o 45.

 

                     Inserir ( 50 )                     Inserir ( 70 )                          Inserir (30)

             

         · A raiz não pode  ser vermelha

 

                 Inserir ( 45 )

               

      ·  2 nós vermelhos não podem ·  O nº de nós pretos tem de ser igual em todos os caminhos possiveis
               ser seguidos

 

                        Inserir ( 60 )                              Inserir ( 42 )

                  

                                             ·  2 nós vermelhos não podem        ·   O nº de nós pretos tem de ser iguais
                                                                   ser seguidos                                   em todos os caminho possiveis

       

                                                                                                         Inserir ( 41 )

                     

 

                   Eliminar (45) 

               

                                          ·  O nº de nós pretos tem de ser igual em todos os caminhos possiveis               

 b) Fazer o Splay de 41

                    

 


Ex. 3 (2 valores)

 

a) Dar um exemplo onde o Quicksort não é tão quick.

 

R – O quicksort não é tão quick quando a lista está quase ordenada ou quando já está toda ordenada. 

b) Dar um exemplo onde a ordenação por bolha é muito mais rápida do que qualquer outra ordenação por comparação .

R – A ordenação por bolha é muito mais rápida que todas as outras ordenações por comparação quando a lista está quase ordenada ou quando já está toda ordenada.

 


Ex. 4 (6 valores)

 

O objectivo deste exercicio é isolar os centros de bombagem que podem mandar e receber petróleo entre eles numa rede de oleoduto.

A rede está formada de N centros de bombagem interligados entre eles com tubos. Cada centro pode mandar o petróleo numa direcção dada para um outro centro de bombagem mas pode receber de mais dum centro.

  Atenção : Mandar e receber entre 2 centros pode ser feito directamente entre 2 centros ou através doutros centros.

 a) Propor uma estrutura de dados para armazenar a rede.

 R - Grafos com arcos direccionais.

 b) Propor um exemplo para 8 centros de bombagem.

                                       

c) Propor e executar um algoritmo que irá isolar os centros que podem mandar e receber entre eles.

  Um algoritmo que podemos executar é o DFS (Depth First Search) que vai  calcular os componentes fortemente conexos ou seja aqueles que podem dar e receber petróleo entre si.

                                                G :

                                                

 

                                              GT : ( Grafo transposto - trocam-se a orientação dos arcos )

                                               
                                                                     GRUPO FORTEMENTE CONEXO
                                                 (os seus elementos conseguem dar e receber petróleo entre si)     


                                                  

 


Ex. 5 (3 valores)

 

Temos uma árvore binária de inteiros sem ordem. Queremos ordenar a árvore para optimizar as operações de procura. Escrever as subrotinas necessárias para transformar uma árvore sem ordem numa com ordem ou para criar uma árvore ordenada a partir duma outra sem ordem.

R –

           Função Ordenar (arv ad) à arvore             

             Começar                                          /* Função que percorre uma árvore desordenada                                                                                                                                                     /* em Pós-Ordem e vai inserindo os elementos
                       
se ñevaz (ad);                        /* ordenadamente noutra ávore através da função
                       
então                                    /* inserir_ord
         

                                    {
                                   
ordenar (fe(ad), ao)
                                   
ordenar (fd(ad), ao)
                                   
inserir_ord (nó(a))
                                    }          

            Fim

 

Função Inserir_ord (elemento x, arvore a) à Arvore      

                                                                                                 /* Função para inserir um elemento
Começar                                                                                   /* numa arvore ordenada

               se evaz (a);
  
                        então devolve consa (x, NULL, NULL );
  
                        senão se (x < nó(a))
                           então devolve consa (nó(a), inserir (x,fe(a)), fd(a));
                           senão   devolve consa (nó(a), fe(a), inserir (x,fd(a)));

Fim