Você está na página 1de 83

Clique para editar o

estilo do ttulo mestre


Clique para editar o estilo do
subttulo mestre
17/03/2014 1
Sobre a OBI
SOBRE A OLIMPADA
BRASILEIRA DE INFORMTICA
Sobre a OBI
Iniciao (Ensino Fundamental)
Programao (Fundamental e Mdio)

Modalidades
Sobre a OBI
Modalidade Programao:
Nvel Junior
Destinado a apenas o Ensino Fundamental;
Nvel 1 (at o segundo ano do Ensino Mdio)
Aborda estruturas de dados bsicas, estruturas
condicionais e de repetio;
Nvel 2 (at o terceiro ano do Ensino Mdio)
Aborda os conceitos bsicos, algoritmos, paradigmas e
grafos.

Modalidades
Sobre a OBI
Modalidade Programao:
Nvel Universitrio
Destinado a alunos de graduao do primeiro ano ou
alunos de tcnico integrado do quarto ano.

Modalidades
Sobre a OBI
A Olimpada dividida em duas fases:
Nvel 1
Fase 1: 24/05
Fase 2: 30/08
Nvel 2
Fase 1: 10/05
Fase 2: 16/08

As provas
Sobre a OBI
Medalhas;
Curso de programao na Unicamp;
Nvel 1 e 2
No nvel 2, participao na seletiva para a IOI2015.

Premiaes
O Preparatrio
O PREPARATRIO PARA A OBI
O Preparatrio
Aula Terica:
9h s 12h
Treino:
13h30m s 17h30m
Mtodos de Aprendizado
O Preparatrio
Set de problemas com SPOJ
Mini-maratona de Programao!

Mtodos de Aprendizado

O Preparatrio
Set de problemas com SPOJ
treino no sbado
treino durante a semana
Mini-maratona de Programao!

Mtodos de Aprendizado
O Preparatrio
Set de problemas com SPOJ
Mini-maratona de Programao!
03 de maio, tarde!


Mtodos de Aprendizado
O Preparatrio
Set de problemas com SPOJ
Mini-maratona de Programao!
03 de maio, tarde!
Cada problema acertado, um balo capturado!


Mtodos de Aprendizado
O Preparatrio
Set de problemas com SPOJ
Mini-maratona de Programao!
03 de maio, tarde!
Cada problema acertado, um balo capturado!
Competio idntica Maratona de Programao,
porm com problemas para o ensino mdio


Mtodos de Aprendizado
O Preparatrio
Set de problemas com SPOJ
Mini-maratona de Programao!
03 de maio, tarde!
Cada problema acertado, um balo capturado!
Competio idntica Maratona de Programao,
porm com problemas para o ensino mdio
Organizadores: Arthur Dadalto, Carolina
Guimares, Pedro Affonso e Vvian Thiebaut


Mtodos de Aprendizado
O Preparatrio
Online Judge com mais de 200.000 usurios
registrados com mais de 10.000 problemas
As solues dos problemas podem ser
submetidas em mais de 40 linguagens,
incluindo C, obviamente
A interface de usurio bastante primitiva,
porm atualmente o mais til para
preparao para a OBI, por possuir diversos
problemas da mesma


O SPOJ (Sphere Online Judge)
O Preparatrio
Cadastrem-se no SPOJ!


O SPOJ (Sphere Online Judge)
O Preparatrio
Embasado no nvel 1 e 2:
Algoritmos
Paradigmas de Projeto de Algoritmos
Estruturas de Dados
Contedo Abordado
O Preparatrio
Embasado no nvel 1 e 2:
Algoritmos
Ordenao
Busca
Grafos
Paradigmas de Projeto de Algoritmos
Estruturas de Dados
Contedo Abordado

O Preparatrio
Embasado no nvel 1 e 2:
Algoritmos
Paradigmas de Projeto de Algoritmos
Mtodo Guloso
Diviso e Conquista
Programao Dinmica
Estruturas de Dados
Contedo Abordado

O Preparatrio
Embasado no nvel 1 e 2:
Algoritmos
Paradigmas de Projeto de Algoritmos
Estruturas de Dados
Pilha, Fila
rvores
Contedo Abordado

O Preparatrio
2012
1 MEDALHA DE OURO (Carolina Guimares)
1 MEDALHA DE PRATA (Gabriel Guimares)
Resultados
O Preparatrio
2013
1 MEDALHA DE PRATA (Arthur Dadalto)
2 MEDALHAS DE BRONZE (Carolina Guimares e
Pedro Afonso)
1 LUGAR NO TOPCOM 11:
Arthur Dadalto
Carolina Guimares
Lucas Leite
ARTHUR DADALTO NA IOI 2014!
Resultados
O Preparatrio
2014
10, 20 MEDALHAS!?
TRS EQUIPES EM 1, 2 e 3 LUGAR NO
TOPCOM!?
Resultados
O seu objetivo
QUAL O SEU OBJETIVO?
O seu objetivo
GANHAR MEDALHAS?
O seu objetivo
GANHAR MUITAS OLIMPADAS E
SER VALORIZADO POR
EMPRESAS, etc?
O seu objetivo
ADQUIRIR CONHECIMENTOS EM
ALGORITMOS?
O seu objetivo
FAZER OS CAPIXABAS
DOMINAREM A OBI?
(Paulistas e Cearenses looosers XD)
O seu objetivo
APRENDER ALGORITMOS PRA
FAZER UM ALGORITMO
AVANADO PRO SEU ROB?
O seu objetivo
APRENDER ALGORITMOS NO
ENSINO MDIO PRA DEPOIS NO
ENSINO SUPERIOR APRENDER
AINDA MAIS, FAZER UMA
EMPRESA E FICAR RICO?
O seu objetivo
VIAJAR PRA TAIWAN, ITLIA E
AFINS NA IOI?
O seu objetivo
CONHECER OUTROS NERDS E
FAZER AMIZADES NERDS COM
CONVERSAS NERDS SOBRE
ALGORITMOS NERDS?
O seu objetivo
CRIAR UM HAL 9000 DE
VERDADE E DOMINAR O
MUNDO?
O seu objetivo
ADQUIRIR CONHECIMENTO E
EVOLUIR O MUNDO OU SEU
PAS?
O seu objetivo
APENAS APROVEITE.
Dicas de Programao
Dicas de Programao
(Fonte: Art Of Programming Contest, Ahmed
Shamsul Arefin)
Dicas de Programao
Um bom programador gasta 10% do
seu tempo codificando, 45%
pensando e buscando uma soluo
para o problema e o resto do tempo
debugando. Portanto, para diminuir
seu tempo de codificao voc
dever resolver problemas fceis,
primeiramente.
Dicas de Programao
Tente resolver um problema de
diversas maneiras, caso as encontre.
Assim voc poder saber qual
algoritmo usado melhor e qual pior.
Alm disso, voc estar ciente de vrios
erros de implementao que podem
ocorrer. Lembre-se, um problema pode
ser resolvido mais rapidamente de
uma maneira que de outra.
Dicas de Programao
Se aprofunde numa linguagem!
Use as funes padres da
linguagem;
Dicas de Programao
H dois fatores cruciais para se tornar
um bom programador:
1. Conhecimento sobre os algoritmos
padres e habilidade em encontrar o
algoritmo mais apropriado para o
problema em questo;
2. Habilidade/Rapidez em codificar
algoritmos dentro dos programas.
Tutorial em C
Programao em C:
um breve tutorial resolvendo
um problema no SPOJ
Tutorial em C
http://br.spoj.com/problems/PAR/
Problema no SPOJ
Par ou mpar OBI 2004
Tutorial em C
#include <[bibliotecas]>

int main(){
/* cdigo */
return 0;
}
Corpo do programa principal
Tutorial em C
<tipo> <nomedavariavel>;
<tipo> <nomedavar1l>, <nomedavar2>, <>;
Declarao de variveis
Tutorial em C
<tipo> <nomedavariavel>[<tamanho>];
Declarao de matrizes
Tutorial em C
<nomedavariavel> = <expresso>;
<nomedovetor>[<indice>] = <expressao>;
Comandos de atribuio
Tutorial em C
if (<expressao lgica>){
/* cdigo */
}
else{
/* cdigo */
}
Estrutura de Seleo
Tutorial em C

while (<criterio de parada>)
{
/* cdigo */
}

for (<inicio do contador>; <parada>;
<incremento>)
{
/* cdigo */
}
Estrutura de Repetio
Tutorial em C

<tipo de retorno> <nome da funcao> (<tipo>
<variavel>, <tipo> <variavel>, )
{
/* cdigo */
return <valor>; // necessrio
se o retorno nao for void
}
Funes
Tutorial em C
typedef struct aluno{
int matricula;
int idade;
}aluno;
O acesso:
aluno a1;
a1.matricula = <valor>;
a1.idade = <valor>;

Structs
Tutorial em C
int n = 10;
scanf (%d,&n);
printf (%d\n,n);

Entrada e Sada de Dados
Anlise de Complexidade
Anlise de Complexidade de
Algoritmos
Anlise de Complexidade
Que recursos computacionais so
necessrios para executar um
algoritmo?
Tempo de execuo
Espao de memria
Ambos dependem da dimenso dos dados.

Eficincia de Algoritmos
Anlise de Complexidade
Na prtica, muito difcil calcular com rigor o
tempo de execuo de um algoritmo!
Com isso, uma boa prtica identificar no
algoritmo as operaes elementares e
determinar o nmero de vezes que so
executadas. O tempo real de execuo de
cada operao ser uma constante
multiplicativa!

Eficincia de Algoritmos
Anlise de Complexidade
Tomemos duas solues para localizar
um elemento em um vetor: LIN e BIN
Temos dois computadores diferentes, A
e B, sendo A um Core i7 e B um Celeron

Como comparar duas solues para
um mesmo problema?
Anlise de Complexidade
Como comparar duas solues para
um mesmo problema?
Anlise de Complexidade
Como comparar duas solues para
um mesmo problema?
Anlise de Complexidade
Melhor Caso: (mega)
Caso Mdio: (theta)
Pior Caso: O
Tipos de Anlise

Anlise de Complexidade
Se analisa o nmero de operaes para a
execuo de determinado algoritmo
com base na entrada n
Normalmente se usa a componente que
teria o maior esforo computacional
Ex: n de operaes: 3n + 2n + 5
Complexidade: n
Anlise de Pior Caso (O)

Anlise de Complexidade
Despreza-se constantes multiplicativas e
aditivas
Termos de menor grau podem ser
desprezados
Ex: O(2n + 3n + 5) = O(n)

Clculo da Complexidade

Anlise de Complexidade
Clculo da Complexidade


Nmero de Operaes Complexidade
f(n) O(f(n))
c x f(n) O(f(n))
f(n) + f(n) O(f(n))
f(n) + g(n) O(max(f(n),g(n))
f(n) x g(n) O(f(n) x g(n))
Anlise de Complexidade
Clculo da Complexidade

void FloidWarshall(int dist[][]) {
int i;
int j;
int k;
for ( k = 0; k < n; k++ ) {
for ( i = 0; i < n; i++ ) {
for ( j = 0; j < n; j++ ) {
int a = dist[i][j];
int b = dist[j][k];
int c = dist[k][j];
dist[i][j] = min(a, b + c );
}
}
}
}

Anlise de Complexidade
Ordens de Algoritmos

Um algoritmo pode possuir complexidade:
Constante
Linear
Logartmica
Log Linear

Anlise de Complexidade
Ordens de Algoritmos

Um algoritmo pode possuir complexidade:
Quadrtica
Cbica
Exponencial
Fatorial


Anlise de Complexidade
Complexidade Constante O(1)

So os algoritmos onde a complexidade
independe do tamanho n de entradas;
o nico em que as instrues dos
algoritmos so executadas um nmero
fixo de vezes.

Anlise de Complexidade
Complexidade Linear O(N)

Uma operao realizada em cada
elemento de entrada. Ex: Pesquisa
Linear

Anlise de Complexidade
Complexidade Logartmica O(LOGN)

Ocorre tipicamente em algoritmos que
dividem o problema em problemas
menores. Ex: Pesquisa Binria

Anlise de Complexidade
Complexidade Log Linear O(NLOGN)

Ocorre tipicamente em algoritmos que
dividem o problema em problemas
menores, porm juntando
posteriormente a soluo dos problemas
menores. Ex: Merge Sort

Anlise de Complexidade
Complexidade Quadrtica O(N)

Itens so processados aos pares,
geralmente com um loop dentro do
outro. Ex: Bubble Sort.

Anlise de Complexidade
Complexidade Cbica O(N)

Itens so processados aos pares,
geralmente com um loop dentro do
outro. Ex: Multiplicao de Matrizes.

Anlise de Complexidade
Complexidade Exponencial O(2
N
)

Utilizao de Fora Bruta para encontrar a soluo
de um problema.
A soluo geralmente baseada diretamente no
enunciado do problema e nas definies dos
conceitos envolvidos
Ex.:
Utilizando apenas nmeros possvel criar 10
n

senhas de n dgitos
Um algoritmo de fora bruta para quebrar uma
dessas senhas tem complexidade O(2
n
)

Anlise de Complexidade
Complexidade Fatorial O(N!)

Tambm baseada na utilizao de fora
bruta para encontrar a soluo de um
problema
Consiste em testar todas as possveis
permutaes existentes na soluo procura
da soluo tima para o problema
Anlise de Complexidade
Complexidade Fatorial O(N!)

Ex.: Problema do Caixeiro Viajante
Encontrar a rota mnima para visitar vrias cidades
sem repetir nenhuma
um problema base para o projeto de microchips,
sequnciamento de genma e muitas outras
aplicaes
No possui soluo exata eficiente (Problema NP)
Utilizao de heursticas para aproximar a soluo
tima

Anlise de Complexidade
Comparao entre as complexidades

Imagine um computador que leva 1ms para executar
uma operao.
A tabela abaixo indica o tempo aproximado de
execuo de um algoritmo com diferentes ordens de
complexidades para 3 tamanhos de entrada

n O(n) Log(n) nLog(n) O(n
2
) O(n
3
) O(2
n
) O(n!)
16 0.016s 0.004s 0.064s 0.256s 4s 1m5s
663
anos
32 0.032s 0.005s 0.16s 1s 33s 49 dias 10
23
sec
512 0.512s 0.009s 4.608s 4m22s 37h
10
143

sec
...
Iniciando
Iniciando os Treinos
Iniciando
AINDA NO APRENDEMOS
ALGORITMOS ESPECFICOS E
PARADIGMAS, J IREMOS
PRATICAR?
Iniciando
PROBLEMAS ADHOC:
No dependem de nenhum
algoritmo ou paradigma j
definido e estudado por
cientistas, apenas dependendo
da sua lgica.
Camisetas!
CAMISETAS DO PREPARATRIO!
Camisetas!
VALOR: R$17,00
Preencher formulrio a ser enviado.
Camisetas!

Camisetas!

Clique para editar o
estilo do ttulo mestre
Clique para editar o estilo do
subttulo mestre
17/03/2014 83

Você também pode gostar