Академический Документы
Профессиональный Документы
Культура Документы
© 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
© 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
© 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”
© 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
© 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.
© 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.
© WPJR - 2009
5
Introdução
Algoritmo: Observações Importantes
• Regras são precisas
© 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
• 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.
© 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
© 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.
© 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.
© 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.
• Processo de modelagem
Solução para o
Problema
Problema
Modelo Modelo
Abstrato Transformado
© WPJR - 2009
© 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)
© WPJR - 2009
© 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