A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

EA869 Algoritmos: estruturas de dados e linguagens de programação Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas.

Apresentações semelhantes


Apresentação em tema: "EA869 Algoritmos: estruturas de dados e linguagens de programação Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas."— Transcrição da apresentação:

1 EA869 Algoritmos: estruturas de dados e linguagens de programação Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato 1

2 Introdução 2 Problema Computável Problema Computável COMPLEXIDADE Encontro solução em tempo factível? ORDEM DE COMPLEXIDADE DO ALGORITMO O melhor algoritmo é O(c n ) ou maior Problema Não-tratável O(c n ) ou maior, mas não se sabe se é a melhor solução Problema NP O(n c ) ou menorProblema P

3 Introdução As questões a respeito da computabilidade e da complexidade nos levam a refletir sobre a existência de um algoritmo para resolver um problema e sobre o custo computacional envolvido em sua execução. Tendo um mãos um algoritmo de interesse, o que é necessário fazer para que ele esteja pronto para ser executado em um computador?  É preciso descrever ou expressar todos os seus passos segundo uma linguagem.  Uma vez escrito nesta linguagem, o algoritmo precisa ser traduzido para um formato inteligível à máquina incumbida de sua execução. 3 Linguagens de programação Processo de execução de um programa

4 Linguagem de máquina Na linguagem de máquina, os comandos (ou instruções) e dados que devem ser manipulados são codificados em cadeias binárias. É a linguagem mais próxima ao hardware. A programação, portanto, depende de um pleno conhecimento de como cada comando é representado e interpretado no circuito digital. 4 1010100010110101 0101110101010101 0101011101010101 1010101010101011 0101010101011110 Palavra de 16 bits Instrução É fácil e eficiente programar em linguagem de máquina?

5 Linguagem de máquina Vejamos um exemplo bastante simples: 5 cb – determina se o valor do registrador B é ou não complementado. sb – seleciona entre o valor referente ao registrador B ou o valor fixo 1. la – habilita o carregamento de um valor especificado na entrada paralela do registrador A.

6 Linguagem de máquina Exemplo: 6 Este humilde computador permite a realização de algumas operações: (1) A ← A + B (2) A ← A + 1 (3) A ← A – B Um “programa”, escrito em linguagem de máquina, que compute a subtração entre os valores em A e B, seria dado pela sequência de comandos binários: c b ← 1(complementa B) s b ← 0(seleciona o complemento de B) l a ← 1(armazena o resultado em A)

7 Linguagem simbólica Como poderíamos tornar o código mais compreensível ao programador? 7 1010100010110101 0101110101010101 0101011101010101 1010101010101011 0101010101011110 MOV R1, R2 MOV R1, #4 CMP R1, #4 BEQ FIM FIM: ADD R1, R1, 1 Linguagem simbólica (Assembly)  Substitui o código de máquina por símbolos mais próximos da linguagem humana.  Continua sendo muito próxima do hardware.  Trata-se de uma linguagem dependente da arquitetura do computador (hardware).  O código precisa ser interpretado, isto é, convertido ao formato binário para ser executado pelo computador. Quais as vantagens e desvantagens desta linguagem? Etapa de montagem – veremos no final do curso

8 Linguagem simbólica Breve história da linguagem Assembly 8 Década de 50 Programas eram escritos em linguagem de máquina Assembly surge para facilitar a programação Década de 70/80 Surgimento das linguagens de alto nível Assembly passou a ser pouco usada Década de 90 até hoje “Era dos microprocessadores” e sistemas embarcados Assembly “volta” na busca de desempenho e velocidade

9 Linguagem simbólica O uso de Assembly tem se tornado mais frequente. 9

10 Linguagem simbólica 10 Porque aprender a linguagem Assembly? Acesso direto e controle total do hardware Programas exigem menos memória e são menores Muitas aplicações industriais são feitas em Assembly Mais eficiente – não gera códigos supérfluos Possibilidade de desenvolver rotinas mais eficazes e incorporá-las a programas de alto nível Facilita a programação em alto nível

11 Linguagem simbólica O que é preciso saber para programar em Assembly?  Conhecer detalhes do hardware: organização da memória, registradores, periféricos, arquitetura etc.  Trabalhar fluentemente com representação binária:  Números negativos.  Condições de overflow.  Ponto flutuante.  Aprender o conjunto de instruções do processador. 11

12 Linguagens de alto nível E como poderíamos pensar em uma linguagem executável em qualquer máquina e mais próxima da linguagem humana? 12 MOV R1, R2 MOV R1, #4 CMP R1, #4 BEQ FIM FIM: ADD R1, R1, 1 public class ExemploDeFor { public static void main(String[] args) { for (int i = 0; i < 4; i++){ System.out.println("Indice " + i); } Linguagens de alto nível  Possuem uma semântica mais amigável ao usuário.  Distante do código de máquina e muito próximo da linguagem humana.  Exemplos: C, C++, C#, Java, Ruby, Python, Lisp, Prolog etc.  Podem ser do tipo procedimental (descreve passo a passo) ou declarativa (descreve fatos e regras e busca uma solução lógica).

13 Linguagens de alto nível Existem também linguagens especiais voltadas à aplicação e para outros propósitos. 13 Linguagens voltadas à aplicação Alguns exemplos: Aplicações matemáticas: Matlab Linguagens esotéricas: Voltadas a inteligência artificial: Prolog, Lisp HAI CAN HAS STDIO? VISIBLE "OLÁ MUNDO!" KTHXBYE LOLcode Piet ++++++++++[>++++++++>+++++++++++ >---------->+++>++++++++>+++++++ +++++>+++++++++++>++++++++++>+++ ++++++++>+++ -.>--.> ++++.>++.>---.>---.>.>.>+.>+++., Brainfuck

14 Processo de execução Uma vez escolhida uma linguagem de programação e escrito o código, como ele é executado? 14 Problema Algoritmo Programa de alto nível Programa em linguagem de máquina Execução resolução NÍVEL CONCEITUAL programação tradução compilador montador HIERARQUIA DE LINGUAGENS decodificação HARDWARE (circuitos e sinais físicos)

15 Linguagens de Programação Ponto importante: um algoritmo pode ser expresso em qualquer linguagem de programação. Em última análise, elas servem apenas como um mediador entre o programador e a máquina. As linguagens de baixo nível (máquina e simbólica) não oferecem muitos recursos para o programador. Porém, o controle sobre sinais e aspectos de hardware é bem mais efetivo. O que muda, portanto, de uma linguagem para outra é a dificuldade e a inteligibilidade do código escrito. 15

16 Estruturas de dados A preparação de um algoritmo também envolve a escolha de uma forma vantajosa de organizar os dados que serão acessados e processados. Dependendo da aplicação, pode haver um tipo de organização que capture ou expresse de maneira natural uma característica dos dados associados ao problema. Veremos quatro tipos básicos:  Vetor  Fila  Pilha  Árvore 16

17 Estruturas de dados Suponha que certo algoritmo precise acessar a nota de um aluno dado o seu RA. Como os dados devem ser organizados?  Solução: uma lista cujo índice seja o RA e o conteúdo as notas  Dessa forma, é possível acessar, incluir e modificar a nota de um aluno dado o seu RA de maneira direta. Vetor: sequência de tamanho fixo cujo acesso é realizado através do índice que identifica a posição do elemento a ser lido ou escrito.  Com isto, temos acesso aleatório (“direto”) e o tempo de acesso a qualquer elemento é idêntico. 17 Leitura – vetor(i) i é fornecido elemento ← vetor(i) Escrita – vetor(i) i é fornecido vetor(i) ← elemento

18 Estruturas de dados Considere um algoritmo que deve gerenciar o atendimento telefônico de um call center. Como os dados devem ser organizados? 18 c1 c2 c3 c4 c5 c0 REGISTRO DE DADOS c6

19 Estruturas de dados Fila: o acesso aos elementos da fila é realizado através das posições “entrada” e “saída” – as demais posições não são visíveis.  Estrutura do tipo FIFO (first in, first out).  Acesso: através de dois apontadores.  Manipulação: apenas a entrada e a saída são visíveis.  Fila cheia: índice de entrada i > índice máximo da fila.  Fila vazia: índice de entrada i = índice de saída j. 19 Leitura – posição “saída” elemento ← f(j) atualiza índice de saída j Escrita – posição “entrada” f(i) ← elemento atualiza índice de entrada i

20 Estruturas de dados Considere um algoritmo que armazena as páginas que você acessa na Internet de tal modo que seja possível retornar à primeira página acessada refazendo o mesmo caminho. Como os dados devem ser organizados? 20 (1) (2) Devo retornar à página mais recentemente visitada.

21 Estruturas de dados Pilha: o acesso aos elementos da pilha é realizado através da mesma posição (entrada = saída) – as demais posições não são visíveis.  Estrutura do tipo LIFO (last in, first out).  Acesso: através de um único apontador.  Pilha cheia: i > índice da última posição da pilha.  Pilha vazia: i = índice da primeira posição da pilha.  i sempre aponta para a próxima posição livre da pilha. 21 Leitura atualiza o índice i elemento ← p(i) Escrita p(i) ← elemento atualiza o índice i

22 Estruturas de dados Árvore:  Estrutura: cada célula contém um dado e apontador para a(s) próxima(s) célula(s). As células não precisam ser homogêneas.  Manipulação: flexível, com início pela raiz. 22 dados apontador célula:

23 Estruturas de dados Árvore:  O acesso aos elementos da árvore é realizado através de um percurso a partir de sua raiz, seguindo o(s) apontador(es) das células. Todas as posições da estrutura são acessíveis. 23 Leitura – célula j navegar na estrutura até célula j elemento ← dados da célula Escrita –célula j navegar na estrutura até célula j dados da célula ← elemento

24 Créditos 24  Este material está baseado nas notas de aula elaboradas pelo Prof. Léo Pini e pelo aluno de doutorado Tiago Novaes.


Carregar ppt "EA869 Algoritmos: estruturas de dados e linguagens de programação Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas."

Apresentações semelhantes


Anúncios Google