Complexidade de Algoritmos

Documentos relacionados
Matrizes esparsas: definição

Variáveis, Tipos de Dados e Operadores

Árvore Vermelho-Preta. Estrutura de Dados II Jairo Francisco de Souza

Transformação de Chave - Hashing

Introdução a Programação

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.

Tabelas Hash. Aleardo Manacero Jr.

Simulado de Linguagem de Programação Java

MC102 Algoritmos e Programação de Computadores

Números Primos, Fatores Primos, MDC e MMC

O conjunto de registros pode ser: Um vetor de registros Uma lista encadeada Uma árvore Etc.

Critérios de divisibilidade Para alguns números como o dois, o três, o cinco e outros, existem regras que permitem verificar a divisibilidade sem se

Arquivos de Acesso Direto. Vanessa Braganholo

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18

INF 1620 P3-29/06/04 Questão 1 Nome:

Tabela de símbolos: tabelas de espalhamento

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Estruturas de Repetição. Vanessa Braganholo

Chaves. Acesso a Registros. Chaves Primária e Secundária. Chaves Primária e Secundária

Seqüências de Caracteres

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 7-10

ESTRUTURAS DE REPETIÇÃO - PARTE 1

Árvores B. Prof. Flávio Humberto Cabral Nunes

Tabelas Hash. Também conhecido como tabelas de dispersão. Até agora... MoFvação. Exercício

Estruturas de Dados Pilhas, Filas, Listas

TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TURMA 2008/1 2 PERÍODO MÓDULO 3 AVALIAÇÃO MP2 DATA 2/10/2008 ESTRUTURAS DE DADOS 2008/2

Algoritmos e Estruturas de Dados I

Deixando de odiar Matemática Parte 4

Lista de Exercícios 06 Modularização (Procedimentos e Funções)

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem C

Sistema Operacional Unidade 11.2 Shell Script: estruturas condicionais. QI ESCOLAS E FACULDADES Curso Técnico em Informática

Estruturas Homogêneas Vetores e Matrizes. Givanaldo Rocha

Exercícios - Questões Objetivas

Aula 10 Alocação Dinâmica de Memória Listas Encadeadas. prof Leticia Winkler

Algoritmos 2 - Introdução

Árvores de Pesquisa (Parte I)

Hashing (Tabela de Dispersão)

Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos

Aula 7 - Mais problemas com inteiros

Questão 1. Nome para o arquivo fonte questao1.c

Prof. Adriano Maranhão COMPILADORES

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

Algoritmos de pesquisa. Tabelas de dispersão/hash

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Aula 5 e 6 Pilhas e suas Aplicações. prof Leticia Winkler

Hashing. Rafael Nunes LABSCI-UFMG

Dicas para implementação do Trabalho 6

Árvore Binária de Busca Ótima

Computação I (MAB120) DCC/UFRJ

DAS5102 Fundamentos da Estrutura da Informação

Grafos: algoritmos de busca

ALGORITMOS COM SELEÇÃO 1 - ESTRUTURA CONDICIONAL (ESTRUTURAS DE CONTROLE)

Intercalação de vários arquivos. Estrutura de Dados II Prof Jairo Francisco de Souza

Algoritmos e Programação II. Coleções. Coleções. Baseado no material do Prof. Julio

Trabalho: Algoritmos de Busca e Ordenação. 1 Introdução. Prof. Bruno Emerson Gurgel Gomes IFRN - Câmpus Currais Novos. 31 de outubro de 2012

Métodos de Pesquisa em Memória Primária

Manual Para Peticionamento Online

PRÁTICA 8. A Distância Euclidiana entre dois vetores n-dimensionais x e y é definida como o escalar: d = norm(x y)

Cálculo de Soma de Verificação do User Datagram Protocol

cadeia de caracteres (string) INF Programação I Prof. Roberto Azevedo

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Filas Exemplo de Aplicação

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

Algoritmos e Estruturas de Dados I. Passagem de Parâmetros. Pedro O.S. Vaz de Melo

Lista de Exercícios Estruturas: Linear, Condicional e Exclusão Múltipla Algoritmos e Linguagens de Programação

Tabelas Hash. Jeane Melo

BCC202 - Estrutura de Dados I

OBI2012 Caderno de soluções

INF1007: Programação 2 7 Busca em Vetores. 01/04/2014 (c) Dept. Informática - PUC-Rio 1

a) Defina uma função para obter o máximo entre dois números

Figura1. Planilha Calc

3ª Lista de Exercícios de Programação I

UNIVERSIDADE ESTADUAL DO CEARÁ. Relatório Final: Estrutura de Dados II

CURSO ANUAL DE MATEMÁTICA VOLUME 1

Aplicações: Conversão de Códigos e Motor de Passo. Prof. Adilson Gonzaga

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Tóffolo 2011/1

PROGRAMAÇÃO PARA DESIGNERS - PENSAR COMO O INIMIGO

Exercícios: Comandos de Repetição

CONTEÚDOS PROGRAMÁTICOS

Programação Orientada a Objetos - 3º semestre AULA 02 Prof. André Moraes

Tipos Abstratos de Dados

EXAMES TOXICOLÓGICOS PARA DETECÇÃO DE DROGAS DE ABUSO APLICAÇÃO DO TESTE PELO MÉTODO MERGULHO E CONTA-GOTAS

CADERNO DE EXERCÍCIOS 1C

Programação Básica. Estrutura de um algoritmo

AULA 11 PROGRAMAÇÃO ORIENTADA A OBJETOS (INTRODUÇÃO) Disciplina: Programação Orientada a Objetos Professora: Alba Lopes

Tutorial C# - II. Vamos então por mãos à obra.

5. De um bloco formado por cubos retiraram-se alguns cubos como mostra a figura. Quantos cubos foram retirados?

Algoritmos de pesquisa

Diagrama de Voronoi João Comba

EA075 Memória virtual

LISTA DE EXERCÍCIOS. 1.2) Escreva um programa para ler o raio de um círculo, calcular e escrever a sua área (Fórmula: πr 2 ).

Estruturas de Dados com Jogos. Capítulo 9 Árvores Balanceadas

Arquivos Indexados por Chaves Secundárias. Vanessa Braganholo

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008

Computação Científica com MATLAB. Melissa Weber Mendonça

-Entre no menu Cadastros / Terceiros/Optantes -Insira os dados do Empregado ou Fornecedor / clique em Gravar

DISCIPLINA: TELEPROCESSAMENTO E REDES CURSO: CIÊNCIA DA COMPUTAÇÃO 6. SEMESTRE PROFESSOR: ANTONIO P. NASCIMENTO FILHO

Lógica de Programação Atividade Avaliativa 1 RESPOSTAS

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Transcrição:

Complexidade de Algoritmos Prof. Diego Buchinger diego.buchinger@outlook.com diego.buchinger@udesc.br Prof. Cristiano Damiani Vasconcellos cristiano.vasconcellos@udesc.br

Análise de complexidade de Estruturas de Dados Fundamentais

Estruturas de Dados Básicas Pilha, Fila, Lista Encadeada Simples, Lista Duplamente Encadeada, Árvore Binária, Árvore Rubro Negra Analisar os seguintes métodos: * OBS: Fila tem um ponteiro para o início e o fim! Fila::enfileirar( elemento ); Fila::remover( ); Fila::busca( elemento ); Fila::tamanho( );

Estruturas de Dados Básicas Pilha, Fila, Lista Encadeada Simples, Lista Duplamente Encadeada, Árvore Binária, Árvore Rubro Negra Analisar os seguintes métodos: * OBS: Lista Encadeada Simples => ponteiro 1º elemento da lista Elemento => elemento + ponteiro p/ próximo elemento ListaSimples::adicionarNoInicio( elemento ); ListaSimples::adicionarNoFim( elemento ); ListaSimples::busca( elemento ); ListaSimples::anterior( *elemento ); ListaSimples::proximo( *elemento );

Estruturas de Dados Básicas Pilha, Fila, Lista Encadeada Simples, Lista Duplamente Encadeada, Árvore Binária, Árvore Rubro Negra Analisar os seguintes métodos: * OBS: Lista Dup. Enc. => ponteiro 1º elemento da lista Element => elemento + ponteiro p/ anterior e próximo elemento ListaDup::adicionarNoInicio( elemento ); ListaDup::adicionarNoFim( elemento ); ListaDup::busca( elemento ); ListaDup::anterior( *elemento ); ListaDup::proximo( *elemento );

Estruturas de Dados Básicas Pilha, Fila, Lista Encadeada Simples, Lista Duplamente Encadeada, Árvore Binária, Árvore Rubro Negra Analisar os seguintes métodos: * OBS: Árvore => elemento + ponteiro para filhos Arvore::inserir( elemento ); Arvore::buscar( elemento ); Arvore::pai( *no ); Arvore::maximo( ); ** E se cada nó tiver um ponteiro para o pai?

Atividade Analise o código fonte do arquivo estruturas-dados.cpp e informe as complexidades de tempo e espaço dos seguintes métodos considerando o pior e melhor caso. Ilustre um exemplo de situação onde o pior caso e o melhor caso ocorreria para cada uma das funções. [Faça em uma folha para entregar] [no máximo duplas] Pilha ListaEncadeada ÁrvoreVP Empilha Adicionar rotateleft Desempilha Anexar Inserir Limpar Remover Busca Print Encontrar PreOrder Tamanho RemoverDuplicatas Maximo

Análise de Complexidade envolvendo múltiplas variáveis

Strings Ao analisar algoritmos envolvendo strings devemos nos preocupar com o seu tamanho que pode não ser constante. Qual o pior caso? Qual o melhor caso? Ex1: qual seria a complexidade para processar n nomes de pessoas deixando todos em maiúsculas? Ex2: int compara(string[] nomes, int n){ int i,j,r=0; for(i=0; i<n; i++) for(j=i+1; j<n; j++) if( strcmp(nomes[i] nomes[j]) == 0 ) r += 1; return r; }

Hash Uso de vetores para armazenar elementos é bom. - Qual a complexidade para acessar um elemento? - Qual a complexidade para adicionar um elemento? Limitações dos vetores: os índices só podem ser inteiros P: Alguma sugestão para podermos usar outros valores (de qualquer tipo) como índices?

Hash - Introdução Podemos criar uma operação de conversão de um tipo qualquer para um valor inteiro positivo = FUNÇÃO HASHING (chave) => índice Como poderíamos criar uma função para converter uma string em um inteiro positivo? 1 Somar o código ascii de cada letra 2 Somar o código ascii de cada letra * posição 3 Somatório( código ascii de cada letra * 255 posição ) Testes: Joao, Maria, ola, alo, oi, io

Hash - Introdução Na conversão precisamos nos preocupar com mais um detalhe: Qual é o tamanho do nosso vetor? Fator de carga do Hash: λ = nº elementos tamanho vetor Se tivermos um vetor de 10 posições, qual operação podemos usar para garantir que o nosso inteiro positivo esteja entre 0 e 9?

Hash - Introdução Hash - método da divisão: Escolhemos um valor m como divisor de modo a evitar colisões (um número que não seja potência de 2 => 2 p ) Um bom valor pode ser um número primo ou então 2 p -1 Podemos realizar duas divisões: (valor % m) % tam sendo m > tam

Hash - Introdução Quando usamos uma função hashing que realiza um mapeamento único para cada índice do vetor temos um hash perfeito Se os nomes só podem ter no máximo 5 letras, qual tamanho de vetor podemos utilizar para garantir um hash perfeito? (note que um hash perfeito depende da função de hashing)

Hash - Introdução Quando usamos uma função hashing que não realiza um mapeamento único para cada índice do vetor precisamos considerar também que a função de hashing pode gerar números iguais para chaves diferentes: Hashing (2) + vetor de 10 posições: Maria, Ana A esse evento chamamos de COLISÃO! Nem sempre é viável utilizar um hash perfeito. Logo, uma função hashing deve sempre buscar minimizar o número de colisões

Hash - Colisões Ok, Mas o que fazer quando ocorre uma colisão? Abordagem 1: Não adicionamos o registro Abordagem 2 endereçamento aberto: Procurar pela próxima posição vaga Sondagem Linear: avança de um em um Método deve ser usado para inserção e busca exemplo: busca pelo 55 (hash: 0); busca pelo 66 (hash: 1)

Hash - Colisões Ok, Mas o que fazer quando ocorre uma colisão? Abordagem 2 endereçamento aberto: Sondagem Linear pode gerar agrupamentos (clusters) de elementos (não interessante) Sondagem Quadrádica: avança usando os quadrados x+1, x+4, x+9, x+16, x+25, (...) Método deve ser usado para inserção e busca

Hash - Colisões Ok, Mas o que fazer quando ocorre uma colisão? Abordagem 2 endereçamento aberto: Hash duplo (rehash): aplicação de uma nova função hash novo hash = rehash( hash antigo ) rehash x = x + 1 % tamanho vetor rehash deve garantir que, eventualmente, todas as posições serão avaliadas Método deve ser usado para inserção e busca

Hash - Colisões Ok, Mas o que fazer quando ocorre uma colisão? Abordagem 3 encadeamento: Ao invés de utilizarmos um vetor simples utilizamos um vetor de alguma estrutura de dados (lista, árvore)

Hash Principais funções Hash( int tamanho ) put( chave, valor ) => boolean get( chave ) => valor listar( ) => (chaves, valores)

Hash Analise Complexidade Considerando um hash de strings com capacidade n e tamanho de strings s: - Qual a complexidade para calcular a função hash (1), (2) e (3)? - Qual a complexidade (melhor e pior caso) para inserir e buscar um elemento usando sondagem linear? E para listar todos os elementos do hash?

Hash Analise Complexidade Considerando um hash de strings com capacidade n, e tamanho de strings s: - Qual a complexidade (melhor e pior caso) para inserir e buscar um elemento usando hash encadeado com lista? E para listar todos os elementos do hash? - Qual a complexidade (melhor e pior caso) para inserir e buscar um elemento usando hash encadeado com árvore balanceada (árvore rubro-negra)?

Atividade Extra Resolva os seguintes problemas do URI online Judge e determine a complexidade para o pior caso: - 1861 O Hall dos Assassinos (http://www.urionlinejudge.com.br/repository/uoj_1861.html) OBS: Listagem de resultados: Accepted sua solução foi aceita; Wrong Answer o algoritmo produziu uma resposta incorreta para alguma situação; Time Limit Exceded seu algoritmo entrou em loop infinito ou demorou muito (rever algoritmo e reduzir a sua complexidade de tempo); Runtime Error seu programa fez alguma operação indevida (divisão por zero ou acesso a memória inválida);