Pós-Graduação em Computação – Estrutura de Dados e Algoritmos

Propaganda
Pós-Graduação em Computação – Estrutura de Dados e Algoritmos
Profa Cristina Boeres – Lista 1
1.
Diz-se que um número inteiro n é um quadrado perfeito se existirem m números ímpares
consecutivos a partir do valor 1 cuja soma é igual a n. Exemplo: 16=1+3+5+7 (16 é igual a soma dos
quatro primeiros ímpares a partir de 1). Logo 16 representa um quadrado perfeito. Faça um
programa que verifique se um valor inteiro positivo fornecido pelo usuário é um quadrado perfeito
ou não. Especifique as estruturas de dados necessárias e a complexidade do algoritmo.
2. O “modo” de um conjunto é o elemento que aparece mais vezes. Exemplo: o conjunto {2,7,8,6,8} tem
modo 8. Descreva um algoritmo para achar o modo de um conjunto com n elementos. Procure
projetar o algoritmo da forma mais eficiente que você conseguir. Calcule sua complexidade. Em
caso de empate, o algoritmo fornece qualquer um dos elementos empatados. Assuma que os
elementos do conjunto foram armazenados em uma lista com n elementos.
3. Considere uma quantia em reais aplicada por n anos consecutivos, a uma taxa anual de juros j, com
reinvestimento dos juros ao longo do período. A quantia final a ser resgatada após n anos é
calculado da seguinte forma: gf = q * (( 1 + j/100) + ( 1 + j/100) 2 + … + ( 1 + j/100) n). Escrever um
programa que calcule os resgates finais de acordo com as operações de aplicação fornecidas pelo
usuário.
4. Escreva um procedimento eficiente para trocar a ordem de dois elementos consecutivos xi e xi+1 de
uma lista x = ( x1 , x2 , ..., xn ), representada na forma de uma lista encadeada simples. Os dados de
entrada são apenas o endereço L do primeiro elemento da lista, e o valor i que indica a posição de xi
na lista. O procedimento deve retornar o endereço do primeiro elemento da lista, após a troca.
Forneça a complexidade de sua proposta.
5. Suponha que temos uma estrutura de dados que armazena uma lista F = ( f1 , f2 , ..., fn ) de filas,
cada fila sendo implementa por lista encadeada. Qual a representação mais adequada para essa
estrutura, para que as operações possam ser efetuadas de maneira mais rápida possível (defina a
estrutura de dados, seus campos necessários) ? Faça o procedimento Insere (valor, i ), onde i indica
que a inserção deve ser feita na i-ésima fila. Faça o procedimento x = Remove (i ), onde i indica que
a remoção deve ser realizada na i-ésima fila. Faça o procedimento x = Consulta (i ), onde i indica que
a i-ésima fila deve ser consultada.
6. Um colega diz que descobriu um novo algoritmo de pesquisa super-eficiente com implementação
recursiva de complexidade T(n) = 3T(n/3) + n e com custo constante para tamanho 1. Você
recomendaria que ele implementasse o algoritmo? Porque?
7. (Algoritmos não-recursivos) Determine a função de complexidade (no pior e melhor caso), das
funções implementadas em C, apresentadas abaixo, fazendo as considerações pertinentes. Os
algoritmos estão corretos? Implemente-os.
void BubbleSort1 ( int ∗ A, int n ){
int i , j ;
int aux ;
for ( j = 0 ; j < n ; j++ ){
for ( i = 0 ; i < n − 1 ; i++ ){
if ( A[ i ] > A[ i +1] ){
aux = A[ i ] ;
A[ i ] = A[ i +1];
A[ i +1] = aux ;
}
}
}
}
void BubbleSort2 ( int ∗ A, int n ) {
int i , troca ;
int aux ;
do{
troca = 0 ;
for ( i = 0 ; i < n−1 ; i++ ){
if ( A[ i ] > A[ i +1] ){
aux = A[ i ] ;
A[ i ] = A[ i +1];
A[ i +1] = aux ;
troca = 1 ;
}
}
} while (troca) ;
}
void SelectionSort( int ∗ A, int n )
{
int i , j , min ;
int aux ;
for ( i = 0 ; i < n − 1 ; i++ ){
min = i ;
for ( j = i + 1 ; j < n ; j++ )
if ( A[ j ] < A[ min ] )
min = j ;
aux = A[ min ] ;
A[ min ] = A[ i ] ;
A[ i ] = aux ;
}
}
}
void InsertionSort ( int ∗ A, int n ){
int j ;
for ( int i = 1 ; i < n ; i++){
aux = A[ i ] ;
j=i−1;
while ( ( j >= 0 ) && ( aux < A[ j ] ) ){
A[ j + 1 ] = A[ j ] ;
j −−;
}
A[ j + 1 ] = aux ;
}
}
Exercícios sugeridos do livro de Szwarcfiter e Markenzon:
Capítulo 1: 1, 2, 3, 14, 20 e 23.
Capítulo 2 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 26, 27.
Exercícios sugeridos do Cormen: de acordo com a matéria dada em sala de aula
Download