• Nenhum resultado encontrado

UNIVERSIDADE FEDERAL DE SANTA CATARINA UFSC GRAFOS

N/A
N/A
Protected

Academic year: 2021

Share "UNIVERSIDADE FEDERAL DE SANTA CATARINA UFSC GRAFOS"

Copied!
15
0
0

Texto

(1)

UNIVERSIDADE FEDERAL DE SANTA CATARINA – UFSC

DEPARTAMENTO DE ENGENHARIA DE PRODUÇÃO E SISTEMAS

GRAFOS

Teoria e Algoritmos

Disciplina:

Pesquisa Operacional III

Professor: Sérgio Fernando Mayerle e-mail: mayerle@deps.ufsc.br

(2)

1. Grafos e Algoritmos

1.1. Definição

Grafo é uma estrutura matemática G=(X,A), onde X ={x1,x2,...,xn} é um conjunto de nós (ou vértices) e A={a1,a2,...,am} é o conjunto de ligações entre os vértices de X . Cada ligação ak =(xi,xj) corresponde a um par ordenado.

Quando a orientação do par é relevante, as ligações recebem o nome de arcos, e o grafo é dito orientado. Em caso contrário, as ligações são denominadas de arestas, e o grafo é dito não-orientado. Na figura 01 econtram-se exemplos de grafos.

(a)

(b)

(c)

(3)

Os problemas de grafos (ou redes) surgem em uma grande variedade de situações. As redes de transporte, elétricas e comunicações, predominam em nossa vida diária. A representação de grafos se utiliza amplamente em áreas tão diversas como produção, distribuição, localização de instalações, planejamento de projetos, administração de recursos e planejamento financeiro. De fato, a representação de redes proporciona um panorama geral poderoso, e uma ajuda conceitual para visualizar as relações entre os componentes dos sistemas que se usa em quase todas as áreas científicas, sociais e econômicas.

Alguns problemas associados com G=(X,A) estão relacionados na seqüência: a) Problema de expansão de árvores de mínimo custo

b) Problema dos caminhos de mínimo custo c) Problema das p-medianas

d) Problema dos p-centros e) Problema do caixeiro viajante

1.2. Notação

Ainda em relação a um grafo G=(X,A) são usados as seguintes notações com base na teoria dos conjuntos:

Conjunto sucessor de um vértice: Γ(xi)={xj |(xi,xj)∈A}

Conjunto sucessor de um conjunto: Γ({x1,x2,...})=Γ(x1)∪Γ(x2)∪...

Conjunto sucessor de ordem k: ( ) ( ...( ( )))

i i k x x =Γ Γ Γ Γ

Conjunto predecessor de um vértice: 1( ) { |( , ) } A x x x xi = j j i ∈ Γ−

Conjunto predecessor de um conjunto: ({ , ,...}) ( ) ( ) ...

2 1 1 1 2 1 1 ∪ Γ ∪ Γ = Γ− x xxx

Conjunto predecessor de ordem k: ( ) 1( 1...( 1( ))) i i k x x − − − − =Γ Γ Γ Γ

Grau de saída de um vértice: ( ) ( )

i i

o x x

d = Γ

Grau de entrada de um vértice: ( ) 1( )

i i

t x x

d = Γ−

Grau de um vértice (grafos não-orientados): ( ) ( ) 1( ) i i

i x x

x

d = Γ = Γ−

Grafo parcial:

G

P

=

(

X

,

A

P

)

no qual

A

P

A

Sub-grafo:

(

,

)

S S S

X

A

X

=

, no qual

X

S

X

e } , | ) , {( i j i j S S x x A x x X A = ∈ ∈

Grafo bipartido: GB =(X1X2,A), tal que

(

x

i

,

x

j

)

A

,

∅ = ∩ 2 1 X

X , e para todo (xi,xj)∈A tem-se

x

i

X

1 e xjX2

(4)

1.3. Representação matricial

Duas formas matriciais distintas poderão ser usadas para representar um grafo G=(X,A): (a) matriz de adjacência; (b) matrix de incidência.

Matriz de Adjacência ] [aij = A onde:

=

contrário

caso

em

vértice

do

sucessor

é

se

0

1

j

X

i

X

ij

x

x

a

Matriz de Incidência

]

[

b

ij

=

B onde:      − + = ∈ ∈ contrário caso em arco do final vértice é se arco do inicial vértice é se 0 1 1 j i j i ij X a a X x x b

Considere, como exemplo, o grafo apresentado na figura 02. Na seqüência são apresentadas as respectivas matrizes de adjacência e de incidência.

1 a 2 a 3 a 4 a 5 a 6 a 7 a 1 x 2 x 3 x 4 x 5 x

Figura 02 – Grafo orientado

                = 0 0 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 A                 − + + − + + + − + − − − − + = 1 1 0 0 0 0 0 1 0 1 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 1 0 1 0 0 1 B

Considerando a esparsidade destas matrizes, a implantação de métodos computacionais mais eficientes poderá ser realizada usando métodos de armazenamento em listas

(5)

encadeadas, como mostra o esquema da figura 03, aplicado para a matriz de adjacência do grafo apresentado na figura 02.

A 1 2 3 4 1 1 2 ˄ 5 ˄ 2 2 3 ˄ ˄ 3 3 1 3 4 ˄ ˄ 4 4 2 ˄ 5 ˄ 5 1 ˄ ˄ 4 5 ˄ ˄

(6)

1.4. Caminhos mínimos

Suponha um grafo G=(X,A) com custos c(xi,xj)≥0,∀(xi,xj)∈A. Deseja-se encontrar um caminho de mínimo custo associado a G, que inica no vértice sX e termina no vértice tX . Para resolver este problema, existe um algoritmo proposto por Edsger Dijkstra (1959).

Considere que a cada vértice xiX existe um rótulo l(xi) e p(xi).

P1. Inicialização: Faça l(s)=0 e p(s)=nil. Marque este rótulo como permanente. Faça l(xi)=∞ para todo xis e marque estes rótulos como temporários. Faça

s m= .

P2. Atualização dos rótulos: Para todo xi∈Γ(m) que tem um rótulo temporário, atualize os rótulos como segue:

m x x l x l x l x m c m l i i i i i = = = + = ) ( p faça ) ( Se ] ), ( [ min ) ( ) , ( ) (

β

β

β

P3. Fixa um rótulo como permanente: De todos os rótulos temporários encontre

m

para o qual

l

(

m

)=min[

l

(

x

i)]. Marque o rótulo como permanente.

P4. Teste de finalização: Se

m

=

t

, então l(m) é o custo do caminho mínimo desejado.

Apresente o caminho s,...,p(p(t)),p(t),t e o respectivo custo l(m), e pare. Em

caso contrário volte ao passo 2.

Se o objetivo é encontrar um caminho mínimo entre s e todos os demais vértices do grafo, o teste de finalização acima deverá ser adaptado para que a parada ocorra apenas quando todos os vértices tiverem sido rotulados como permanentes. Na figura 04 é apresentado como exemplo um de grafo contendo 8 nós e 13 arcos, às quais estão associados custos, para o qual pede-se encontrar o caminho mínimo entre o vértice 1 e o vértice 8.

Inicialização

Rotula-se como temporário o vértice 1, com custo nulo e predecessor ∅.

(7)

Iteração 1

Escolhe-se o vértice temporário com menor custo (vértice 1). Marca-se este vértice como permanente, e a partir dele rotula-se como temporários todos os seus vértices sucessores (vértice 2 e 3).

5 ) ); , ( ) ( min( ) ( 7 ) ); , ( ) ( min( ) ( 3 1 1 3 2 1 1 2 = ∞ + = = ∞ + =

x

x

c

x

l

x

l

x

x

c

x

l

x

l

Iteração 2

Escolhe-se o vértice temporário com menor custo (vértice 3). Marca-se este vértice como permanente, e a partir dele rotula-se como temporário todos os seus vértices sucessores (vértice 2 e 4). O vértice 2 manté-se com o rótulo inalterado. 11 ) ); , ( ) ( min( ) ( 7 ) 7 ); , ( ) ( min( ) ( 4 3 3 4 2 3 3 2 = ∞ + = = + =

x

x

c

x

l

x

l

x

x

c

x

l

x

l

Iteração 3

Escolhe-se o vértice temporário com menor custo (vértice 2). Marca-se este vértice como permanente, e a partir dele rotula-se como temporário todos os seus vértices sucessores (vértice 4 e 5). O vértice 4 permanece com o rótulo inalterado. 11 ) ); , ( ) ( min( ) ( 11 ) 11 ); , ( ) ( min( ) ( 5 2 2 5 4 2 2 4 = ∞ + = = + =

x

x

c

x

l

x

l

x

x

c

x

l

x

l

Iteração 4

Escolhe-se o vértice temporário com menor custo. Como há empate entre os vértices 4 ou 5, optou-se pelo vértice 4. Marca-se este vértice como permanente, e a partir dele rotula-se como temporário todos os seus vértices sucessores (vértice 5 e 6). O vértice 5 mantém o rótulo inalterado. 18 ) ); , ( ) ( min( ) ( 11 ) 11 ); , ( ) ( min( ) ( 6 4 4 6 5 4 4 5 = ∞ + = = + =

x

x

c

x

l

x

l

x

x

c

x

l

x

l

(8)

Iteração 5

Escolhe-se o vértice temporário com menor custo (vértice 5). Marca-se este vértice como permanente, e a partir dele rotula-se como temporário todos os seus vértices sucessores (vértice 7 e 8).

23 ) ); , ( ) ( min( ) ( 20 ) ); , ( ) ( min( ) ( 8 5 5 8 7 5 5 7 = ∞ + = = ∞ + =

x

x

c

x

l

x

l

x

x

c

x

l

x

l

Iteração 6

Escolhe-se o vértice temporário com menor custo (vértice 6). Marca-se este vértice como permanente, e a partir dele rotula-se como temporário todos os seus vértices sucessores (vértice 5 e 8). O vértice 5 permanece inalterado.

20 ) 23 ); , ( ) ( min( ) ( 11 ) 11 ); , ( ) ( min( ) ( 8 6 6 8 5 6 6 5 = + = = + =

x

x

c

x

l

x

l

x

x

c

x

l

x

l

Iteração 7

Escolhe-se o vértice temporário com menor custo (vértice 7 e 8). Como existe empate, optou-se por escolher o vértice 8, por ser este o vértice de destino. Marca-se este vértice como permanente, e finaliza-se o processo. O caminho mínimo é determinado recursivamente, do vértice 8 ao vértice 1 (em azul).

Figura 04 – Busca de caminho mínimo entre os vértices 1 e 8, com as respectivas iterações. Para problemas onde se deseja encontrar o caminho mínimo entre todos os pares de vértices, é utiliza-se o algoritmo proposto por Floyd & Hu (1962). Suponha um grafo

) , (X A

G= com custos c(xi,xj) quaisquer, associados os arcos (xi,xj)∈A. Deseja-se encontrar caminhos de mínimo custo em G, associados a todos os pares de vértices. Assume-se, como dado de entrada, uma matriz de custos C =[cij], tal que:

     ∈ ∉ ∞ + = = A ) , ( se ) , c( A ) , ( se se 0 j i j i j i j i ij x x x x x x x x c

e uma matriz de roteiros, Θ=[

θ

ij], onde

θ

ij é o predecessor imediato de

x

j no caminho

mínimo de

x

i para xj. Inicializa-se a matriz Θ=[

θ

ij], fazendo-se

θ

ij =xi,∀i, j. P1. Inicialização: Faça k=0.

(9)

P2. Incrementa iteração: Faça k= k+1.

P3. Para todo ik tal que

c

ik ≠∞, e todo jk tal que ckj ≠∞ realize a operação:

kj ij ij ij ij kj ik β c c c c c

θ

θ

β

β

= = = + = faça Se ] , [ min

P4. Teste de finalização: (i) Se existe

c

ii <0, então um circuito de custo negativo

contendo o vértice

x

i existe em G, e nenhuma solução é possível. Pare. (ii) Se todos os

c

ii ≥0 e k=n, então a solução foi obtida,

C

=[

c

ij] e Θ=[

θ

ij] são as matrizes de custos mínimos e roteiros entre todos os pares de vértices. Pare. (iii) Se todos os

c

ii ≥0 e k<n, retorne ao passo 2 e continue.

Para recompor o caminho mínimo entre dois vértices quaisquer, denotados por xi,xjX, utiliza-se os ponteiros da matriz Θ=[

θ

ij], como segue:

j ij i i i i

x

x

x

x

x

x

θ

θ

θ

θ

α α β β γ ν ν = = = = 

No exemplo da figura 05 encontra-se um grafo com 5 vértices e 7 arcos. Para este grafo, na seqüência, é aplicado o algoritmo de Floyd & Hu.

4 2 3 6 5 2 1 1 2 4 3 5 Tabela 05 – Grafo orientado

(10)

0 = k                 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ = 0 6 5 0 1 0 4 2 2 0 3 0

C

                = Θ 5 5 5 5 5 4 4 4 4 4 3 3 3 3 3 2 2 2 2 2 1 1 1 1 1 1 = k                 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ = 0 6 5 0 4 1 0 4 2 2 0 3 0

C

                = Θ 5 5 5 5 5 4 4 4 1 4 3 3 3 3 3 2 2 2 2 2 1 1 1 1 1 2 = k                 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ = 0 6 5 6 0 4 1 6 0 4 2 2 0 5 3 0

C

                = Θ 5 5 5 5 5 2 4 4 1 4 2 3 3 3 3 2 2 2 2 2 2 1 1 1 1 3 = k                 ∞ ∞ ∞ ∞ ∞ ∞ ∞ = 0 6 5 9 7 6 0 4 1 6 0 4 2 2 0 5 3 0

C

                = Θ 5 5 5 3 3 2 4 4 1 4 2 3 3 3 3 2 2 2 2 2 2 1 1 1 1 4 = k                 ∞ ∞ ∞ ∞ ∞ ∞ ∞ = 0 6 5 9 7 6 0 4 1 6 0 4 2 2 0 5 3 0

C

                = Θ 5 5 5 3 3 2 4 4 1 4 2 3 3 3 3 2 2 2 2 2 2 1 1 1 1 5 = k                 = 0 6 5 9 7 6 0 11 4 1 6 12 0 4 2 2 8 7 0 9 5 11 10 3 0

C

                = Θ 5 5 5 3 3 2 4 5 1 4 2 5 3 3 3 2 5 5 2 3 2 5 5 1 1

Nestas matrizes, é possível encontrar o caminho mínimo entre quaisquer pares de vértices. Como exemplo, considere que o objetivo é encontrar o caminho mínimo entre os vértices

x

3 e x4. Então: 12 34 =

c

5 34 =

x

θ

θ

35 =

x

2

θ

32 =

x

3

(11)

Caminho mínimo =

x

3 →

x

2→

x

5 →

x

4

1.5. Expansão de árvores

Este problema consiste em encontrar a árvore de extensão mínima. Uma árvore é um grafo em que todos nós se conectam sem que hajam ciclos. Este problema tem muitas aplicações práticas diretas, além de servir de estratégia para resolução de outros problemas mais complexos. O procedimento utilizado para resolver este problema é baseado no algoritmo proposto por Prim (1961).

Considere um grafo G=(X,A) conexo e não direcionado, com custos

c

(

x

i,

x

j) associados aos arcos (xi,xj)∈A. Deseja-se encontrar uma árvore em G, tal que a soma dos custos de suas arestas seja mínimo. A cada vértice

x

j

X

associa-se um rótulo [

α

j,

β

j], onde

α

j é custo de inclusão do vértice xj, e

β

j é o vértice da árvore com o qual xj deve se conectar ao ser incluído na árvore.

P1. Faça

T

s ={

x

s}, onde

x

s é um vertice arbitrário qualquer, e

A

s=∅.

T

s e

A

s são,

respectivamente, o conjunto de nós e arestas da árvore em formação. P2. Para todo

x

j

T

s encontre o vértice

α

j

T

s, tal que:

j j i T x j j x c x x c s i

β

α

= = ∈ [ ( , )] min ) , (

e defina o rótulo de xj como [

α

j,

β

j]. Se não for possível encontrar

α

j, isto é, se

∅ = ∩

Γ(xj) Ts , defina o rótulo de xj como [nil,+∞].

P3. Escolha o vértice * j x tal que: )] [ min * j T x j s j

β

β

∉ =

Atualize Ts =Ts∪{xj*} e faça As = As∪{(

α

j*,xj*)}. Se |Ts|=n, pare (as ligações

em As formam a árvore desejada). Se |Ts|≠n, vá ao passo 4.

P4. Para todo xjTs e xj∈Γ(xj*), tal que

β

j >c(xj*,xj), atualize o rótulo de xj

fazendo: * *, ) ( j j j j j x x x c = =

α

β

e volte ao passo 3.

Na figura 05 é apresentado como exemplo um de grafo contendo 8 nós e 13 arestas, às quais estão associados custos. Nesta figura estão apresentados os resultados parciais obtidos em todas as iterações do algoritmo.

(12)

7 5 3 4 11 6 7 3 9 12 2 10 9 1 3 6 2 4 5 7 8 [ , ] ] , [ ] , [ ] , [ ] , [ ] 5 , [ ] 7 , [ } { 8 7 6 5 4 1 3 1 2 1 ∞ ← ∞ ← ∞ ← ∞ ← ∞ ← ← ← ∅ = = nil x nil x nil x nil x nil x x x x x A x T s s 7 5 3 4 11 6 7 3 9 12 2 10 9 1 3 6 2 4 5 7 8 [ , ] [ , ] [ , ] ] , [ ] 6 , [ ] 3 , [ )} , {( } , { 8 7 6 5 3 4 3 2 3 1 3 1 3 * ∞ ← ∞ ← ∞ ← ∞ ← ← ← = = = nil x nil x nil x nil x x x x x x x A x x T x x s s j 7 5 3 4 11 6 7 3 9 12 2 10 9 1 3 6 2 4 5 7 8 [ , ] [ , ] ] , [ ] 4 , [ ] 6 , [ )} , ( ), , {( } , , { 8 7 6 2 5 3 4 2 3 3 1 2 3 1 2 * ∞ ← ∞ ← ∞ ← ← ← = = = nil x nil x nil x x x x x x x x x A x x x T x x s s j ] 12 , [ ] 9 , [ ] 3 , [ ] 6 , [ )} , ( ), , ( ), , {( } , , , { 5 8 5 7 5 6 3 4 5 2 2 3 3 1 5 2 3 1 5 * x x x x x x x x x x x x x x A x x x x T x x s s j ← ← ← ← = = = ] 2 , [ ] 9 , [ ] 6 , [ )} , ( ), , ( ), , ( ), , {( } , , , , { 6 8 5 7 3 4 6 5 5 2 2 3 3 1 6 5 2 3 1 6 * x x x x x x x x x x x x x x A x x x x x T x x s s j ← ← ← = = =

(13)

] 9 , [ ] 6 , [ )} , ( ), , ( ), , ( ), , ( ), , {( } , , , , , { 5 7 3 4 8 6 6 5 5 2 2 3 3 1 8 6 5 2 3 1 8 * x x x x x x x x x x x x x x A x x x x x x T x x s s j ← ← = = = ] 9 , [ )} , ( ), , ( ), , ( ), , ( ), , ( ), , {( } , , , , , , { 5 7 4 3 8 6 6 5 5 2 2 3 3 1 4 8 6 5 2 3 1 4 * x x x x x x x x x x x x x x A x x x x x x x T x x s s j ← = = = )} , ( ), , ( ), , ( ), , ( ), , ( ), , ( ), , {( } , , , , , , , { 7 5 4 3 8 6 6 5 5 2 2 3 3 1 7 4 8 6 5 2 3 1 7 * x x x x x x x x x x x x x x A x x x x x x x x T x x s s j = = =

Figura 05 – Algoritmo de Prim para expansão de árvores de mínimo custo

1.6. Problema de localização de p-medianas

Considere um grafo G=(X,A), com custos dij =d(xi,xj) associados aos caminhos que conectam os pares de vértices xi,xjX . Seja XpX um subconjunto de X contendo p vértices. Define-se transmissão de Xp como:

∈ = X x p j j p j X x d v X ) ( , ) (

σ

Nesta expressão, vj é um peso associado ao vértice xj e d(xj,Xp) é a distância entre o

vértice xj e o conjunto de vértices Xp, dado por:

)] , ( [ min ) , ( j i X x p j X d x x x d p i∈ =

O problema das p-medianas consiste em encontrar o subconjunto * p

X de cardinalidade p para o qual a transmissão

σ

(X*p) seja mínima, isto é:

      = ∈ ⊆

min[ ( , )] min ) ( * j i X x j X X p v d x x X

σ

(14)

Este problema pode ser modelado pelo seguinte problema de otimização inteira 0-1:

{ }

i j n n i n p n j d v ij n j ii ij n i ii n i ij n i n j ij ij j ,... 1 , 1 , 0 ,... 1 ,... 1 1 : s.a z Min 1 1 1 1 1 = ∀ ∈ = ∀ ≤ = = ∀ = =

∑∑

= = = = =

ξ

ξ

ξ

ξ

ξ

ξ

onde

ξ

ij =1 implica que xjX está alocado ao vértice mediana xiXp, e

ξ

ij =0 em caso

contrário. Se

ξ

ii =1 então xi é um vértice mediana; em caso contrário

ξ

ii =0.

Tipicamente, para problemas de grande porte (n>1000), o modelo acima apresenta

milhares de equações e milhões de variáveis, e sua resolução através de métodos convencionais de programação matemática não é viável. Então, este problema pode ser resolvido de modo aproximado por meio do algoritmo de substituição de vértices proposto por Teitz & Bart (1968), e que encontra-se descrito abaixo.

P1. Selecione um subconjunto SX, contendo p vertices, para formar uma solução inicial para as p-medianas. Marque todos os vértices xjS como “não-testados”. P2. Selecione algum vértice xjS “não-testado” e para cada vértice xiS calcule a

redução ∆ij no valor da transmissão, ao substituir o vértice xi pelo vértice xj na formação do conjunto S, isto é, calcule:

}) { } { ( ) ( j i ij = SSxx

σ

σ

. P3. Encontre max[ ij] S x j i i o = ∆ ∆

∈ . (i) Se ∆ioj ≤0, marque xj como “testado” e volte para o passo 2. (ii) Se ∆i j>0

o , faça SS∪{xj}−{xi}, marque xi como “testado” e volte para o passo 2.

P4. Repita os passos 2 e 3 até que todos os vértices em XS tenham sido marcados como “testados” (este procedimento é denominado ciclo). Se durante o último ciclo nenhuma substituição de vértices foi realizada (passo 3.ii), vá ao passo 5. Em caso contrário, se alguma substituição foi realizada em 3.ii, marque todos os vértices

S

xj∉ como “não-testados” e volte ao passo 2.

P5. Pare. O conjunto S é uma solução aproximada para o problema das p-medianas. Para exemplificar, na figura 06 encontra-se um problema de p-medianas, com 200 vértices e 10 medianas, onde a distância entre vértices é calculada pela métrica euclidiana.

(15)

Referências

Documentos relacionados

Segundo (CASAVANT &amp; KHUL, 1988), podemos considerar um escalonador de processos como um componente que faz a gerência de recursos. O problema de escalonamento de processos

A pesquisa em nível de iniciação cientifica, possui como tema principal o estudo e analise de como os artistas da pós - modernidade se comunicam com a cidade, através de suas

Reação Rara (ocorre entre 0,01% e 0,1% dos pacientes que utilizam este medicamento): reações alérgicas como resultado da sensibilidade à lidocaína são extremamente raras, e

2.7. Eventuais alterações no Edital serão comunicadas através dos mesmos meios de divulgação do texto original, reabrindo-se o prazo inicialmente estabelecido

FIGURA 2 – Sistema de abastecimento de água do Laboratório de Camarões Marinhos da Universidade Federal de Santa Catarina (LCM/UFSC), onde P1 é a Caixa de Captação de água, P2

Quino (figura 115): exsudado fenólico vermelho escuro comumente encontrado na casca ou nas madeiras de eucalipto. A forma mais encontrada é a anelar, com cerca de 2-3mm de

Para VORIS (1928), a artéria cerebelar média, por ele denominada de artéria cerebelar ântero-inferior, era o ramo mais rostral da artéria basilar, projetando-se lateralmente, suprindo

O reflexo disso aparece no fato de não só as pessoas quererem um sistema de fácil instalação, manuseio, ou aprendizado com o mínimo de esforço mental, mas as empresas