2-força bruta

26
FORÇA BRUTA Capitulo III

Upload: alfredotxizanda

Post on 01-Dec-2015

53 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 2-Força Bruta

FORÇA BRUTACapitulo III

Page 2: 2-Força Bruta

Sumário1. Conceito2. Ordenação por selecção e bubble

1. Ordenação por selecção.2. Ordenação por bubble (Bolhas)

3. Busca sequencial e string matching4. Problemas de Caminho Curto e Cobertura Convexa

1. Problema de Caminho Curto2. Problema de Cobertura Convexa (convex-hull)

5. Busca Exaustiva1. Problema de Caixeiro Viajante2. Problema de Mochila (Knapsack)3. Problema de Escalonamento de Tarefas

Page 3: 2-Força Bruta

Conceito Força bruta é uma abordagem simples para

resolver um problema, geralmente baseado directamente na descrição do problema ou nas definições dos conceitos envolvidos.

A "força" aplicada pela definição da estratégia é a de um computador e não do intelecto.

“Faça isso!" seria uma outra maneira de descrever a forma da abordagem de força bruta.

Muitas vezes, a estratégia de força bruta é de facto o que é mais fácil de aplicar.

Page 4: 2-Força Bruta

Ordenação por selecção por força bruta

Começamos a ordenação por selecção, verificando a lista completa para encontrar o seu menor elemento e troca-lo com o primeiro elemento, colocando o menor elemento na sua posição final na lista e considerando-o como sendo ordenado. Então, começando com o segundo elemento percorremos a lista para encontrar o menor entre os n–1 últimos elementos e trocámo-lo com o segundo elemento, colocando o segundo menor elemento na sua posição final. Geralmente, para i-ésimo elemento da lista, numerados de 0 a n–2, o algoritmo procura o menor número entre os últimos n–i elementos e troca-o com Ai

A0 A1 … Ai–1 | Ai, …, Amin, …, Na–1

Page 5: 2-Força Bruta

Ordenação por selecçãoAlgoritmo ordSelec(A[0.. n–1])

//O algoritmo ordena um dado vector usando método de selecção

//Entrada: o vector A[0.. n–1] de elementos ordenáveis

//Saída: o vector A[0.. n–1] ordenado

para i de 0 até n–2 passo 1 faça

min ipara j de i+1 até n–1 passo 1 faça

se A[j] < A[min] então

min jtroca A[i] e A[min]

A análise de eficiencia deste algoritmo é simplesTamanho de entrada = nA operação básica do algoritmo é a comparação A[j] < A[min]

O número de vezes a operação básica é executada depende somente do tamanho do vector e é dado pelo seguinte somatório )(

2

)1()1(1)1()1(1)( 2

2

0

2

0

2

0

1

1

nnn

ininnCn

i

n

i

n

i

n

ij

Page 6: 2-Força Bruta

Ordenação por selecçãoExemplo: Ordenar o vector [89,45,68,90,29,34,17] em ordem crescente.

89 45 68 90 29 34 17

17 45 68 90 29 34 89

17 29 68 90 45 34 89

17 29 34 90 45 68 89

17 29 34 45 90 68 89

17 29 34 45 68 90 89

17 29 34 45 68 89 90

Page 7: 2-Força Bruta

Ordenação por bolha (bubble sort)Este método consiste em

comparar elementos adjacentes da lista (vector) e trocando-os se não estiverem em ordem. Fazendo isto, estamos a mover o maior elemento para última posição. No passo seguinte, move-se o segundo maior elemento, assim em diante, depois de n–1 passos a lista estará ordenada.

Page 8: 2-Força Bruta

Exemplo: Ordenar o vector [89,45,68,90,29,34,17] em ordem crescente.

89

45

68

90

29

34

17

45

89

68

90

29

34

17

45

68

89

90

29

34

17

45

68

89

29

90

34

17

45

68

89

29

34

90

17

45

68

89

29

34

17

90

45

68

89

29

34

17

90

45

68

29

89

34

17

90

45

68

29

34

89

17

90

45

68

29

34

17

89

90

45

29

68

34

17

89

90

45

29

34

68

17

89

90

45

29

34

17

68

89

90

29

45

34

17

68

89

90

29

34

45

17

68

89

90

29

34

17

45

68

89

90

29

17

34

45

68

89

90

17

29

34

45

68

89

90

Page 9: 2-Força Bruta

Ordenação por bolha (bubble sort)Algoritmo ordbubble(A[0,…, n–1])

//O algoritmo ordena um dado vector usando método de bubble

//Entrada: o vector A[0,…, n–1] de elementos ordenáveis

//Saída: o vector A[0,…, n–1] ordenado

para i de 0 até n–2 passo 1 faça

para j de 0 até n–2–i passo 1 faça

se A[j+1] < A[j] então

min j

troca A[j] e A[j+1]

Tamanho de entrada: n

Operação básica: comparação ( também podemos considerar a troca como operação básica do algoritmo)

)(2

)1()1(

]10)2[(1)(

22

0

2

0

2

0

2

0

nnn

in

innC

n

i

n

i

n

i

in

j

Page 10: 2-Força Bruta

Pesquisa SequencialPesquisa sequencial é um

algoritmo que usa a estratégia de força bruta.

Funcionamento◦Seja dada uma lista L e uma chave k,

o algoritmo de pesquisa sequencial consiste em percorrer a lista L até encontrar o elemento chave k (caso de sucesso) ou até encontrar o fim da lista (caso de insucesso).

Page 11: 2-Força Bruta

AlgoritmoAlgoritmo pesqseq( A[0..n], k)//O algoritmo implementa a busca sequencial com a chave de busca como sentinela

//Entrada: O vector A de n elementos e a chave de busca k

//Saída: A posição do primeiro elemento do vector A com valor igual a k e -1 se o elemento não existir.

A[n] ki0enquanto A[i] k faça

ii +1

se i < n então

retorna i

senão

retorna -1

Uma forma de melhorar este algoritmo é ordenar a lista antes de fazer a busca. Pesquisando nesta lista pode parar logo que for encontrado um elemento maior ou igual a chave de busca k.

Page 12: 2-Força Bruta

Casamento de Cadeias “String Matching” Uma cadeia de caracteres é uma sequencia qualquer de

elementos. As cadeias aparecem no processamento de textos em

dicionários, códigos, sequenciamento de DNA em biologia computacional.

Dado uma sequencia de n caracteres chamado texto e uma sequencia de m caracteres (mn) chamada chave, encontre uma parte de texto que seja igual a chave. Pretende-se encontrar i tal que ti = p0, …, ti+j=pj, …, ti+m–1 =pm–1:

t0 … ti … ti+j …ti+m–1 … tn–1 texto T

↨ ↨ ↨

p0 … pj …pm–1 padrão P

.

Page 13: 2-Força Bruta

Algoritmo força bruta de Casamento de cadeiasAlgoritmo StrMatch(T[0..n–1], P[0..m–1])

//Entrada: O vector T de n caracteres representando o texto

// O vector P de m caracteres representado o padrão

//Saída: A posição de primeiro carácter no texto que coincide com o primeiro carácter do padrão no caso de sucesso e –1 no caso de insucesso.

para i de 0 até n–m passo 1 faça

j0enquanto j<m E p[j]=T[i+j] faça

jj+1

se j=m então

retorna i

retorna –1

Page 14: 2-Força Bruta

Exemplo

N O B O D Y _ N O T I C E D _ H I M

N O T

N O T

N O T

N O T

N O T

N O T

N O T

N O T

Page 15: 2-Força Bruta

Caminho mais Curto O algoritmo de Caminho mais Curto é usado para

encontrar a distancia mais curta entre dois pontos dados num conjunto de n pontos.

Assumimos que os pontos em questão são representados em coordenadas cartesianas (x, y) e que a distancia entre dois pontos Pi =(xi, yi) e Pj=(xj, yj) é dado por

A estratégia de força bruta para resolver leva-nos ao seguinte algoritmo: calcula-se a distancia entre pares de pontos diferentes e encontre o par com menor distancia. É obvio que não pretendemos calcular o mesmo par de pontos duas vezes, portanto, para se evitar isso, consideremos somente os pares dos pontos (Pi, Pj) para cada i < j.

22 )()(),( jijiji yyxxPPd

Page 16: 2-Força Bruta

AlgoritmoAlgoritmo DistMin(P)

//Entrada: a lista P de n (n≥2) pontos P1=(x1,y2), …, Pn=(xn, yn)

//Saida: Indices ind1 e ind2 de distancia mínima de par de pontos

dminpara i de 1 até n–1 passo 1 faça

para j de i+1 até n passo 1 faça

if d <dmin

dmind;

ind1 iind2 j

retorna ind1, ind2

A operação básica do algoritmo é o cálculo da distância entre dois pontos usando método de Euclides.

))()(( 22jiji yyxxsqrtd

Page 17: 2-Força Bruta

Busca ExaustivaÉ simplesmente uma estratégia de força bruta

para problema de combinação.Sugere a geração de cada e todo elemento de

certo domínio de um problema, seleccionando aquelas que satisfazem as limitações do problema e então encontrar o elemento desejado.

Sua implementação requer um algoritmo que gera alguns objectos combinatoriais.

Ilustraremos a busca exaustiva na aplicação de três importantes problemas:◦ Caixeiro Viajante◦ Mochila◦ Escalonamento de Tarefas

Page 18: 2-Força Bruta

Problema de Caixeiro Viajante O problema pede que se encontre a viajem de custo

mínimo partindo da cidade origem passando por n cidades e terminando na cidade origem. Cada cidade é visitada somente uma vez.

O problema pode ser modelado pelo grafo dirigido ponderado, com os vértices representado cidades e ramos as distancias.

Problema pode ser reduzido ao problema de busca de menor circuito Hamiltoriano. (O circuito de Hamilton é definido como o ciclo que passa pelos todos vértices de um grafo somente uma vez)

Também pode-se observar que o circuito Hamiltoriano pode ser definido como uma sequencia de n+1 vértices adjacentes vi0, vi1, …, vin–1, vi0 onde o primeiro vértice da sequencia é o mesmo que o último enquanto que o restante n–1 são distintos.

Page 19: 2-Força Bruta

Problema de Caixeiro ViajanteDescrição:

◦Seja G=(V, E) um grafo dirigido ponderado. Seja n o número de vértices e v0 o vértice de origem.

Problema: ◦Achar uma viajem de custo mínimo,

começando em v0.

Sequência de decisões: ◦A partir de v0 qual é o primeiro vértice

do ciclo, o segundo vértice, ...

Page 20: 2-Força Bruta

A solução para uma pequena instancia de problema de caixeiro viajante usando a busca exaustiva

a b

c d

2

58 7

3

1

Viajem Distancia

abcda L=2+8+1+7=18

abdca L=2+3+1+5=11

acbda L=5+8+3+7=23

acdba L=5+1+3+2=11

adbca L=7+3+8+5=23

adcba L=7+1+8+2=18

Exemplo

Page 21: 2-Força Bruta

Problema da MochilaDescrição:

◦Temos n objectos com pesos p1, p2, ..., pn e valores vi, v2, ..., vn . Temos ainda uma mochila de capacidade M. Se uma fracção xi (0 ≤ xi ≤ 1) do objecto i for colocada na mochila, resulta em um lucro xi × vi.

Problema: Maximizar o valor que pode ser levado na mochila.

Sequência de decisões: Escolher primeiro objecto, escolher segundo objecto, ...

Page 22: 2-Força Bruta

Problema de mochila (Exemplo)

p=7v=42 p=

3v=12

p=5v=25

p=4v=40

Obj. 1

Obj. 2

Obj. 3

Obj. 4

Mochila

M=10

Subconjunto

Peso Total Valor Total

0 0

{1} 7 42

{2} 3 12

{3} 4 40

{4} 5 25

{1,2} 10 36

{1,3} 11 Não cabe

{1,4} 12 Não cabe

{2,3} 7 52

{2,4} 8 37

{3,4} 9 65

{1,2,3} 14 Não cabe

{1,2,4} 15 Não cabe

{1,3,4} 16 Não cabe

{2,3,4} 12 Não cabe

{1,2,3,4} 19 Não cabe

Page 23: 2-Força Bruta

Problema de Escalonamento de TarefasSeja dado n pessoas que

precisam executar n tarefas, uma pessoa por tarefa (i.é. cada pessoa é atribuída uma tarefa e uma tarefa é atribuída a uma única pessoa). O custo que se pode obter se i-esima pessoa é atribuida a j-esima tarefa, é c[i,j] para cada i, j=1,2, …, n.

O problema é encontrar uma atribuição com menor custo total.

Page 24: 2-Força Bruta

ExemploSeja dada a tabela abaixo

representando o custo de atribuição C[i, j]:

tabela 1

Encontrar atribuições com menor custo total.

Tarefa1

Tarefa2

Tarefa3

tarefa4

Pessoa 1

9 2 7 8

Pessoa 2

6 4 3 7

Pessoa 3

5 8 1 8

Pessoa 4

7 6 9 4

Page 25: 2-Força Bruta

SoluçãoAbaixo é nos dada a matriz de custos

correspondentes a tabela 1:

Assim, temos: <1,2,3,4> custo=9+4+1+4=18 <1,2,4,3> custo=9+4+8+9=30<1,3,2,4> custo=9+3+8+4=24<1,3,4,2> custo=9+3+8+6=26<1,4,2,3> custo=9+7+8+9=33<1,4,3,2> custo=9+7+1+6=23

4967

8185

7346

8729

Page 26: 2-Força Bruta

ReferenciasLevitin, Anany, Introduction to

the design and analysis of algorithms 2003

Ziviani, Nivio, Projeto de Algoritmos: com implementação em Java e C++, 2007