Вы находитесь на странице: 1из 16

Unidade 1

Tipos Abstratos de Dados


Algoritmos e Estruturas de Dados
Prof. Waldir Ribeiro
Sistemas de Informação
PUC Minas São Gabriel

© WPJR - 2009

Sumário
• Introdução
– Algoritmo
– Estrutura de dados
– Programa
• Tipos abstratos de dados
– Definição
– Implementação

© WPJR - 2009

1
Introdução
Referências usadas
• CORMEN, Thomas H. Algoritmos: teoria e prática. Rio de
Janeiro: Campus, 2002. 916p. ISBN 8535209263 Parte I,
Parte II, Parte III, Parte VIII (Disponível no Acervo).
– Parte I, Cap. 1, Parte III Introdução

• ZIVIANI, Nivio. Projeto de algoritmos: com implementações


em Pascal e C. 6. ed. São Paulo: Pioneira, c2000. 267p.
ISBN 8522101744 Cap. 3, Cap. 4 e Cap. 5 (Disponível no
Acervo).
– Capítulo 1

© WPJR - 2009

Introdução
• Os algoritmos estão em toda
a parte
– Instruções para uso de
medicamentos
– Indicações de como montar um
aparelho
– Uma receita de culinária

• Componentes
– Problema
– Ações executáveis
– Solução

© WPJR - 2009

2
Algoritmo
Receita de Bolo
• Esquentar o forno
• Obter os ingredientes necessários
• Misturar os ingredientes na ordem pré-definida
• Preparar a forma
• Colocar a mistura na forma
• Assar no forno por 50 minutos
• Enquanto a parte superior não estiver dourada
– Deixar assando por mais 5 minutos
• Tirar do forno e deixar esfriar

© WPJR - 2009

Introdução
Algoritmo: Definições
• Seqüência de ações executáveis para a obtenção de uma
solução para um determinado tipo de problema

• Uma sequência finita de instruções, lógica, um procedimento


passo a passo explícito para a resolução de um problema,
normalmente usado para cálculo e processamento de
dados, dentre outras áreas.

© WPJR - 2009

3
Introdução
Algoritmo: Definições
• De acordo com Dijkstra:
– “uma descrição de um padrão de comportamento, expresso em
termos de um conjunto finito de ações”

• Executando a operação (a + b) percebemos um padrão de


comportamento, mesmo que a operação seja realizada para
valores diferentes de a e b.
– Entradas: a e b
– Operação: +
– Solução: a + b

© WPJR - 2009

Introdução
Algoritmo: Definições
• Considerado como uma ferramenta para resolver um
problema computacional bem especificado
– Bem especificado = bem definido, regras claras e precisas

• Pode receber como entrada um conjunto de valores e pode


produzir como saída um outro conjunto de valores
– Relação entrada/saída

• Exemplo: ordenação de números


– Entrada: uma seqüência de N números (a1, a2, . . ., an)
– Saída: uma permutação (reordenação) (a´1, a´2, . . ., a´n) da
seqüência de entrada, tal que a´1 <= a´2 <= . . .<= a´n

© WPJR - 2009

4
Introdução
Algoritmo: Definições
• Dicionário Houaiss da Língua Portuguesa, 2001, 1a edição:
– Conjunto das regras e procedimentos lógicos perfeitamente definidos
que levam à solução de um problema em um número de etapas.

• Dicionário Webster da Língua Inglesa:


– An Algorithm is a procedure for solving a mathematical problem in a
finite number of steps that frequently involves a repetition of an
operation

© WPJR - 2009

Introdução
Algoritmo: Definições
• Introduction to Algorithms, ClRS, 2001, 2nd edition:
– Informally, an algorithm is any well-defined computational procedure
that takes some value, or set of values, as input and produces some
value, or set of values, as output. An algorithm is thus a sequence of
computational steps that transform the input onto the output.

• Algorithms in C, Sedgewick, 1998, 3rd edition:


– The term algorithm is used in computer science to describe a
problem-solving method suitable for implementation as a computer
program.

© WPJR - 2009

5
Introdução
Algoritmo: Observações Importantes
• Regras são precisas

• Conjunto de regras é finito


– Linguagens de programação

• Tempo finito de execução


– Diferente de eternidade!

• Regras são executadas por um computador


– Linguagem de máquina

© WPJR - 2009

Introdução
Algoritmo: Classificações
• Por implementação
– Recursão ou iteração
– Serial, paralelo ou distribuído
– Determinístico vs. Não determinístico
– Exato ou aproximado
• Por paradigma de desenho
– Divisão e conquista
– Método guloso
– Redução

© WPJR - 2009

6
Introdução
Algoritmo: Discussão
• Dois ou mais algoritmos diferentes podem ser usados para
resolver um mesmo problema. Como estes podem ser
avaliados/comparados? Como medir o custo?
– Possibilidades: espaço, tempo e número de ciclos
– Casos: pior, melhor, médio
• Para todos os problemas existem algoritmos para solucioná-
los?
– Criptografia (one-way function)
– Algoritmos de escalonamento e tempo
– Dentre outros (classe NP Completo)
• Alguns problemas solucionados com algoritmos
– Projeto Genoma Humano, Internet, Comércio Eletrônico, Otimização
de Recursos e no transporte, Telecomunicações

© WPJR - 2009

Introdução
Estrutura de Dados
• As estruturas de dados e os algoritmos estão fortemente
ligados
– Não é possível estudar estruturas de dados sem considerar os
algoritmos associados a elas
– Também a escolha dos algoritmos em geral depende da
representação e da estrutura dos dados

Utilização
Estruturas de
Armazenamento Algoritmos
Dados
de Dados

© WPJR - 2009

7
Introdução
Estrutura de Dados
• Maneira particular de armazenamento e organização de
dados em um computador de tal forma que estes possam
ser utilizados de forma eficiente.
• São usadas em praticamente todos os programas e
sistemas de software
• Tipos de dados
– Primitivos
– Compostos: registros, uniões
– Abstratos: Container, deque, lista, mapa, fila, conjunto, pilha e árvore
• Estruturas
– Lineares: vetores, matrizes, listas, listas encadeadas
– Árvores: arvores binárias, árvores T e B
– Hashes: tabelas hash, arvores hash
– Grafos © WPJR - 2009

Introdução
Estrutura de Dados
• Para resolver um problema, é necessário escolher uma
abstração da realidade, em geral mediante a definição de
um conjunto de dados que representa a situação real

• A seguir deve ser escolhida a forma de representar esses


dados (estado) e as operações sobre estes
(comportamento)

• Exemplos de TADs
– Container, fila de prioridades, pilha, deque, fila simples, lista, lista
encadeada, conjunto, árvore, grafo
– Objetos e classes

© WPJR - 2009

8
Introdução
Representação dos Dados
• A escolha da representação dos dados é determinada, entre
outras, pelas operações a serem realizadas sobre os dados.

• Situações
– Como representar uma fila de usuários em um banco?
– Como representar uma relação entre usuários numa rede social?
– Como representar um deslocamento de mercadorias sobre uma
determinada área?
– Como representar um armazenamento de itens dentro de um espaço
limitado?

© WPJR - 2009

Introdução
Representação dos Dados
• Por exemplo, a operação de adição:
– Para pequenos números, uma boa representação é por meio de
barras verticais (caso em que a operação de adição é bastante
simples).
– Já a representação por dígitos decimais requer regras relativamente
complicadas, as quais devem ser memorizadas.
– Entretanto, quando consideramos a adição de grandes números é
mais fácil a representação por dígitos decimais (devido ao princípio
baseado no peso relativo da posição de cada dígito).
– Porém, a operação de adição usando números decimais é inviável de
ser implementada em computadores devido à arquitetura de
hardware utilizada.
• O sistema binário é mais apropriado para a construção via portas lógicas
(AND, OR, NAND, XOR, NOR, NOT, etc.)
• Algebra booleana

© WPJR - 2009

9
Introdução
Programas
• Programar é basicamente estruturar dados e construir
algoritmos.
– Programa = algoritmos + estruturas de dados
• Programas são formulações concretas de algoritmos
abstratos, baseados em representações e estruturas
específicas de dados.
• Em outras palavras, os programas são instruções a serem
executadas por um computador (CPU)

© WPJR - 2009

Introdução
Programas
• Programas representam uma classe especial de algoritmos
capazes de serem seguidos por computadores.

• Um computador só é capaz de seguir programas em


linguagem de máquina (seqüência de instruções obscuras e
desconfortáveis).
– Código fonte: legível pelo ser humano
– Compilação: processo de conversão de código fonte para código de
máquina
– Linguagem de máquina: executada pelo computador
• Código binário

© WPJR - 2009

10
Introdução
Programas
• É necessário construir linguagens mais adequadas, que
facilitem a tarefa de programar um computador.
– Linguagem próxima a linguagem do ser humano

• Uma linguagem de programação é uma técnica de notação


para programar, com a intenção de servir de veículo tanto
para a expressão do raciocínio algorítmico quanto para a
execução automática de um algoritmo por um computador.
– Raciocínio algorítmico expressada pelo programador
– Execução automática por um computador

© WPJR - 2009

Tipos de Dados
Definição
• Caracteriza o conjunto de valores a que uma constante
pertence, ou que podem ser assumidos por uma variável ou
expressão, ou que podem ser gerados por uma função.

• Tipos simples de dados são grupos de valores indivisíveis


(como os tipos básicos integer, boolean, char e double).
– Exemplo: uma variável do tipo boolean pode assumir o valor
verdadeiro ou o valor falso, e nenhum outro valor.

• Os tipos estruturados em geral definem uma coleção de


valores simples, ou um agregado de valores de tipos
diferentes.
– Tipos simples (int, bool, double, etc.)
– Tipos compostos ou estruturados (registros, arranjos, arquivos)

© WPJR - 2009

11
Tipos Abstratos de Dados
Definições
• Modelo matemático, acompanhado das operações definidas
sobre o modelo.
– Exemplo: o conjunto dos inteiros acompanhado das operações de
adição, subtração e multiplicação.

• TAD’s são utilizados extensivamente como base para o


projeto de algoritmos.

• A implementação do algoritmo em uma linguagem de


programação específica exige a representação do TAD em
termos dos tipos de dados e dos operadores suportados.

© WPJR - 2009

Tipos Abstratos de Dados


Definições
• A representação do modelo matemático por trás do tipo
abstrato de dados é realizada mediante uma estrutura de
dados.
• Modelagem matemática
– Metodologia que usa a matemática na resolução de problemas
(solução analítica)
– Utiliza a linguagem matemática para descrever um sistema
– Pode ser aplicada em diversas áreas de conhecimento
• Ex: Crescimento populacional, comportamento de consumidores,
sistemas dinâmicos
• Modelagem computacional
– Programa que simula um modelo abstrato de um sistema em
particular
– Utiliza modelos matemáticos com dados de eventos reais
© WPJR - 2009

12
Tipos Abstratos de Dados
Definições
• Podemos considerar TAD’s como generalizações de tipos
primitivos e procedimentos como generalizações de
operações primitivas.

• O TAD encapsula tipos de dados. A definição do tipo e todas


as operações ficam localizadas numa seção do programa.

• Processo de modelagem
Solução para o
Problema
Problema

Modelo Modelo
Abstrato Transformado
© WPJR - 2009

Tipos Abstratos de Dados


Implementação
• Considere uma aplicação que utilize uma lista de inteiros.
Poderíamos definir TAD Lista, com as seguintes operações:
– 1. faça a lista vazia;
– 2. obtenha o primeiro elemento da lista; se a lista estiver vazia, então
retorne nulo;
– 3. insira um elemento na lista.

• Há várias opções de estruturas de dados que permitem uma


implementação eficiente para listas (por ex., o tipo
estruturado arranjo).

© WPJR - 2009

13
Tipos Abstratos de Dados
Implementação
• Cada operação do tipo abstrato de dados é implementada
como um procedimento na linguagem de programação
escolhida.
– Ex: Lista S
– Operações: adicionar(S, x), remover(S, x), inserir(S, x, pos),
atribuir(S, x, pos), pesquisar(S, x), limpar(S), ordenar(S), minimo(S),
máximo(S)

• Qualquer alteração na implementação do TAD fica restrita à


parte encapsulada, sem causar impactos em outras partes
do código.
– Encapsulamento de dados

© WPJR - 2009

Tipos Abstratos de Dados


Implementação
• Cada conjunto diferente de operações define um TAD
diferente, mesmo atuem sob um mesmo modelo
matemático.
– Ex: lista, lista encadeada, fila e pilha

• A escolha adequada de uma implementação depende


fortemente das operações a serem realizadas sobre o
modelo.
– Importância em analisar o problema a ser solucionado
– Uma escolha errada pode custar caro!

© WPJR - 2009

14
Exercício
• Escreva um algoritmo que encontra o maior número
de uma lista de números não ordenada.
• Duas fases:
– Descrição de alto nível
– Descrição quase formal (pseudocódigo)

© WPJR - 2009

Revisão
• O que é um algoritmo? Quais são algumas das
características típicas de um algoritmo?
– Regras são precisas
– Conjunto de regras é finito
– Tempo finito de execução
– Regras são executadas por um computador
• O que são as estruturas de dados?
• O que é um programa?
• O que são estruturas abstratas de dados? Porque
elas são importantes?

© WPJR - 2009

15
Exercício
Solução: Alto Nível
• Alto nível
• Assuma que o primeiro item é o maior
• Verifique em cada um dos elementos da lista e, se
um destes for o maior encontrado até o momento,
anote-o
• O último número anotado é o maior da lista quando
o processo estiver concluído.

© WPJR - 2009

Exercício
Solução: Pseudocódigo
Algorithm LargestNumber
Input: A non-empty list of numbers L.
Output: The largest number in the list L.

largest ← L0
for each item in the list L≥1, do
if the item > largest, then
largest ← the item
return largest

© WPJR - 2009

16

Вам также может понравиться