Atividade Virtual 2 de Organização de Arquivos e Métodos de Ordenação - 2011.1

Embed Size (px)

Citation preview

CURSO: SISTEMAS DE INFORMAO - EAD DISCIPLINA: ORGANIZAO DE ARQUIVOS E MTODOS DE ORDENAO SEMESTRE: 2011.1 PROFESSOR: Marcos Pacheco

ATIVIDADE VIRTUAL 2(AULA 5 a AULA 9)ALUNO: CAIO DE ARAJO PEDREIRA POLO: PARALELA

QUESTESVALOR TOTAL: 10 (dez) PONTOS QUESTO 01)Escreva e descreva o passo a passo de cada etapa de funcionamento dos algoritmos de ordenao listados abaixo para ordenar em ordem crescente a seguinte lista: 4, 7, 2, 5, 6 (Valor 1,5) A) Ordenao por Seleo e Troca (Bubble Sort) A partir do incio do vetor, so analisados cada um dos elementos do vetor {4, 7, 2, 5, 6}, dois a dois, comparando os elementos vizinhos entre si e caso estejam fora de ordem, os mesmos trocam de posio (tcnica de swap). Se o elemento posterior for menor que o elemento anterior, haver uma troca, empurrando o maior valor para o final do vetor. Os nmeros do vetor se comportam como bolhas. Da vem o nome do algoritmo Bubble Sort (Bolhas). Os menores valores, ou seja, as bolhas menores vo para o inicio e as maiores ficam embaixo. Aplicando as tcnicas acima, temos que o elemento inicial de valor 4 do vetor menor do que o segundo elemento de valor 7. Como o primeiro elemento menor do que o segundo elemento, ento no trocamos as suas posies. Ficamos at ento com {4, 7, 2, 5, 6} Partimos ento para os dois elementos prximos seguintes (7 e 2). Como 7 maior do que 2, haver uma troca entre eles. Ficamos ento com {4, 2, 7, 5, 6}. Continuando analisando os dois prximos (7 e 5), temos que 7 maior que 5, ento permutamos suas posies. Resultado at ento: {4, 2, 5, 7, 6} Seguindo o mesmo raciocnio, como 7 maior do que 6, trocamos suas posies. Ficamos com {4, 2, 5, 6, 7}. Restou ento o elemento de valor 7. Porm,

como 7 o maior elemento do vetor, no voltaremos mais nele e podemos consideralo como bloqueado (fundo azul), pois no mexeremos mais nele. Ele no ser comparado mais uma vez. Voltemos ento ao incio do vetor para uma segunda iterao. Como 4 maior que 2, ele ser trocado de posio com o elemento de valor 2. Ficamos ento com {2, 4, 5, 6, 7}. Os elementos (4 e 5) esto ordenados (4 menor que 5), ento no mexemos. {2, 4, 5, 6, 7} Os elementos (5 e 6) esto ordenados (5 menor que 6), ento no trocamos. {2, 4, 5, 6, 7} Agora ento colorimos o valor 6 pois ele o segundo maior elemento do vetor e portanto, ele no ser mais comparado. {2, 4, 5, 6, 7} Continuando a execuo do algoritmo: Os elementos (2 e 4) seguintes esto ordenados e no mexemos: {2, 4, 5, 6, 7} Os prximos elementos (4 e 5) esto ordenados: {2, 4, 5, 6, 7} O elemento 5 ser colorido: {2, 4, 5, 6, 7} O algoritmo far o prximo loop e no haver mais troca, atribuindo o valor lgico falso a uma varivel de troca do algoritmo. Finalmente, a ordenao crescente por seleo e troca (Bubble Sort) da lista proposta ser o vetor ordenado {2, 4, 5, 6, 7}. Em outras palavras: Esse mtodo de ordenao percorre vrias vezes a lista, sempre a partir do primeiro elemento. Em cada "passada", o algoritmo avana uma posio por vez. Em cada posio, ele analisa se a posio atual maior que a posio seguinte. Se isto for verdade, o algoritmo troca os valores entre as posies atual e seguinte, fazendo com que o valor da posio atual seja menor que o valor da posio seguinte. E isto vai se repetindo at chegar penltima posio, pois no tem sentido ir at a ltima, uma vez que a ltima posio j vai ser comparada com a penltima. Depois disso, o algoritmo repete tudo novamente, desde o incio, e vai repetindo at que a lista esteja de fato ordenada. A questo pede que ordenemos a lista 4, 7, 2, 5, 6: Bom, vamos percorrer uma primeira vez esta lista e ir "borbulhando" o maior elemento pra frente: 4 7 2 5 6 -> Analisando posio 0: 4 < 7, ento no mexe. Fica 4 7 2 5 6 -> Analisando posio 1: 7 > 2, ento troca. Fica 4 2 7 5 6 -> Analisando posio 2: 7 > 5, ento troca. Fica 4 2 5 7 6 -> Analisando posio 3(penltima): 7 > 6, ento troca. Fica 4 2 5 6 7 -> Fim da primeira iterao.

Perceba que nesta primeira passada, o maior elemento de todos foi parar na ltima posio, mas a lista continua desordenada. Ento, necessrio que o bubble sort percorra mais uma vez a lista:

4 2 5 6 7 -> Analisando posio 0: 4 > 2, ento troca. Fica 2 4 5 6 7 -> Analisando posio 1: 4 < 5, ento no mexe. Fica 2 4 5 6 7 -> Analisando posio 2: 5 < 6, ento no mexe. Fica 2 4 5 6 7 -> Analisando posio 3(penltima): 6 < 7, ento no mexe. Fica 2 4 5 6 7 -> Fim da segunda iterao. Na prxima iterao, no haver mais trocas (ou swaps), logo, chegamos ao fim do algoritmo: Lista ordenada: 2, 4, 5, 6, 7

B) Ordenao por Seleo (Selection Sort)

Podemos visualizar dois vetores: um fornecido originalmente pela questo e que contm nmeros no ordenados ({4, 7, 2, 5, 6}) e outro vetor que ser criado, ordenado por seleo e ainda ser o vetor de soluo da questo. Inicialmente, selecionamos o primeiro elemento do vetor no ordenado (elemento de nmero 4). Percorremos o vetor de modo crescente, passando sucessivamente por (nesta ordem: 7, 2, 5, 6) procura de um valor menor que 4. Encontramos ento o valor 2 e o marcamos como menor valor encontrado. Em seguida, permutamos o elemento da primeira posio do vetor no ordenado (4) com o elemento de menor valor encontrado (2), ficando assim: {2, 7, 4, 5, 6} Porm, o elemento 2 agora se encontra no vetor criado e ordenado por seleo. Resultado at ento: Vetor no ordenado: {7, 4, 5, 6}; Vetor ordenado: {2}. Aps essa troca, repetimos o mesmo raciocnio, comeando novamente outro loop da seguinte forma: Selecionamos o primeiro valor do vetor no ordenado (7). Percorremos ento todo o restante do vetor (nesta ordem: {4, 5, 6}) em busca de um valor menor que 7. 4 menor que 7? Sim. Ento marque o valor 4 ao menos temporariamente, pois a depender do vetor dado podemos encontrar valores menores. Caso existisse, desmarcaramos o valor 4 e marcaramos o de menor valor que 4. 5 menor que 4? No. Avance para a prxima posio do vetor. 6 menor que 4? No.

Seguindo sempre esse raciocino: comparando os valores sucessivos com o menor encontrado, no caso 4. Logo, permutemos o primeiro valor do vetor no ordenado selecionado anteriormente, ou seja, permutemos o valor 7 com o menor valor encontrado nesse vetor (nmero 4), ficando assim: {4, 7, 5, 6} Em seguida, temos ento o valor 4 inserido no vetor ordenado: Ficando assim: Vetor no ordenado: {7, 5, 6} Vetor ordenado: {2, 4} Marcamos para posterior permutao o primeiro elemento do vetor no ordenado, ou seja, o elemento 7, e procuramos o menor valor disponvel nesse vetor, encontrando assim o elemento de valor 5, que alm de ser menor que 7, tambm menor que 6. Logo o marcamos e o permutamos com o elemento de nmero 7. Resultado at ento: {5, 7, 6}. O valor 5 j no mais marcado/selecionado pois agora ele est ordenado: Vetor no ordenado: {7, 6} Vetor ordenado: {2, 4, 5} Marcamos o valor 7 e checamos se 6 menor que 7. Como 6 menor que 7, marcamos esse valor e permutamos com o anterior, ficando assim: {6, 7}. Logo: Vetor no ordenado: {7} Vetor ordenado: {2, 4, 5, 6} Na ltima posio, encontramos o valor 7, verificamos que a ltima posio e logo esse o fim da ordenao. Vetor no ordenado: {} Soluo da questo: Vetor Ordenao por Seleo (Selection Sort): {2, 4, 5, 6, 7}

C) Ordenao por Insero (Insertion Sort) Temos que para esse algoritmo, o primeiro elemento a ser selecionado o segundo. Com base nisso, a partir do vetor desordenado {4, 7, 2, 5, 6}, selecionamos um valor para comparar com o anterior. No podemos selecionar o primeiro elemento do vetor, pois ele no tem valor anterior para que comparemos. Logo, temos de pegar o segundo elemento cujo valor 7 e comparar com o primeiro (4). Se o elemento selecionado, no caso o nmero 7, for menor que o elemento antes dele (nmero 4), o elemento selecionado trocado com seu antecessor. O que no ocorre nesse caso. Logo, continuamos com {4, 7, 2, 5, 6}. O prximo elemento a ser selecionado o nmero 2. Comparando-o com o antecessor 7, constatamos que ele menor que 7, logo, permutamos os elementos 7 e 2, resultando em: {4, 2, 7, 5, 6} Continuando a comparao entre os antecessores de cor azul, vemos que 2 menor que 4, logo, h uma permutao entre esses elementos. Resultado at ento: {2, 4, 7, 5, 6} A seguir, comparamos os elementos 7 e 5. 7 > 5, ou seja, 5 menor que 7, logo, haver permutao entre esses valores: {2, 4, 5, 7, 6} Comparando os antecessores de 5, temos que 5 no menor que 4, pelo contrrio, maior, logo, no haver permutao entre esses elementos. Por ltimo, comparamos 7 com 6. 7 > 6, ou seja, 6 menor que 7, logo, haver permutao entre os dois. Aps esta permutao, percebemos que 6 no menor que 5 e 7 no menor que 6, e alm disso, no existe mais nenhum elemento prximo sucedendo 7, logo, no teremos mais permutaes e o algoritmo est ordenado. Resultado final: Vetor ordenado por Insero (Insertion Sort): {2, 4, 5, 6, 7} Enfim, como vimos, a ideia lembrar-se de repetir este processo, sempre empurrando o menor elemento para o incio do grupo de elementos (vetor).

Sugestes de termos: para o passo a passo: configurao incial - Troque Confirguraao final, Mova para o lugar tal, troque esse por esse, etc. Faa de forma a ficar NTIDO TODOS os passos at a ordenao final

QUESTO 02)

Demonstre graficamente a classificao dos dados em ordem crescente da lista 5 2 4 6 1 3 2 6, usando o mtodo MERGESORT: (Valor 1,5)

5

2

4

6

1

3

2

6

Faa a representao grfica parecida com o da figura Figura 1 - Exemplo Merge Sort da aula 07

5

2

4

6

1

3

2

6

5

2

4

6

1

3

2

6 6

2Acima temos o processo de Dividir: Consiste numa diviso dos dados em subsequncias.

1

2

2

3

4

5

6

6

1

2

3

6

2Aplicao dos passos de conquista e combinao

6

QUESTO 03)

Demonstre graficamente a classificao dos dados em ordem crescente da lista 44, 75, 23, 43, 55, 12, 64, 77, 33 usando o mtodo QUICKSORT Sugestes de termos: piv, etc (Valor 1,5)

O Quicksort, tal como o bubblesort, um algoritmo de ordenao por troca. Entretanto, enquanto o bubblesort troca pares de elementos consecutivos, o quicksort compara pares de elementos distantes, o que acelera o processo de ordenao. A ideia bsica do quicksort alocar um determinado elemento em sua posio correta dentro da futura lista ordenada, produzindo uma diviso da lista em trs sub-listas (ALGORITMO DA PARTIO): A sublista que contm todos os elementos que so menores ou iguais ao elemento alocado; A sublista formada apenas pelo elemento alocado; A sublista que contm todos os elementos que so maiores ou iguais ao elemento alocado. No exemplo abaixo, supomos que o elemento escolhido para ser alocado seja o primeiro da lista. O quicksort consiste em aplicar para cada sublista o mesmo processo de partio, at que as sublistas resultantes sejam unitrias ou vazias.

OBS.: FAVOR VISUALIZAR APENAS A PGINA SEGUINTE EM MODO DE EXIBIO

RASCUNHO

QUESTO 04) Qual dos algoritmos de pesquisa mais eficiente:Pesquisa Sequencial Simples ou Pesquisa Binria? Justifique bem sua resposta mostrando os passo a passos e diferenas de eficincia para achar um nmero de uma lista contendo sete nmeros; explique os algoritmos e faa as comparaes de performance. (Valor 1,5)

A pesquisa sequencial um mtodo simples e intuitivo utilizado para determinar a presena de um ou vrios elementos numa sequncia, onde os dados no se encontram ordenados. A ideia percorrer o vetor, comparando os elementos que o constituem, com o elemento procurado. A pesquisa sequencial (ou pesquisa linear) tambm o algoritmo de pesquisa mais simples, mas tambm o menos eficiente. Examinamos cada elemento sequencialmente, comeando pelo primeiro elemento at chegar ao fim do vetor (pode ser muito ineficiente quando o conjunto de dados muito grande). Efetuamos comparaes para cada posio i: vetor[i] = x, sendo x o elemento procurado. Se x existe, mostra a sua posio ou o total de ocorrncias; Seno, mostra-se uma mensagem de falha. Este algoritmo corre no tempo O(n), o que quer dizer que em mdia, o tempo de execuo proporcional ao nmero de elementos no array. Exemplo: 11 22 33 44 55 66 77

Para o vetor acima, procurar o nmero 66: 1 iterao: 11 = 66? No, logo, condio falsa. 11 = Falso. 2 iterao: 22 = 66? No, logo, condio falsa. 11 22 = Falso. 33 44 55 66 77 22 33 44 55 66 77

3 iterao: 33 = 66? No, logo, condio falsa. 11 22 33 = Falso. 44 55 66 77

4 iterao: 44 = 66? No, logo, condio falsa. 11 22 33 44 55 66 77 Falso. 5 iterao: 55 = 66? No, logo, condio falsa. 11 22 33 44 55 66 77 Falso. 6 iterao: 66 = 66? Sim, logo, condio verdadeira. Pesquisa realizada com sucesso. 11 22 33 44 55 66 77 Verdadeiro

Pesquisa Com Sucesso J na pesquisa binria, buscamos um numero x num array (vetor) ordenado. simples e muito mais eficiente do que a pesquisa sequencial, porm requer que os elementos do vetor estejam ordenados. A ideia consiste em ir dividindo o intervalo de busca ao meio de forma a torna-lo menor. Este algoritmo corre no tempo O(log(n)) o que quer dizer que em mdia, o tempo de execuo proporcional ao logaritmo do nmero de elementos no array.

Exemplo: Posio

0 1 11 22 Procurar x = 66

2 33

3 44

4 55

5 66

6 77

Funcionamento do algoritmo:1. Identificar o elemento central do vetor: [Posio central = (Posio

Inicial + Posio Final) div2] Elemento central para o vetor acima: Posio Inicial = 0; Posio Final = 6; [Posio Central = (0 + 6) div2] [Posio Central = 3]; Elemento de posio central = 44.2. Comparar o elemento a procurar (x) com o elemento de posio

central (no caso, 44) x == elemento central (44)? Se for verdadeiro (no caso da questo, falso), ento o elemento foi encontrado; Caso contrrio, verificar se: x < elemento central (44) ou x > elemento central (44)?2.1

Se x < elemento central (44: falso para o vetor do exemplo), ento consideramos a parte menor do vetor onde se encontra o elemento procurado: 11 22 33 44

2.2

Se x > elemento central (44: verdadeiro para o vetor do exemplo), ento consideramos a parte maior do vetor onde se encontra o elemento procurado: 44 55 66 77

3. Efetuar novamente os passos anteriores at encontrar o elemento

procurado ou at que o fim do vetor seja alcanado.

Como x > 44, ento consideramos a parte do vetor em negrito: Posio 0 11 1 22 2 33 3 44 4 55 5 66 6 77

Identificamos o elemento central: Posio Inicial = 3; Posio Final = 6; [Posio Central = (3 + 6) div2] = 9 div2 = 4 (Arredondamos para o menor) Elemento de posio central = 55 Agora fazemos: 66 == 55? Falso. 66 < 55? Falso. 66 > 55? Verdadeiro. Portanto, considere o vetor da direita (em negrito) a partir da posio 4 do vetor, ou melhor dizendo, do elemento de valor 55 do vetor. Posio 0 11 1 22 2 33 3 44 4 55 5 66 6 77

Identificamos o elemento central: Posio Inicial = 4; Posio Final = 6; [Posio Central = (4 + 6) div2] = 10 div2 = 5 Elemento de posio central = 66 Agora fazemos: 66 == 66? Condio verdadeira. Pesquisa realizada com sucesso! Fim do algoritmo. Agora voc deve estar pensando: qual dos dois algoritmos melhor? Pesquisa sequencial versus binria: Tabela comparativa entre as suas respectivas complexidades para o exemplo trabalhado:

Qtd de Dados7

O(n)0,70E+01

O(log2 n)2,80E+00

Logo, para n = 7, o algoritmo de pesquisa sequencial ir executar 7 comparaes no pior caso e 3 comparaes no caso mdio. Por sua vez, o algoritmo de pesquisa binria ir executar cerca de 3 comparaes no pior caso, para o mesmo n. O logaritmo de base 2 aparece pois estamos sempre dividindo o intervalo ao meio: 7, 3, 1. Por outro lado, o algoritmo de pesquisa binria assume que o vetor est ordenado. Ordenar um vetor tambm tem um custo, superior ao custo da pesquisa sequencial. Se for para fazer uma s pesquisa, no vale a pena ordenar o vetor. Em contrapartida, se pretendermos fazer muitas pesquisas, o esforo de ordenao j poder valer a pena.

Ordenao Pesquisa Sequencial Pesquisa Binria No necessita Necessita

N de operaes Reduzido Mdio a Elevado

Rapidez Lento Rpido

Eficincia O(n) O(log2 n)

QUESTO 05) Mostre passo a passo a TRANSFORMAO DE CHAVE(HASHING) com o mtodo da Diviso Inteira da lista 1,7,3,8,12,4,11,2,10,13 com seis endereos funo: k mod 6 . Indique a resultado usando quadros (tabela) parecido com a Figura 6 - Tratamento de colises por encadeamento presente na aula 08 (Valor 2,0) H = {1,7,3,8,12,4,11,2,10,13} Tabela contendo N = 6 encaixes: Calculando, fica: Fhash (1) = 1 mod 6 = 1 Fhash (7) = 7 mod 6 = 1 Fhash (3) = 3 mod 6 = 3 Fhash (8) = 8 mod 6 = 2 Fhash (12) = 12 mod 6 = 0 Fhash (4) = 4 mod 6 = 4 Fhash (11) = 11 mod 6 = 5 Fhash (2) = 2 mod 6 = 2 Fhash (10) = 10 mod 6 = 4 Fhash (13) = 13 mod 6 = 1 Quadros (tabela) de arrumao de hash aps os clculos das funes de hash: 1 2 0 1 2 3 4 5 2 3 4 10 8

7

1 3

11

QUESTO 06) Cite um exemplo de utilizao prtica que no estejapresente no AVA nem no mdulo da disciplina das seguintes estruturas a seguir: (Valor 2,0)A) ACESSO SEQUENCIAL INDEXADO um dos mtodos mais utilizados para o arquivamento de dados, por se tratar de uma metodologia que oferece como vantagem o fato de ser mais rpida na seleo de informaes sem a necessidade de ler o arquivo de forma sequencial. Tambm se aplica no caso de pesquisas online e setores de atendimento em que o atendimento de resposta deve ser o mnimo possvel. No mais, as verses mais antigas do OS/ 390, como os sistemas MFT e MVT, utilizavam o mtodo de acesso sequencial indexado. B) RVORES B As rvores B so largamente utilizadas como forma de armazenamento em memria secundria. Diversos sistemas comerciais de Banco de dados, por exemplo, as empregam. Alm disso, so muito utilizadas em sistemas de arquivos. O sistema de arquivos ext3 dos sistemas operacionais Linux, por exemplo, utiliza rvores B. No mais, um tipo de estrutura frequentemente usado na implementao de ndices de arquivos; C) ARVORE B+

A estrutura em rvore B+ a mais utilizada pelos SGBD (Sistemas Gerenciadores de Banco de Dados) pois, apesar de perder eficincia nas incluses e excluses, no requer uma reindexao constante do arquivo. Os sistemas de arquivos NTFS para o Windows, ReiserFS para Unix, o XFS para IRIX e Linux, e o JFS2 para AIX, OS/2 e Linux utilizam rvores B+. rvores B+ so usadas para acelerar os lookups em diretrios maiores. Tambm so usadas para diversas estruturas dirigindo-se como descritores de extenses.