O documento discute a técnica de divisão e conquista e como o balanceamento de subproblemas pode resultar em algoritmos mais eficientes. Apresenta o algoritmo Mergesort como um exemplo de ordenação que usa divisão e conquista com balanceamento, resultando em uma compledidade melhor que algoritmos sem balanceamento.
2. Como foi visto na técnica Divisão e conquista,
um problema poder ser solucionado com mais
facilidade se o mesmo for divido em
subproblemas.
Utilizando o balanceamento, que consiste em
fazer divisões em partes iguais ou
aproximadamente iguais de um problema,
veremos que há um contraste entre particionar
em subproblemas iguais e desiguais.
A utilização desta técnica, resulta em algoritmos
mais eficientes.
3. Considere o seguinte exemplo de ordenação
(sem balanceamento)
public class Ordenacao {
public static void ordena ( int v[], int n) {
for (int i=0; i< n-1 ; i++){
int min=i;
for ( int j=i +1; j < n; j++){
if( v[j] < v[min])
min=j;
int x=v[min];
v[min]=v[i];
v[i]=x; }
}
}
}
4. Analisando a complexidade do algoritmo,
percebe-se que ele possui notação assintótica
O(n²).
Esse algoritmo pode ser visto como uma
aplicação recursiva de divisão e conquista.
Não é eficiente para valores grandes de n,
devido à sua ordem quadrática.
5. Para se obter um algoritmo de ordenação
assintoticamente eficiente, é necessário realizar
o balanceamento.
6. Mergesort
1. Divida recursivamente o vetor a ser ordenado
em dois, até obter n vetores de um único
elemento.
7.
8. Mergesort
1. Divida recursivamente o vetor a ser ordenado
em dois, até obter n vetores de um único
elemento.
2. Aplique a intercalação tendo como entrada
dois vetores de um elemento, formando um
vetor ordenado de dois elementos.
9.
10. Mergesort
1. Divida recursivamente o vetor a ser ordenado
em dois, até obter n vetores de um único
elemento.
2. Aplique a intercalação tendo como entrada
dois vetores de um elemento, formando um
vetor ordenado de dois elementos.
3. Repita este processo formando vetores
ordenados cada vez maiores até que todo o vetor
esteja ordenado.
11.
12. Considere o seguinte exemplo de ordenação
(com balanceamento)
Algoritmo MERGESORT (L, ini, fim)
ENTRADA: um vetor L e as posições ini e fim
SAÍDA: o vetor L em ordem crescente da posição ini
até a posição fim
Inicio
inteiro: meio;
se ini < fim
meio = ( ini + fim) /2;
se ini < meio
MERGESORT(L, ini, meio);
MERGESORT(L, meio + 1, fim);
MERGE(L, ini, meio, fim);
fim {MERGESORT}
13. O algoritmo do Mergesort possui notação
assintótica O(n log n).
Para o problema de ordenação, o balanceamento
levou a um resultado muito superior. O custo
passou de O(n²), para O(n log n).
14. Há vários campos na área de computação em
que podemos utilizar este método para obter
maior eficiência.
1. Sistemas multiprocessados:
Nesse sistema múltiplos processadores permitem a
execução simultânea de diversos programas, ou até
mesmo que um programa seja executado por vários
processadores.
Objetivos:
Aumentar a capacidade computacional com um menor custo.
Permitir o balanceamento de modo que as tarefas sejam
uniformemente distribuídas sem que haja sobrecarga dos
componentes.
15. 2. Cluster
Com a internet mais presente a cada dia e o
tráfego cada vez mais intenso, esse método foi
essencial para uma expansão saudável da rede.
Cluster: Conjunto de máquinas, duas ou mais nas quais são
executadas aplicações requeridas por um número muito
grande de pessoas.
Um cluster deve receber os pedidos de serviços de vários
clientes, fazer uma distribuição deles nas maquinas que o
constituem, sem que haja sobrecarregamento.
16. Cluster para Balanceamento de Carga
• As tarefas são distribuídas o mais uniformemente
possível entre os computadores. O foco é fazer com que
cada computador receba e atenda a uma requisição e
não, necessariamente, que divida uma tarefa com outras
máquinas.
• Nesse tipo de cluster é necessário que o procedimento
seja executado de forma a garantir um “equilíbrio” na
aplicação.
• O balanceamento de cargas pode ser usado em vários
tipos de aplicações, mas o seu uso é bastante comum na
Internet promovendo um aumento da capacidade de
rede, melhorando a performance de sistemas.