equalização de canais de comunicação baseada em redes ...lboccato/topico_1.4_algoritmos.pdf ·...

24
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

Upload: hakiet

Post on 21-Jan-2019

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 2: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

Introdução

2

Problema Computável COMPLEXIDADE

Encontro solução em

tempo factível?

ORDEM DE COMPLEXIDADE DO ALGORITMO

O melhor algoritmo é

O(cn) ou maior Problema Não-tratável

O(cn) ou maior, mas não se sabe

se é a melhor solução

Problema NP

O(nc) ou menor Problema P

Page 3: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 4: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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?

Page 5: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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.

Page 6: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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: cb ← 1 (complementa B) sb ← 0 (seleciona o complemento de B) la ← 1 (armazena o resultado em A)

Page 7: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 8: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 9: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

9

Mar-14 Mar-13 Change Programming Language Ratings Change1 2 C 17.54% 0.39%

2 1 Java 16.41% -1.75%

3 3 Objective-C 12.14% 1.91%

4 4 C++ 6.31% -2.80%

5 5 C# 5.57% -1.02%

6 6 PHP 3.70% -1.11%

7 7 (Visual) Basic 2.96% -1.65%

8 8 Python 2.02% -2.37%

9 11 JavaScript 1.90% 0.53%

10 16 Visual Basic .NET 1.86% 0.97%

11 17 Transact-SQL 1.48% 0.64%

12 69 F# 1.22% 1.14%

13 10 Perl 1.15% -0.81%

14 9 Ruby 0.97% -1.18%

15 15 Delphi/Object Pascal 0.88% -0.01%

16 13 Lisp 0.75% -0.19%

17 30 D 0.74% 0.40%

18 20 Assembly 0.73% 0.10%

19 14 PL/SQL 0.71% -0.21%

20 23 MATLAB 0.69% 0.07%

Page 10: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 11: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 12: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 13: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 14: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

tradução

compilador montador

HIERARQUIA DE

LINGUAGENS

decodificação

HARDWARE (circuitos e sinais físicos)

Page 15: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 16: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 17: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 18: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 19: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 20: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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.

Page 21: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 22: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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:

Page 23: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

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

Page 24: Equalização de Canais de Comunicação Baseada em Redes ...lboccato/topico_1.4_algoritmos.pdf · Muitas aplicações industriais são feitas em Assembly Mais eficiente – não

Créditos

24

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