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
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