You are on page 1of 26

FORA BRUTA

Capitulo III
Sumrio
1. Conceito
2. Ordenao por seleco e bubble
1. Ordenao por seleco.
2. Ordenao por bubble (Bolhas)
3. Busca sequencial e string matching
4. Problemas de Caminho Curto e Cobertura Convexa
1. Problema de Caminho Curto
2. Problema de Cobertura Convexa (convex-hull)
5. Busca Exaustiva
1. Problema de Caixeiro Viajante
2. Problema de Mochila (Knapsack)
3. Problema de Escalonamento de Tarefas


Conceito
Fora bruta uma abordagem simples para
resolver um problema, geralmente baseado
directamente na descrio do problema ou
nas definies dos conceitos envolvidos.

A "fora" aplicada pela definio da
estratgia a de um computador e no do
intelecto.
Faa isso!" seria uma outra maneira de
descrever a forma da abordagem de fora
bruta.
Muitas vezes, a estratgia de fora bruta
de facto o que mais fcil de aplicar.
Ordenao por seleco por fora bruta
Comeamos a ordenao por seleco, verificando a
lista completa para encontrar o seu menor elemento e
troca-lo com o primeiro elemento, colocando o menor
elemento na sua posio final na lista e considerando-
o como sendo ordenado. Ento, comeando com o
segundo elemento percorremos a lista para encontrar
o menor entre os n1 ltimos elementos e trocmo-lo
com o segundo elemento, colocando o segundo
menor elemento na sua posio final. Geralmente,
para i-simo elemento da lista, numerados de 0 a n2,
o algoritmo procura o menor nmero entre os ltimos
ni elementos e troca-o com A
i

A
0
A
1
A
i1
| A
i
, , A
min
, , N
a1


Ordenao por seleco
Algoritmo ordSelec(A[0.. n1])
//O algoritmo ordena um dado vector usando mtodo de seleco
//Entrada: o vector A[0.. n1] de elementos ordenveis
//Sada: o vector A[0.. n1] ordenado

para i de 0 at n2 passo 1 faa
min i
para j de i+1 at n1 passo 1 faa
se A[j] < A[min] ento
min j
troca A[i] e A[min]

A anlise de eficiencia deste algoritmo simples
Tamanho de entrada = n
A operao bsica do algoritmo a comparao A[j] < A[min]
O nmero de vezes a operao bsica executada depende somente do tamanho do vector e
dado pelo seguinte somatrio


| | ) (
2
) 1 (
) 1 ( 1 ) 1 ( ) 1 ( 1 ) (
2
2
0
2
0
2
0
1
1
n
n n
i n i n n C
n
i
n
i
n
i
n
i j
O e

= = + + = =


=

+ =
Ordenao por seleco
Exemplo:
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
Ordenao por bolha (bubble
sort)
Este mtodo consiste em comparar
elementos adjacentes da lista (vector)
e trocando-os se no estiverem em
ordem. Fazendo isto, estamos a
mover o maior elemento para ltima
posio. No passo seguinte, move-se
o segundo maior elemento, assim em
diante, depois de n1 passos a lista
estar ordenada.
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
Ordenao por bolha (bubble
sort)
Algoritmo ordbubble(A[0,, n1])
//O algoritmo ordena um dado vector usando mtodo de bubble
//Entrada: o vector A[0,, n1] de elementos ordenveis
//Sada: o vector A[0,, n1] ordenado

para i de 0 at n2 passo 1 faa
para j de 0 at n2i passo 1 faa
se A[j+1] < A[j] ento
min j
troca A[j] e A[j+1]

Tamanho de entrada: n
Operao bsica: comparao ( tambm podemos considerar a troca como operao bsica do
algoritmo)
) (
2
) 1 (
) 1 (
] 1 0 ) 2 [( 1 ) (
2
2
0
2
0
2
0
2
0
n
n n
i n
i n n C
n
i
n
i
n
i
i n
j
O e

= =
+ + = =

=

=
Pesquisa Sequencial
Pesquisa sequencial um algoritmo
que usa a estratgia de fora 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).
Algoritmo
Algoritmo 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
//Sada: A posio do primeiro elemento do vector A com valor igual a k e -1 se o elemento no existir.

A[n] k
i0
enquanto A[i] = k faa
ii +1
se i < n ento
retorna i
seno
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.


Casamento de Cadeias String
Matching
Uma cadeia de caracteres uma sequencia qualquer de
elementos.
As cadeias aparecem no processamento de textos em
dicionrios, cdigos, sequenciamento de DNA em biologia
computacional.

Dado uma sequencia de n caracteres chamado texto e
uma sequencia de m caracteres (msn) chamada chave,
encontre uma parte de texto que seja igual a chave.
Pretende-se encontrar i tal que t
i
= p
0
, , t
i+j
=p
j
, , t
i+m1

=p
m1
:
t
0
t
i
t
i+j
t
i+m1
t
n1
texto T

p
0
p
j
p
m1
padro P

.
Algoritmo fora bruta de Casamento de
cadeias
Algoritmo StrMatch(T[0..n1], P[0..m1])
//Entrada: O vector T de n caracteres representando o texto
// O vector P de m caracteres representado o padro
//Sada: A posio de primeiro carcter no texto que coincide
com o primeiro carcter do padro no caso de sucesso e 1 no
caso de insucesso.

para i de 0 at nm passo 1 faa
j0
enquanto j<m E p[j]=T[i+j] faa
jj+1
se j=m ento
retorna i
retorna 1
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
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 questo so representados
em coordenadas cartesianas (x, y) e que a distancia entre
dois pontos P
i
=(x
i
, y
i
) e P
j
=(x
j
, y
j
) dado por


A estratgia de fora 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 no pretendemos calcular o mesmo par de
pontos duas vezes, portanto, para se evitar isso,
consideremos somente os pares dos pontos (P
i
, P
j
) para
cada i < j.
2 2
) ( ) ( ) , (
j i j i j i
y y x x P P d + =
Algoritmo
Algoritmo DistMin(P)
//Entrada: a lista P de n (n2) pontos P
1
=(x
1
,y
2
), , P
n
=(x
n
, y
n
)
//Saida: Indices ind1 e ind2 de distancia mnima de par de pontos

dmin
para i de 1 at n1 passo 1 faa
para j de i+1 at n passo 1 faa

if d <dmin
dmind;
ind1 i
ind2 j
retorna ind1, ind2

A operao bsica do algoritmo o clculo da distncia entre dois pontos
usando mtodo de Euclides.

) ) ( ) ((
2 2
j i j i
y y x x sqrt d +
Busca Exaustiva
simplesmente uma estratgia de fora
bruta para problema de combinao.
Sugere a gerao de cada e todo elemento
de certo domnio de um problema,
seleccionando aquelas que satisfazem as
limitaes do problema e ento encontrar o
elemento desejado.
Sua implementao requer um algoritmo que
gera alguns objectos combinatoriais.
Ilustraremos a busca exaustiva na aplicao
de trs importantes problemas:
Caixeiro Viajante
Mochila
Escalonamento de Tarefas

Problema de Caixeiro
Viajante
O problema pede que se encontre a viajem de custo
mnimo 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 vrtices 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 vrtices de
um grafo somente uma vez)
Tambm pode-se observar que o circuito Hamiltoriano
pode ser definido como uma sequencia de n+1 vrtices
adjacentes v
i0
, v
i1
, , v
in1
, v
i0
onde o primeiro vrtice da
sequencia o mesmo que o ltimo enquanto que o
restante n1 so distintos.
Problema de Caixeiro
Viajante
Descrio:
Seja G=(V, E) um grafo dirigido
ponderado. Seja n o nmero de vrtices e
v
0
o vrtice de origem.
Problema:
Achar uma viajem de custo mnimo,
comeando em v
0
.
Sequncia de decises:
A partir de v
0
qual o primeiro vrtice do
ciclo, o segundo vrtice, ...
A soluo para uma pequena instancia de problema de caixeiro viajante
usando a busca exaustiva
a b
c d
2
5
8 7
3
1
Viajem Distancia
abcd
a
L=2+8+1+7=1
8
abdc
a
L=2+3+1+5=1
1
\
acbd
a
L=5+8+3+7=2
3
acdb
a
L=5+1+3+2=1
1
\
adbc
a
L=7+3+8+5=2
3
adcb
a
L=7+1+8+2=1
8
Exemplo
Problema da Mochila
Descrio:
Temos n objectos com pesos p
1
, p
2
, ..., p
n
e
valores v
i
, v
2
, ..., v
n
. Temos ainda uma
mochila de capacidade M. Se uma fraco x
i

(0 xi 1) do objecto i for colocada na
mochila, resulta em um lucro x
i
v
i
.
Problema: Maximizar o valor que pode
ser levado na mochila.
Sequncia de decises: Escolher primeiro
objecto, escolher segundo objecto, ...
Problema de mochila (Exemplo)
p=7
v=42
p=3
v=1
2
p=5
v=2
5
p=4
v=4
0
Obj.
1
Obj.
2
Obj.
3
Obj.
4
Mochila
M=10
Subconjunto Peso Total Valor Total
C 0 0
{1} 7 42
{2} 3 12
{3} 4 40
{4} 5 25
{1,2} 10 36
{1,3} 11 No cabe
{1,4} 12 No cabe
{2,3} 7 52
{2,4} 8 37
{3,4} 9 65 \
{1,2,3} 14 No cabe
{1,2,4} 15 No cabe
{1,3,4} 16 No cabe
{2,3,4} 12 No cabe
{1,2,3,4} 19 No cabe
Problema de Escalonamento de
Tarefas
Seja dado n pessoas que precisam
executar n tarefas, uma pessoa por
tarefa (i.. cada pessoa atribuda
uma tarefa e uma tarefa atribuda 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
atribuio com menor custo total.
Exemplo
Seja dada a tabela abaixo
representando o custo de atribuio
C[i, j]:
tabela 1




Encontrar atribuies 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
Soluo
Abaixo 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


(
(
(
(

4 9 6 7
8 1 8 5
7 3 4 6
8 7 2 9
Referencias
Levitin, Anany, Introduction to the
design and analysis of algorithms
2003
Ziviani, Nivio, Projeto de Algoritmos:
com implementao em Java e C++,
2007

You might also like