1
Apresentação e exercícios básicos
MCTA001Algoritmos e Estruturas de Dados I
Prof. Jesús P. Mena-Chalco
1Q-2019
2
Apresentação
Professor:Jesús P. Mena-Chalco (CMCC)
Formação: - Engenheiro da Computação.- Mestre e Doutor em Ciência da Computação.Instituto de Matemática e Estatística da USP.
Sala 517-A, torre 2, 5º Andar.
Áreas de pesquisa:- Reconhecimento de padrões, Cientometria.
4
5
Programar?
Programar auxilia a desenvolver o pensamento lógico. Programar lhe torna mais independente.
6
You Should Learn to Program: Christian Genco at TEDxSMUhttps://www.youtube.com/watch?v=xfBWk4nw440
7
Sobre a disciplina
8
Pré-requisitos
Precisa ter cursado Processamento de Informação.Precisa ter cursado Programação Estruturada.
Deve ser capaz de escrever um programa “simples” na linguagem C.
Obs: → A disciplina usa a linguagem c. → A disciplina é focada nos algoritmos por trás dos programas.
9
Questões de eficiências
Queremos programas eficientes (rápidos).→ Não se trata de usar truques que acelerem um programa (nesse nasso a aceleração é modesta)
A eficiencia pode ser obtida através de boas estruturas de dados e bons algoritmos.
10
Exemplo: Imagine dois programas
P1: Desenvolvido em um computador Y.P2: Mesmo algoritmo de P1 mas em um computador mais lento.
n tamanhoda instância de
entrada
Tempo de Processamento
De P1
11
Exemplo: Um terceiro programa
12
Exemplo: Um terceiro programa10 30 50 70 90 110
130
150
170
190
210
230
250
270
290
310
330
350
370
390
410
430
450
470
490
510
530
550
570
590
0
100
200
300
400
500
600
700
P1 = n
P2 = n/2
P3 = log(n)*20
13
Exemplo: Um terceiro programa10
020
030
040
050
060
070
080
090
010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
00
0
1000
2000
3000
4000
5000
6000
7000
P1 = n P2 = n/2
P3 = log(n)*20
14
Algoritmos e Estruturas de Dados I
Ementa:
Breve introdução à linguagem C.
Noções básicas de análise de complexidade de tempo de
algoritmos.
Estruturas lineares.
Árvores de busca.
Árvores balanceadas.
Busca e ordenação.
15
Algoritmos e Estruturas de Dados I
Algoritmos sofisticados, geralmente, são mais eficientes
16
Futuro: Algoritmos e Estruturas de Dados II
Hashing.
Introdução a arquivos: Arquivos seqüenciais. Arquivos indexados. Arquivos de acesso direto.
Prática de programação dos arquivos e das funções primitivas na resolução de problemas.
Compressão de arquivos
17
Bibliografia
P. Feofiloff.Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008. Veja também o site deste livro.
T. Cormen et al. Algoritmos: Teoria e Prática. Rio de Janeiro: Editora Campus, 2ª edição, 2002.
N. Ziviani. Projeto de Algoritmos com implementação em Java e C++. São Paulo: Editora Thomson, 1a edição, 2007.
18
Alguns livros importantes para a carreira
19
Turmas A3-A4 (Matutino e Noturno)
Matutino
1 12/fev LAB Introdução à linguagem C1 14/fev TEO Apres. da disciplina. Ponteiros e estruturas2 19/fev LAB Ponteiros e estruturas2 21/fev TEO Ponteiros e estruturas lineares3 26/fev LAB Estruturas lineares (pilhas e filas)3 28/fev TEO Custos de algoritmos4 05/marLAB Feriado (carnaval)4 07/marTEO Algoritmos de busca. Árvores de Busca5 12/marLAB Árvores de busca5 14/marTEO Revisão de exercícios6 19/marLAB Prova 1 (no laboratório: Teoria+Lab)6 21/marTEO Árvores de busca balanceadas7 26/marLAB Árvores de busca balanceadas7 28/marTEO Árvores de busca balanceadas8 02/abr LAB Árvores de busca balanceadas8 04/abr TEO Árvores de busca balanceadas9 09/abr LAB Árvores de busca balanceadas9 11/abr TEO Algoritmos simples de ordenação10 16/abr LAB Algoritmos simples de ordenação10 18/abr TEO Algoritmos de ordenação eficientes11 23/abr LAB Algoritmos de ordenação eficientes11 25/abr TEO Revisão de exercícios12 30/abr LAB Prova 2 (no laboratório: Teoria+Lab)12 02/mai TEO Prova substitutiva13 08/mai LAB Prova de recuperação
Noturno
1 12/fev TEO Apresentação da disciplina1 14/fev LAB Introdução à linguagem C2 19/fev TEO Ponteiros e estruturas2 21/fev LAB Ponteiros e estruturas3 26/fev TEO Ponteiros e estruturas lineares3 28/fev LAB Estruturas lineares (pilhas e filas)4 05/marTEO Feriado (carnaval)4 07/marLAB Custos de algoritmos5 12/marTEO Algoritmos de busca. Árvores de Busca5 14/marLAB Árvores de busca6 19/marTEO Revisão de exercícios6 21/marLAB Prova 1 (no laboratório: Teoria+Lab)7 26/marTEO Árvores de busca balanceadas7 28/marLAB Árvores de busca balanceadas8 02/abr TEO Árvores de busca balanceadas8 04/abr LAB Árvores de busca balanceadas9 09/abr TEO Árvores de busca balanceadas9 11/abr LAB Árvores de busca balanceadas10 16/abr TEO Algoritmos simples de ordenação10 18/abr LAB Algoritmos simples de ordenação11 23/abr TEO Algoritmos de ordenação eficientes11 25/abr LAB Algoritmos de ordenação eficientes12 30/abr TEO Revisão de exercícios12 02/mai LAB Prova 2 (no laboratório: Teoria+Lab)13 08/mai TEO Prova substitutiva
20
Sobre as avaliações
Nota Período regular:0,35 * (P1 + P2) + 0,3 * Lab + Bônus
Recuperação: 0,7 * REC + 0,3 * Lab + Bônus
Atribuição de conceitos:A: nota ≥ 9B: 7,5 ≤ nota < 9C: 6 ≤ nota < 7,5D: 5,0 ≤ nota < 6F: nota < 5,0
21
Página web
http://professor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/
22
Exercícios de programação
23
Exercício 1
Escreva uma função, na linguagem C, em que dados dois números inteiros a e b, com a<=b, devolva a somatória dos números no intervalo [a, b].Obs: Use um laço
24
Exercício 1
Escreva uma função, na linguagem C, em que dados dois números inteiros a e b, com a<=b, devolva a somatória dos números no intervalo [a, b].Obs: Use um laço
25
Exercício 1
Escreva uma função, na linguagem C, em que dados dois números inteiros a e b, com a<=b, devolva a somatória dos números no intervalo [a, b].Obs: Use um laço
26
Exercício 2
Escreva uma função recursiva, na linguagem C, em que dados dois números inteiros a e b, com a<=b, devolva a somatória dos números no intervalo [a, b].
27
Exercício 2
Escreva uma função recursiva, na linguagem C, em que dados dois números inteiros a e b, com a<=b, devolva a somatória dos números no intervalo [a, b].
https://goo.gl/RWXugK
#include <stdio.h>
int FSRec(int a, int b) {
if (a<=b) return a + FSRec(a+1,b); return 0;
}
int main(void) { printf("%d\n", FSRec(50, 80)); return 0;}
28
Exercício 3
Dado um vetor de inteiros, v[0..n-1], crie uma função para determinar se a sequência de números corresponde a um palíndromo.
→ [1,2,3,4,3,2,1]: vetor palíndromo, devolve 1.→ [1,2,3,4,5,6,7]: não é vetor palíndromo, devolve 0.
Qual é o número mínimo de comparações necessárias para verificar se um vetor de tamanho n é ou não palíndromo?
29
Exercício 3
30
Exercício 3 (uma versão “elegante”)
31
Exercício 3 (uma versão recursiva)
Top Related