119
  FUNDAÇÃO DE ASSISTÊNCIA  E EDUCAÇÃO - FAESA FACULDADES INTEGRADAS ESPÍRITO-SANTENSES CINTHIA CRISTINA LUCIO CALIARI RESUMO DE PEQUISA E ORDENAÇÃO VITÓRIA 2011 

Resumo_de_PO.pdf

Embed Size (px)

Citation preview

FUNDAO DE ASSISTNCIA E EDUCAO - FAESA FACULDADES INTEGRADAS ESPRITO-SANTENSES

CINTHIA CRISTINA LUCIO CALIARI

RESUMO DE PEQUISA E ORDENAO

VITRIA 2011

prof. Cinthia C L Caliari

SUMRIOCaptulo I Ordenao ........................................................................................................3 I.1 Introduo ....................................................................................................................3 I.2 Caractersticas de arquivos .........................................................................................4 I.3 Anlise de Algoritmos ..................................................................................................4 I.4 Medidas de tempo de execuo de um programa .......................................................5 I.4.1 Como calcular o tempo que um algoritmo leva para ser executado? ...................5 I.5 Notao O ....................................................................................................................7 I.6 Exerccios ..................................................................................................................10 I.7 Exerccios Extra com Gabarito ..................................................................................13 I.8 Gabarito .....................................................................................................................16 Captulo II Ordenao .....................................................................................................19 II.1 Introduo .................................................................................................................19 II.2 SELEO DIRETA (SELECTION SORT) ................................................................22 II.3 BOLHA (BUBBLESORT) ..........................................................................................25 II.4 COQUETELEIRA (SHAKERSORT)..........................................................................28 II.5 INSERO DIRETA (INSERTION SORT) ...............................................................31 II.6 SHELLSORT .............................................................................................................33 II.7 MERGESORT ...........................................................................................................37 II.8 QUICKSORT .............................................................................................................40 II.9 HEAPSORT Seleo em rvore............................................................................44 II.10 COMPARAO ENTRE OS MTODOS DE ORDENAO INTERNA.................50 II.11 CONCLUSO .........................................................................................................52 II.12 EXERCCIOS ..........................................................................................................52 Captulo III - Pesquisa ........................................................................................................56 III.1 INTRODUO .........................................................................................................56 III.1.1 Estrutura em Pascal ..........................................................................................57 III.1.2 Estrutura em Java .............................................................................................58 III.2 PESQUISA SEQENCIAL EM TABELA DESORDENADA.....................................59 III.2.1 Pesquisa seqencial em Vetor..........................................................................59 III.2.2 Pesquisa seqencial em Lista Simplesmente Encadeada (LSE) ......................61 III.3 PESQUISA BINRIA ...............................................................................................63 III.3.1 Pesquisa Binria em Vetor (Pascal)..................................................................64 III.3.2 Procedimento Inicializa (Pascal) .......................................................................65 III.3.3 Procedimento Insere (Pascal) Insere ordenadamente ...................................65 III.3.4 Procedimento Retira (Pascal) Remove ordenadamente ................................65 III.3.5 Pesquisa Binria em Vetor (Java).....................................................................66 III.3.6 Procedimento Insere (Java) Insere ordenadamente ......................................66 III.3.7 Procedimento Retira Remove ordenadamente .............................................66 III.4 RVORES DE BUSCA ............................................................................................67 III.4.1 rvore Binria de Busca ABB ........................................................................67 III.4.2 rvore Binria de Busca sem Balanceamento ABB.......................................69 III.4.3 Balanceamento .................................................................................................73 III.5 RVORES AVL........................................................................................................75 III.6 TRANSFORMAO DE CHAVES (HASHING).......................................................84 III.6.1 Funo de transformao (Funo HASHING).................................................85 III.6.2 Tratamento de colises .....................................................................................86 III.7 NIL ...........................................................................................................................88 III.8 EXERCCIOS ...........................................................................................................89 1

prof. Cinthia C L Caliari

Captulo IV ORGANIZAO DE ARQUIVOS .................................................................92 IV.1 INTRODUO ........................................................................................................92 IV.2 HISTRIA ................................................................................................................92 IV.3 HIERARQUIA DE MEMRIA ..................................................................................94 IV.4 O QUE UM BLOCO? ...........................................................................................96 IV.5 ARQUIVOS..............................................................................................................97 IV.5.1 Arquivo Seqencial ...........................................................................................97 IV.5.2 Arquivo Seqencial-Indexado ...........................................................................98 IV.6 RVORES B..........................................................................................................106 IV.7 RVORES B+ .......................................................................................................115 IV.8 TABELAS HASHING PARA ARMAZENAMENTO SECUNDRIO .......................116 IV.9 LISTA DE EXERCCIOS .......................................................................................116

2

prof. Cinthia C L Caliari

CAPTULO I ORDENAOI.1 IntroduoO que programar? Podemos dizer que programar estruturar dados e construir algoritmos. O que algoritmo? um procedimento computacional bem definido para resolver um problema computacional especificado, ou seja, recebe um valor ou um conjunto de valores como entrada e produz outro valor, ou conjunto de valores, como sada. Ento, podemos dizer que um algoritmo uma seqncia de passos computacionais que transformam uma entrada em sada. Ou seja, um algoritmo descreve um procedimento computacional para relacionar a entrada com a sada. Como saber se um algoritmo bom? Um algoritmo resolve um problema se, ao receber dados de entrada produzir, como sada, uma resposta correta, com tempo e memria suficientes para sua execuo. Mas, resolver o problema apenas no basta. Para que um algoritmo seja bem feito, importante que ele seja concebido de acordo com os seguintes passos. 1. Formalizao matemtica do problema: permite uma compreenso do que se pretende e facilita o compartilhamento do problema com outros. 2. Concepo do algoritmo: etapa criativa, quando so aplicadas as principais tcnicas de projeto de algoritmos. 3. Verificao de correo: deve-se garantir que o algoritmo est trabalhando corretamente, ou seja, est produzindo a sada correta. 4. Anlise de eficincia: se o algoritmo est correto, mas no eficiente, deve-se buscar outros mais eficientes. 5. Refinamento: introduzir alteraes no algoritmo para torn-lo correto e eficiente. Ento, ao se escrever um programa, alguns requisitos devem ser satisfeitos: Eficincia (tempo, execuo) Escrita (facilidade de entender) Reuso Para otimizar o funcionamento de um programa existem vrias possibilidades: Aumentar a velocidade do processamento da mquina, Trocar a forma de como o programa obtm a soluo (trocar de algoritmo) Ou melhorar a representao interna do dado que maneja. Os dois ltimos itens influenciam tambm na escrita e no reuso. O programador tem sob seu controle apenas os dois ltimos aspectos. Uma parte do ltimo item foi visto em estrutura de dados, onde se estudaram as formas de armazenamento dos dados. Em Pesquisa e Ordenao iremos ainda estudar formas de 3

prof. Cinthia C L Caliari

armazenamento bem como algoritmos de pesquisa e ordenao para se trabalhar com estas formas, descobrindo diferenas entre vrios algoritmos e atravs destas estaremos aptos para saber qual escolher para um determinado problema. Quando se trabalha com dados geralmente se quer manipular tais dados: Inserir (armazenar) Acessar (ver) Remover (apagar) Etc.

Para isto necessrio escrever linhas de cdigo que faam tal trabalho. Por isso estruturas de dados e algoritmos esto intimamente ligados. Programar , basicamente, estruturar dados e construir algoritmos. De acordo com Wirth, programas so formulaes concretas de algoritmos abstratos, baseados em representaes e estruturas especficas de dados: PROGRAMA = ALGORITMO + ESTRUTURA DE DADOS

I.2 Caractersticas de arquivosCaractersticas importantes, que devem ser analisadas, para a escolha de um mtodo adequado de busca ou ordenao: Volatilidade: Se o arquivo est sujeito a muitas incluses e/ou excluses Atividade: Alta atividade indica que a maioria dos registros armazenados acessada. Tamanho: Quantidade de registros armazenados. Potencial de crescimento Desempenho

I.3 Anlise de AlgoritmosSe os computadores fossem infinitamente rpidos e se a memria fosse totalmente livre, qualquer mtodo correto para resolver um problema seria timo. Mas no essa a nossa realidade, pois tanto a velocidade da mquina quanto a memria so recursos limitados. Por isso, quando se implementa um algoritmo, alguns itens so desejveis: A. Deseja-se trabalhar com um algoritmo fcil de ser entendido, codificado e depurado; B. Deseja-se ter um algoritmo que use de maneira eficiente os recursos computacionais e especialmente que execute a tarefa em questo no menor tempo possvel. Quando se escreve um programa para ser usado uma ou poucas vezes, a meta A mais importante; caso contrrio, a meta B dever ser buscada, ou seja, devem ser considerados aspectos como tempo de execuo e espao ocupado. 4

prof. Cinthia C L Caliari

Nessa fase, necessrio fazer uma anlise do algoritmo. Segundo Knuth, h dois tipos de problemas que se deve observar: 1. Anlise de um algoritmo particular: Neste caso, deseja-se saber o custo de usar um determinado algoritmo para resolver um problema especfico (o nmero de vezes que cada parte do algoritmo executada, a quantidade de memria necessria, etc.). 2. Anlise de uma classe de algoritmos: Agora, deseja-se saber qual o algoritmo, dentre uma classe ou famlia, tem o menor custo possvel. Assim, possvel limitar a complexidade computacional de um algoritmo. No segundo tipo, ao determinar o menor custo de um algoritmo, tem -se a medida da dificuldade inerente ao resolver tal problema. Se um determinado algoritmo tem custo igual ao menor custo possvel, pode-se cham-lo de TIMO para a medida de custo considerada. Se h vrios algoritmos para resolver o mesmo problema, com esta medida possvel compar-los e escolher o melhor.

I.4 Medidas de tempo de execuo de um programaO tempo de execuo de um programa depende de fatores como: A entrada do programa e a complexidade do algoritmo A qualidade do cdigo gerado na compilao A natureza e velocidade das instrues na mquina onde o programa ser executado

I.4.1 Como calcular o tempo que um algoritmo leva para ser executado? No calcularemos o tempo em segundos ou outra medida, pois isso pode variar muito ao mudar de mquina, mas sim calcularemos a quantidade de vezes que uma determinada instruo executada. Desta forma teremos um clculo independente de mquina. Para saber quanto tempo leva em uma determinada mquina, basta multiplicar o valor encontrado pelo tempo que a instruo demora a ser executada. Para medir a quantidade de trabalho que um algoritmo executa, necessrio escolher uma operao fundamental. Chamaremos aqui de CUSTO, a quantidade de instrues que so executadas por um algoritmo. Para chegar a este valor adotaremos os seguintes critrios: Para cada tarefa executada atribuo o valor de 1 unidade de tempo. Considerar os comandos de atribuio e comparao como operaes fundamentais.

5

prof. Cinthia C L Caliari

Exemplo: Funo que verifica se A maior que B. int maior (int a, int b){ a) if (a>b) b) return a; else c) return b; } O tempo que este algoritmo levaria para ser executado seria 2 unidades de tempo, ou seja, o seu custo 2, pois se A > B o comando a e b sero executados (2 comandos). Se A