ICC2 Aula 5
Fábio Nakano
Dúvidas, perguntas
• Precisamos da atividade prática da aula passada para medir algumas coisas.
• Sobre o resumão até o momento em que vi, 22 pessoas tinham entregue.
• Os resumos são a combinação da vivência da pessoa sobre o assunto e do que achou interessante na aula. Às vezes um assunto é mencionado pq se notou sua consequencia na prática, às vezes, pq chamou atenção na aula.
Estrutura do texto
• Algumas pessoas optaram por resumos textuais intercalando definições, isso resulta num texto bom para ler, mas pode “esconder” conceitos e definições.
• Outros fizeram um glossário: termo, definição, o que é muito bom para o objetivo que temos.
• Algumas pessoas têm dificuldade em escrever e usam termos pouco precisos. Geralmente é consequencia da falta de algum conceito relacionado. Estas pessoas devem procurar esclarecer esses pontos com colegas ou com o professor, mas não podem deixar como está (TCC).
Tipificação
• Programam e têm os conceitos estruturados, estão confortáveis com os conceitos
• Programam e sabem as consequencias práticas dos conceitos, mas têm dificuldade em enunciar o conceito
• Programam em outras linguagens, sabem os conceitos, mas às vezes misturam (virtual ou friend em JAVA)
• Programam e dependem das aulas de ICC2 para firmar conceitos.
• Aprenderam a programar em ICC1, têm pouca vivência em programação, os conceitos ainda não estão arraigados. (Dúvidas, testes, consultas)
• “Aprendizado por exemplo” requer complementação
A parte de programação/JAVA acabou.
• ... Quem tiver dúvidas pode perguntar!• ... De vez em quando vou passar um ou outro
comando e pedir uma ou outra implementação.
O que é um computador?
Descrevam instâncias do objeto
Quais são os recursos de um computador?
Vamos classificar, no sentido OOP da palavra!
Chegamos a um modelo abstrato de computador.
Computador é uma máquina
• Como tal tem um conjunto de recursos• Estes recursos têm limite.• Computador é uma máquina que recebe uma
sequencia de entrada e uma sequencia bem definida de instrucoes, resultando em nova informação (ITC).
Modelo de Computação
• AF (ITC)• Turing (ITC)• RAM (Von Neumann)• PRAM
I o KIKo??
O que queremos dos nossos programas?
• Executar eficientemente• Usar bem os recursos da máquina• Resolver em tempo razoável
RAM - Modelo de Von Neumann
Dispositivo de Entrada Processador
Dispositivo de
Saída
Memória
Considerando o modelo VN, Quais são os recursos da máquina?
Recursos a analisar
• Recursos limitantes sob o modelo de VN– Tempo de processamento– Memória utilizada– Tempo de acesso à memória
• Tempo de desenvolvimento não é limitante da máquina, mas do projeto. OOP ajuda nisso tb!
Tempo de processamento
• Depende do tipo de máquina• Do tempo de execução de cada instrução• Da qualidade do programa• Da específica instância do problema
Tempo de execução pode ser diretamente medido
• starttime=System.nanoTime(); /* java.util.* */
Ordena_lote_coelho
0 10000 20000 30000 40000 50000 600000
5000000000
10000000000
15000000000
20000000000
25000000000
Tempo de execução (ns)
Ordena_lote_coelho
0 10000 20000 30000 40000 50000 600000
200000000
400000000
600000000
800000000
1000000000
1200000000
1400000000
Número de comparações
Dificuldades em se usar tempo de execucão
Experimento coletivo
• Construir uma classe “criador” que “cria” coelhos, e entrega lotes de coelhos para a loja_de_coelhos
• Estes coelhos têm alturas atribuídas aleatoriamente (Random rng = new Random(); rng.nextInt() % 30)
• Na classe compara (ou nas subclasses), incluir código para contar o número de comparações.
• Dentro da classe loja_de_coelhos, implementar um método para ordenar os coelhos.
• Nesse método, armazenar, para cada ordenação feita, o tempo transcorrido, o número de comparações e a quantidade de coelhos por lote. Gravar em um arquivo texto.
Experimento coletivo
• Dividir a turma em grupos. Um grupo fará testes com n pequeno (de 5 a 500 coelhos por lote)
• Outro com n grande (500 a 50000 coelhos por lote)• Outro com n muito grande (50000+ coelhos por lote)• Enviar esses resultados pelo CoL, juntamente com
uma descrição da máquina (Intel Core T5340 2G de RAM, Windows Vista 64-bit) eu me encarrego de concatenar os resultados prá gente ver no que deu.
Resultado esperado:
Conclusão esperada
• Tempo de execução flutua muito e depende de máquina.
• Em algoritmos baseados em comparações, o número de comparações é proporcional ao tempo de execução.
• Numero de comparações é independente de máquina.
Isso nos leva a...
Análise de Algoritmos e Complexidade
Complexidade Assintótica