Pesquisar este blog

quarta-feira, 23 de novembro de 2011

QUESTIONÁRIO 08 - ED II

QUICKSORT




1)      Por que o método quicksort têm esse nome? Existe outra versão do método? Ele é conhecido por qual outro nome?

Resposta:
C.A.R. Hoare criou o 'Quicksort ao tentar traduzir um dicionário de inglês para russo, ordenando as palavras, tendo como objetivo reduzir o problema original em subproblemas que possam ser resolvidos mais facil e rapidamente.

2)      A ordenação pelo método quicksort é um dos mais simples. Qual a principal característica do método ou como ele funciona?

Resposta:
O Quicksort adota a estratégia de divisão e conquista. A estratégia consiste em rearranjar as chaves de modo que as chaves "menores" precedam as chaves "maiores". Em seguida o Quicksort ordena as duas sublistas de chaves menores e maiores recursivamente até que a lista completa se encontre ordenada. [3]Os passos são:
1.      Escolha um elemento da lista, denominado pivô;
2.      Rearranje a lista de forma que todos os elementos anteriores ao pivô sejam menores que ele, e todos os elementos posteriores ao pivô sejam maiores que ele. Ao fim do processo o pivô estará em sua posição final e haverá duas sublistas não ordenadas. Essa operação é denominada partição;
3.      Recursivamente ordene a sublista dos elementos menores e a sublista dos elementos maiores;
A base da recursão são as listas de tamanho zero ou um, que estão sempre ordenadas. O processo é finito, pois a cada iteração pelo menos um elemento é posto em sua posição final e não será mais manipulado na iteração seguinte.

3)      Qual é a classificação do método quicksort? Qual o seu grau de complexidade?

Resposta:
Método Recursivo, complexidade de tempo e espaço:
·         Complexidade de tempo: θ(n lg2 n) no melhor caso e θ(n) no caso médio e θ(n2) no pior caso;
·         Complexidade de espaço: θ(lg2 n) no melhor caso e no caso médio e θ(lg2 n) no pior caso. R. Sedgewick desenvolveu uma versão do Quicksort com partição recursão de cauda que tem complexidade θ(n2) no pior caso.

4)      Dê exemplo de aplicação do método quicksort, com as comparações, trocas e iterações.

Resposta:


5)      Demonstre o código-fonte do método quicksort e comente o mesmo.

Resposta:




                                                              

QUESTIONÁRIO 07 - ED II


Ordenação – Método Mergesort

1)                 Por que o método mergesort têm esse nome? Existe outra versão do método? Ele é conhecido por qual outro nome?

Resposta:
O método de ordenação Mergesort também é conhecido como “dividir para conquistar” e significa  ordenação por mistura (fusão).

2)      A ordenação pelo método mergesort é um dos mais simples. Qual a principal característica do método ou como ele funciona?

Resposta:
Sua idéia básica é muito fácil: criar uma sequência ordenada a partir de duas outras também ordenadas. Para isso, ele divide a sequência original em pares de dados, ordena-as; depois as agrupa em sequências de quatro elementos, e assim por diante, até ter toda a sequência dividida em apenas duas partes.

3)      Qual é a classificação do método mergesort? Qual o seu grau de complexidade?

Resposta:
Método recursivo e sua ordem de complexidade do algoritmo recursivo deste método é O(n log n) .

4)      Dê exemplo de aplicação do método mergesort, com as comparações, trocas e iterações.

Resposta:



5)      Demonstre o código-fonte do método mergesort e comente o mesmo.

Resposta:
// A função mergesort rearranja o vetor v[p..r-1]
// em ordem crescente.

void
mergesort (int p, int r, int v[])
{
   if (p < r-1) {
      int q = (p + r)/2;
      mergesort (p, q, v);
      mergesort (q, r, v);
      intercala (p, q, r, v);
   }
}

QUESTIONÁRIO 06 - ED II

INSERÇÃO E MÉTODO SHELL



1)      Por que o método shell têm esse nome? Existe outra versão do método? Ele é conhecido por qual outro nome?

Resposta:
Leva o nome de seu inventor, Ronald L. Shell; consiste na aplicação do método da Inserção, em vários passos, a elementos não consecutivos (separados por determinados intervalos). A cada passo, esse intervalo decresce: primeiro, são ordenados entre si todos os elementos separados de quatro posições. Em seguida, são ordenados os elementos a duas posições de distância. Finalmente, são ordenados os elementos adjacentes. Há também a versão Shell-Metzner, antecessor a ele.Também conhecido por método concha.

2)      A ordenação pelo método shell é um dos mais simples. Qual a principal característica do método ou como ele funciona?
Resposta:
Shell algoritmo de ordenação melhora a ordenação por inserção, comparando os elementos separados por um espaço de várias posições. Esto permite que un elemento haga "pasos más grandes" hacia su posición esperada. Isso permite que um elemento para fazer "passos maiores" em direção a sua posição esperada. Los pasos múltiples sobre los datos se hacen con tamaños de espacio cada vez más pequeños. A várias passagens sobre os tamanhos de dados são feitos espaço cada vez menores. El último paso del Shell sort es un simple ordenamiento por inserción, pero para entonces, ya está garantizado que los datos del vector están casi ordenados. A última etapa da espécie Shell é uma espécie de inserção simples, mas aí já é garantido que os dados são quase ordenada do vetor.


3)      Qual é a classificação do método shell? Qual o seu grau de complexidade?

Resposta:
Shell sort é o mais eficiente algoritmo de classificação dentre os de complexidade quadrática. É um refinamento do método de inserção direta.

4)      Dê exemplo de aplicação do método shell, com as comparações, trocas e iterações.

Resposta:
Execução:
Dado o vetor de entrada: 12, 43, 1, 6, 56, 23, 52, 9
12, 43, 1, 6, 56, 23, 52, 9
12, 43, 1, 6, 56, 23, 52, 9
1, 43, 12, 6, 56, 23, 52, 9
1, 6, 12, 23, 56, 43, 52, 9
1, 6, 12, 23, 52, 43, 56, 9
1, 6, 12, 23, 52, 9, 56, 43
1, 6, 12, 9, 52, 23, 56, 43
1, 6, 9, 12, 52, 23, 56, 43
1, 6, 9, 12, 23, 52, 56, 43
1, 6, 9, 12, 23, 52, 43, 56
1, 6, 9, 12, 23, 43, 52, 56

Em negrito estão os números trocados na atual iteração.
Após as seguintes trocas acima, obtemos o vetor ordenado: 1, 6, 9, 12, 23, 43, 52, 56.


5)      Demonstre o código-fonte do método shell e comente o mesmo.

Resposta:
//***************************************************************************
// Função shell_sorte – Recebe uma matriz desordenada e a ordena com
// algoritmo shell sort
//
// Entradas – matriz a ser ordenada e tamanho da matriz a ordenar
// Saídas - nenhuma
//***************************************************************************
void shell_sort(unsigned char matriz[], unsigned int tamanho){

   
unsigned int i, gap;
   
unsigned char temp, ret;

   
gap = tamanho / 2;
   
do {
      
do{
         
ret=0;
            
for (i=0; i< tamanho – gap; i++)
               
if (matriz[i] >matriz[i+gap]){
                  
temp=array[i];
                     
array[i]=array[i+gap];
                     
array[i+gap]=temp;
                     
ret=1;
               
}
      
} while(ret);
   
} while (gap = gap / 2);
}

quarta-feira, 19 de outubro de 2011

QUESTIONÁRIO 05 - ED II

ORDENAÇÃO E MÉTODO BOLHA

1)   Ordenar é um processo de rearranjar um conjunto de objetos em uma ordem ascendente/crescente ou descendente/decrescente. Qual a importância da ordenação para qualquer processo e para informática? Dê exemplos práticos de utilização. Defina a complexidade dos métodos de ordenação e a sua classificação.

Resposta:
Ordenam-se os dados para ganharmos velocidade na execução de tarefas. Dados ordenados consomem menos tempo de processamento.

2)   Qual é a classificação dos métodos de ordenação? Qual a diferença entre eles? Quais são os métodos de ordenação mais utilizados ou principais?Resposta:
Tipos de algoritmos de ordenação
• Por troca: Troca os elementos ordenando-os
• Por seleção: Seleciona o menor elemento, o segundo menor e assim por diante
• Por inserção: Reinsere os elementos na estrutura reordenando os mesmosExemplos:
Método Bolha (BubbleSort):  Troca os elementos de um arrayPercorre todo array x-1 vezes, onde x é o tamanho do array, trocando os elementos adjacentes, se estiverem desordenados


Método Seleção (SelectionSort): Seleciona o elemento de menor valor e o troca pelo primeiro. Faz-se o mesmo com os elementos restantes.
Executa-se o processo tantas vezes quanto o número de elementos no array menos um – varre o array a partir dos elementos ainda não ordenados

Método Inserção (InsertionSort): Reinsere os elementos no array reordenando  o mesmo
Ordena os dois primeiros elementos
Do terceiro elemento em diante, os valores são inseridos em relação aos elementos já ordenados.
3)   A ordenação pelo método bolha é um dos mais simples. Qual a principal característica do método ou como ele funciona?

Resposta:
A ideia é percorrer o vetor diversas vezes, a cada passagem fazendo flutuar para o topo o menor elemento da sequência. Os valores maiores afundam para o fundo (fim do vetor). Essa movimentação lembra a forma como as bolhas em um tanque de água procuram seu próprio nível, e disso vem o nome do algoritmo.
A técnica consiste em sequencialmente cada um dos elementos do vetor, comparando os elementos vizinhos entre si. Caso estejam fora de ordem, os mesmo trocam de posição (swap).
Procede-se assim até o final do vetor. Na primeira “varredura” o último elemento do vetor estará no seu devido lugar (caso a ordenação seja crescente, ele é o maior de todos).


A segunda “varredura” é análoga à primeira e vai até o penúltimo elemento.
O processo é repetido até que tenham sido feitas tantas “varreduras” quanto o número de elementos a serem classificados menos um.
Ao final o vetor estará classificado segundo o processo escolhido.

 
4) Qual é a classificação do método bolha? Qual o seu grau de complexidade?

Resposta:

O Método Bolha possui uma Classificação por “troca”. Seu Grau de Complexidade é considerado Simples, pois trabalha como um único modo: Ele compara todos os pares de elementos consecutivos e enquanto houverem pares não ordenados, ele continuará varrendo e operando. Assim que uma varredura não retorna nenhum par desordenado, o Vetor está pronto.



5) Dê exemplo de aplicação do método bolha, com as comparações, trocas e interações.

Resposta:

Exemplo:
método da bolha, pode ser aplicado a uma  lista de números, consistindo, inicialmente, na comparação entre os dois primeiros números ( os das posições 1 e 2 ). Se o da posição 1 for maior que o da posição 2, efetuamos uma troca. Caso contrário eles permanecem em suas posições originais. Em seguida, comparamos os das posições 2 e 3 e agimos como antes: só efetuamos a troca se o da posição 2 for maior que o da posição 3, e assim por diante com os números das posições 3 e 4, 4 e 5, ... até efetuarmos a comparação entre aqueles que ocupam as posições 7 e 8.
Com isso deslocamos o maior deles para a última posição ( a posição 8, mais à direita ). O maior número, por assim dizer, "borbulha" para a posição "mais elevada", como as bolhas, em um líquido, elevam-se para a sua superfície. A simulação adiante ilustra o processo completo para o leitor. Como nas simulações anteriores, os números que estarão sendo comparados serão representados em vermelho e aqueles que já tenham atingido sua posição final, em azul.

Situação inicial: 37, 22, 47, 81, 16, 59, 47, 64

PRIMEIRO PASSO: Efetuar as comparações antes descritas, com a finalidade de colocar o maior dos números na posição 8:
1ª comparação: 22, 37, 47, 81, 16, 59, 47, 64 Trocaram-se 22 com 37
2ª comparação: 22, 37, 47, 81, 16, 59, 47, 64 Permanecem, pois 37<47
3ª comparação: 22, 37, 47, 81, 16, 59, 47, 64 Permanecem, pois 47<81
4ª comparação: 22, 37, 47, 16, 81, 59, 47, 64 Trocaram-se 16 com 81
5ª comparação: 22, 37, 47, 16, 59, 81, 47, 64 Trocaram-se 59 com 81
6ª comparação: 22, 37, 47, 16, 59, 47, 81, 64 Trocaram-se 47 com 81
7ª comparação: 22, 37, 47, 16, 59, 47, 64, 81 Trocaram-se 64 com 81
Com a seqüência de comparações e trocas anteriores, o número 81 (o maior da lista) "borbulhou" para a posição 8.

SEGUNDO PASSO: Tomando-se a situação final do passo anterior como inicial, vamos fazer "borbulhar" um segundo número (menor ou igual ao que já se encontra na posição 8) para a posição 7:

Situação inicial: 22, 37, 47, 16, 59, 47, 64, 81
1ª comparação: 22, 37, 47, 16, 59, 47, 64, 81 Permanecem, pois 22<37
2ª comparação: 22, 37, 47, 16, 59, 47, 64, 81 Permanecem, pois 37<47
3ª comparação: 22, 37, 16, 47, 59, 47, 64, 81 Trocaram-se 16 com 47
4ª comparação: 22, 37, 16, 47, 59, 47, 64, 81 Permanecem, pois 47<59
5ª comparação: 22, 37, 16, 47, 47, 59, 64, 81 Trocaram-se 47 com 59
6ª comparação: 22, 37, 16, 47, 47, 59, 64, 81 Permanecem, pois 59<64
Encerra-se o segundo passo, com a posição 7 ocupada pelo número 64.

TERCEIRO PASSO: Como o leitor já percebeu, nosso objetivo é transferir um número ( menor ou igual ao 64 ) para a posição 6, partindo da última seqüência do passo anterior.

Situação inicial: 22, 37, 16, 47, 47, 59, 64, 81
1ª comparação: 22, 37, 16, 47, 47, 59, 64, 81 Permanecem, pois 22<37
2ª comparação: 22, 16, 37, 47, 47, 59, 64, 81 Trocaram-se 37 com 16
3ª comparação: 22, 16, 37, 47, 47, 59, 64, 81 Permanecem, pois 37<47
4ª comparação: 22, 16, 37, 47, 47, 59, 64, 81 Permanecem, pois 47=47
5ª comparação: 22, 16, 37, 47, 47, 59, 64, 81 Permanecem, pois 47<59
Encerra-se o passo com o número 59 na sexta posição.

QUARTO PASSO: Preencher a quinta posição com um número menor ou igual àquele que se encontra na posição 6:

Situação inicial: 22, 16, 37, 47, 47, 59, 64, 81
1ª comparação: 16, 22, 37, 47, 47, 59, 64, 81 Trocaram-se 22 com 16
2ª comparação: 16, 22, 37, 47, 47, 59, 64, 81 Permanecem, pois 22<37
3ª comparação: 16, 22, 37, 47, 47, 59, 64, 81 Permanecem, pois 37<47
4ª comparação: 16, 22, 37, 47, 47, 59, 64, 81 Permanecem, pois 47=47

QUINTO PASSO: Preencher a quarta posição com um número menor ou igual àquele que se encontra na posição 5:

Situação inicial: 16, 22, 37, 47, 47, 59, 64, 81
1ª comparação: 16, 22, 37, 47, 47, 59, 64, 81 Permanecem, pois 16<22
2ª comparação: 16, 22, 37, 47, 47, 59, 64, 81 Permanecem, pois 22<37
3ª comparação: 16, 22, 37, 47, 47, 59, 64, 81 Permanecem, pois 37<47

SEXTO PASSO: Preencher a terceira posição com um número menor ou igual àquele que se encontra na posição 4:

Situação inicial: 16, 22, 37,
47, 47, 59, 64, 81
1ª comparação: 16, 22, 37, 47, 47, 59, 64, 81 Permanecem, pois 16<22
2ª comparação: 16, 22, 37, 47, 47, 59, 64, 81 Permanecem, pois 22<37

SÉTIMO PASSO: Preencher a segunda posição com um número menor ou igual àquele que se encontra na posição 3:
Situação inicial: 16, 22, 37, 47, 47, 59, 64, 81
1ª comparação: 16, 22, 37, 47, 47, 59, 64, 81 Permanecem, pois 16<22

O processo finaliza com a seqüência ORDENADA.

6) Demonstre o código-fonte do método bolha e comente o mesmo.

Resposta:

/* Algoritmo de ordenação Bubble Sort */

#include <stdio.h>

  /* Definição da função bubble_sort */
  void bubble_sort (int vet[], int max) {     
    int flag, i, aux;  
   
    do {
      flag = 0;
      for (i = 0; i < (max - 1); i++) {
      
       /* Verfica se o vetor está em ordem, no caso ele coloca em ordem crescente, para decrescente trocar '>' por '<' */
       if (vet[i] > vet[i+1]) {
         /* Caso não esteja, ordena */
         aux = vet[i];
         vet[i] = vet[i+1];
         vet[i+1] = aux;
         flag =1;
       }
      }
    /* Repete enquanto algum valor estiver fora de ordem */ 
    } while (flag == 1);
   
    /* Imprime o vetor ordenado em ordem crescente */
    for (i = 0; i < max; i++) {
      printf ("%d ",vet[i]);
    }
    printf ("\n");
  }

main () {
  int max, i;
 
  /* Lê o total de números do vetor */
  scanf ("%d", &max);
 
  /* Define o vetor com o número max de algarismos */
  int vetor[max];
 
  for (i = 0; i < max; i++) {
    /* Lê cada indice do vetor */
    scanf ("%d",&vetor[i]);
  }
 
  /* Dentro dessa função o vetor será ordenado */
  bubble_sort (vetor, max);
 
}