You are on page 1of 47

Grafo

Um grafo com 6 vrtices e 7 arestas. Em matemtica e cincia da computao, grafo o objeto bsico de estudo da teoria dos grafos. Tipicamente, um grafo representado como um conjunto de pontos ( vrtices) ligados por retas (as arestas). Dependendo da aplicao, as arestas podem ser direcionadas, e so representadas por "setas". Os grafos so muito teis na representao de problemas da vida real, em vrios campos profissionais. Por exemplo, pode-se representar um mapa de estradas atravs dos grafos e usar algoritmos especficos para determinar ocaminho mais curto entre dois pontos, ou o caminho mais econmico. Assim, os grafos podem possuir tambmpesos (ou custo), quer nas arestas quer nos vrtices, e o custo total em estudo ser calculado a partir destes pesos. Grafos podem ser utilizados tambm em redes PERT no mbito do planejamento de projetos. Neste caso, a cada aresta est associado o custo de execuo, e as tarefas precedentes de uma outra sero suas afluentes. Outro exemplo o caso das redes de computadores, sendo cada terminal representado por um vrtice, o cabo de rede pelas arestas e o custo associado a latncia, por exemplo, ou o nmero de mquinas que a comunicao atravessa entre os ns. nestes princpios que assenta todo o protocolo IP que torna possvel a Internet ser uma realidade. Grafos tm sido utilizados para representar o formalismo das redes complexas, onde o nmero de ns e de conexes entre esses ns muito alto e complexamente estabelecido. Introduo Uma possvel definio para grafos: "O grafo propriamente dito uma representao grfica das relaes existentes entre elementos de dados. Ele pode ser descrito num espao euclidiano de n dimenses como sendo um conjunto V de vrtices e um conjunto A de curvas contnuas (arestas)". Podemos avaliar um grafo atravs de seu tipo, propriedades e aplicaes[1].

Busca em grafo Vrios problemas representados por um grafo podem ser resolvidos efetuando uma busca nesse grafo. A busca em grafo consiste em explorar um grafo, de forma que obtenha um processo sistemtico de como caminhar por seus vrtices e arestas. s vezes preciso visitar todos os vrtices de um grafos, as vezes o problema pode ser resolvido visitando somente um subconjunto dos vrtices. Se o grafo for uma rvore, esta questo se torna simples, podem utilizar as visitas em prordem, ou ordem de nvel. Algoritmos de percurso Existem dois mtodos de percurso em grafos: percurso em profundidade (depth-first search DFS) e o percurso em largura (breadth first search BFS). A ideia bsica do DFS buscar "mais a fundo" no grafo quando possvel. Assim, a partir de um vrtice v, as arestas ainda no exploradas o so e, ao final, a busca retrocede. A idia do BFS bastante simples: os vrtices do grafo so visitados nvel a nvel, ou seja, todos os vrtices a uma distncia k do vrtice inicial so visitados antes de qualquer vrtice a uma distncia k +1 do inicial. Referncias

http://www.icmc.sc.usp.br/manuals/sce183/gfbus.html Cormen. Thomas (2000); Leiserson, Charles.; Rivest, Ronald. Introduction to Algorithmics, McGraw-Hill. Algoritmos em Grafos - Paulo Feofiloff

Teoria dos grafos

Grafo com 4 vrtices e 6 arestas. um grafo completo, conexo e planar.

A teoria dos grafos um ramo da matemtica que estuda as relaes entre os objetos de um determinado conjunto. Para tal so empregadas estruturas chamadas de grafos, G(V,A), onde V um conjunto no vazio de objetos denominados vrtices e A um conjunto de pares no ordenados de V, chamado arestas. Dependendo da aplicao, arestas podem ou no ter direo, pode ser permitido ou no arestas ligarem um vrtice a ele prprio e vrtices e/ou arestas podem ter um peso (numrico) associado. Se as arestas tm uma direo associada (indicada por uma seta na representao grfica) temos um grafo direcionado, grafo orientado ou digrafo. Um grafo com um nico vrtice e sem arestas conhecido como o grafo trivial ou "o ponto". Estruturas que podem ser representadas por grafos esto em toda parte e muitos problemas de interesse prtico podem ser formulados como questes sobre certos grafos. Por exemplo, a estrutura de links da Wikipedia pode ser representada por um dgrafo: os vrtices so os artigos da Wikipedia e existe uma aresta do artigo A para o artigo B se e somente se A contm um link para B. Dgrafos so tambm usados para representar mquinas de estado finito. O desenvolvimento de algoritmos para manipular grafos um importante tema da cincia da computao.

Histrico O artigo de Leonhard Euler, publicado em 1736, sobre o problema das sete pontes de Knigsberg, considerado o primeiro resultado da teoria dos grafos. [1] tambm considerado um dos primeiros resultados topolgicos na geometria; isto , no dependente de quaisquer medidas. Isso ilustra a profunda conexo entre a teoria dos grafos etopologia.

Definies de grafos e digrafos Na literatura, as definies bsicas da teoria dos grafos variam bastante. Aqui esto as convenes usadas nesta enciclopdia. Um grafo direcionado (tambm chamado digrafo ou quiver) consiste de

um conjunto V de vrtices, um conjunto E de arestas e mapas s, t : E V, onde s(e) a fonte e t(e) o alvo da aresta direcionada e.

Um grafo no direcionado (ou simplesmente grafo) dado por


um conjunto V de vrtices, um conjunto E de arestas e

uma funo w : E P(V) que associa a cada aresta um subconjunto de dois ou de um elemento de V, interpretado como os pontos terminais da aresta.

Em um grafo ou digrafo com pesos, uma funo adicional E R associa um valor a cada aresta, o que pode ser considerado seu "custo"; tais grafos surgem em problemas de rota tima tais como o problema do caixeiro viajante.

Representao grfica (layout do grafo) Os grafos so geralmente representados graficamente da seguinte maneira: desenhado um crculo para cada vrtice, e para cada aresta desenhado um arco conectando suas extremidades. Se o grafo for direcionado, seu sentido indicado na aresta por uma seta. Note que essa representao grfica (o layout) no deve ser confundida com o grafo em si (a estrutura abstrata, no-grfica). Vrios diferentes layouts podem corresponder ao mesmo grafo.[2] O que importa quais vrtices esto conectados entre si por quantas arestas.

Glossrio dos conceitos bsicos de teoria dos grafos

Um grafo com 6 vrtices e 7 arestas O grafo de exemplo exibido direita um grafo simples com o conjunto de vrtices V = {1, 2, 3, 4, 5, 6} e um conjunto de arestas E = { {1,2}, {1,5}, {2,3}, {2,5}, {3,4}, {4,5}, {4,6} } (com o mapeamento w sendo a identidade). Uma aresta conecta dois vrtices; esses dois vrtices so ditos como incidentes aresta. A valncia (ou grau) de um vrtice o nmero de arestas incidentes a ele, com loops contados duas vezes. No grafo de exemplo os vrtices 1 e 3 possuem uma valncia de 2, os vrtices 2, 4 e 5 tm a valncia de 3 e o vrtice 6 tem a valncia de 1. Se E finito, ento a valncia total dos vrtices o dobro do nmero de arestas. Em um dgrafo, distingue-se o grau de sada (o nmero de arestas saindo de um vrtice) e o grau de entrada (o nmero de arestas entrando em um vrtice). O grau de um vrtice igual soma dos graus de sada e de entrada.

Dois vrtices so considerados adjacentes se uma aresta existe entre eles. No grafo acima, os vrtices 1 e 2 so adjacentes, mas os vrtices 2 e 4 no so. O conjunto de vizinhos de um vrtice consiste de todos os vrtices adjacentes a ele. No grafoexemplo, o vrtice 1 possui 2 vizinhos: vrtice 2 e vrtice 5. Para um grafo simples, o nmero de vizinhos de um vrtice igual sua valncia. Na computao, um grafo finito direcionado ou no-direcionado (com, digamos, n vrtices) geralmente representado por sua matriz de adjacncia: uma matriz n-por-n cujo valor na linha i e coluna j fornece o nmero de arestas do i-simo ao j-simo vrtices. Se for possvel estabelecer um caminho de qualquer vrtice para qualquer outro vrtice de um grafo, diz-se que o grafo conexo. Se for sempre possvel estabelecer um caminho de qualquer vrtice para qualquer outro vrtice mesmo depois de remover k-1 vrtices, ento diz-se que o grafo est k-conexo. Note que um grafo est k-conexo se, e somente se, contm k caminhos independentes entre qualquer par de vrtices. O grafo de exemplo acima conexo (e portanto 1-conexo), mas no 2-conexo. Em um grafo genrico G, o corte associado a um conjunto X de vrtices o conjunto de todas as arestas que tm uma ponta em X e outra em V(G) - X, onde V(G) o conjunto de todos os vrtices pertencentes ao grafo G.

Grafo simples um grafo no direcionado, sem laos e que existe no mximo uma aresta entre quaisquer dois vrtices (sem arestas paralelas). No grafo de exemplo, (1, 2, 5, 1, 2, 3) um caminho com comprimento 5, e (5, 2, 1) um caminho simples de comprimento 2. Grafo completo o grafo simples em que, para cada vrtice do grafo, existe uma aresta conectando este vrtice a cada um dos demais. Ou seja, todos os vrtices do grafo possuem mesmo grau. O grafo completo de n vrtices frequentemente denotado por Kn. Ele tem n(n-1)/2 arestas (correspondendo a todas as possveis escolhas de pares de vrtices).

Grafo nulo o grafo cujo conjunto de vrtices vazio. Grafo vazio o grafo cujo conjunto de arestas vazio. Grafo trivial o grafo que possui apenas um vertice e nenhuma aresta. Grafo regular um grafo em que todos os vrtices tem o mesmo grau. Multigrafo um grafo que permite mltiplas arestas ligando os mesmos vrtices (arestas paralelas).

Lao (loop) num grafo ou num digrafo uma aresta e em E cujas terminaes esto no mesmo vrtice.

Pseudografo um grafo que contm arestas paralelas e laos. Ciclo (ou circuito) um caminho que comea e acaba com o mesmo vrtice. Ciclos de comprimento 1 so laos. No grafo de exemplo, (1, 2, 3, 4, 5, 2, 1) um ciclo de comprimento 6. Um ciclo simples um ciclo que tem um comprimento pelo menos de 3 e no qual o vrtice inicial s aparece mais uma vez, como vrtice final, e os outros vrtices aparecem s uma vez. No grafo acima, (1, 5, 2, 1) um ciclo simples. Um grafo chama-se acclico se no contm ciclos simples.

Ponto de articulao ou Vrtice de corte um vrtice cuja remoo desliga um grafo. Uma ponte uma aresta cuja remoo desliga um grafo. Um componente biconectado um conjunto mximo de arestas tal que qualquer par de arestas do conjunto fazem parte de um ciclo simples comum. O contorno de um grafo o comprimento do ciclo simples mais curto no grafo. O contorno de um grafo acclico , por definio, infinito.

rvore um grafo simples acclico e conexo. s vezes, um vrtice da rvore distinto e chamado de raiz. rvores so comumente usadas como estruturas de dados em informtica (veja estrutura de dados em rvore). Floresta um conjunto de rvores; equivalentemente a uma floresta, em algum grafo acclico.

Subgrafo de um grafo G um grafo cujo conjunto dos vrtices um subconjunto do conjunto de vrtices G, cujo conjunto de arestas um subconjunto do conjunto de arestas de G, e cuja funo w uma restrio da funo de G

Subgrafo gerador aquele obtido pela remoo de uma ou mais arestas de um outro grafo, dizemos ento que este novo grafo obtido gerador do primeiro, Subgrafo induzido obtido pela remoo de vrtices e consequente das arestas relacionadas com ele de um outro grafo, dizemos que este novo grafo um grafo induzido do original. Grafo parcial de um grafo G um subgrafo com o mesmo conjunto de vrtices que G. Uma rvore parcial um grafo parcial que rvore. Todo grafo tem pelo menos uma rvore parcial.

Clique em um grafo um subgrafo que tambm um grafo completo. No grafo do exemplo acima, os vrtices 1, 2 e 5 formam um clique.

Conjunto independente em um grafo um conjunto de vrtices no adjacentes entre si. No exemplo acima, os vrtices 1, 3 e 6 formam um conjunto independente e 3, 5 e 6 so outro conjunto independente.

Grafo planar aquele que pode ser representado em um plano sem qualquer interseco entre arestas. O grafo do exemplo planar; o grafo completo de n vertices, para n> 4, no planar. Caminho uma sequncia de vrtices tal que de cada um dos vrtices existe uma aresta para o vrtice seguinte. Um caminho chamado simples se nenhum dos vrtices no caminho se repete. O comprimento do caminho o nmero de arestas que o caminho usa, contando-se arestas mltiplas mltiplas vezes. O custo de um caminho num grafo balanceado a soma dos custos das arestas atravessadas. Dois caminhos so independentes se no tiverem nenhum vrtice em comum, excepto o primeiro e o ltimo.

Caminho euleriano em um grafo o caminho que usa cada aresta exatamente uma vez. Se tal caminho existir, o grafo chamado traversvel. Um ciclo euleriano um ciclo que usa cada aresta exatamente uma vez. Caminho hamiltoniano em um grafo o caminho que visita cada vertice exatamente uma vez. Um ciclo hamiltoniano um ciclo que visita cada vrtice uma s vez. O grafo do exemplo contm um caminho hamiltoniano. Enquanto determinar se um dado grafo contm um caminho ou ciclo euleriano trivial, o mesmo problema para caminhos e ciclos hamiltonianos extremamente rduo. Lema do aperto de mos diz que se os convidados de uma festa apertarem as mos quando se encontrarem pela primeira vez, o nmero de convidados que apertam a mo um nmero mpar de vezes par. Tambm em grafos no direcionados a soma dos graus de todos os vrtices igual ao dobro do nmero de arestas.

Grafo bipartido o grafo cujos vrtices podem ser divididos em dois conjuntos, nos quais no h arestas entre vrtices de um mesmo conjunto. Para um grafo ser bipartido ele no pode conter circuitos de comprimento mpar.

1. Se um grafo G bipartido, todo o circuito de G possui comprimento par.

Sejam V1 e V2 os dois conjuntos em que, de acordo com a definio de grafo bipartido, se particiona V(G). Toda a aresta de G conecta um vrtice em V1

com outro em V2. Assim sendo, se X for um vrtice de V1, para voltar a esse vrtice ter de se ir a V2 e voltar a V1 um nmero indeterminado de vezes, e de cada vez sero percorridas duas arestas, uma de um vrtice em V1 para um vrtice em V2 e outra de um vrtice em V2 para um vrtice em V1. Logo, o nmero de arestas a percorrer ser par, ou seja, o comprimento do circuito par.

2. Se todo o circuito de um grafo G possui comprimento par, ento o grafo bipartido.

Seja G um grafo em que todo o circuito tem comprimento par, e seja X um vrtice de G. Denotemos por V1 o conjunto formado por X e por todos os vrtices cuja distncia a X par. Seja V2 = V(G)\V1 (isto , o conjunto formado pelos vrtices de G que no pertencem a V1). Pretende mostrar-se que no existe qualquer aresta que conecte vrtices de V1 ou vrtices de V2. Suponhamos a existncia de tal aresta, isto , suponhamos a existncia de dois vrtices em V1 (ou V2), digamos Xi e Xj, conectados por uma aresta. Ora existe j um caminho de comprimento par entre Xi e Xj, j que existem caminhos, ambos de comprimento par (ou mpar, no caso de Xi e Xj pertencerem a V2), entre Xi e X e entre X e Xj. Se a esse caminho juntarmos a aresta {Xi;Xj} obtemos um circuito de comprimento mpar o que contraria a hiptese de apenas existirem circuitos de comprimento par.

Grafo bipartido completo o grafo bipartido, cujo qualquer vrtice do primeiro conjunto adjacente a todos vrtices do segundo conjunto Grafo k-partido ou grafo de k-colorao um grafo cujos vrtices podem ser particionados em k conjuntos disjuntos, nos quais no h arestas entre vrtices de um mesmo conjunto. Um grafo 2-partido o mesmo que grafo bipartido. Emparelhamento de grafos consiste em partir o grafo em conjuntos de vrtices a qual no compartilham nenhuma aresta entre eles. Teorema das quatro cores baseado no problema das cores necessrias para se colorir um mapa sem que os pases vizinhos compartilhem da mesma cor. Transformando o mapa em um grafo pode-se provar que pode-se representar qualquer mapa (um grafo planar) com apenas 4 cores (4 parties).

Percurso rvores:

Percorrimento sistemtico em todos os vrtices e arestas do grafo. Grafo pode ser dirigido ou no. O percurso em rvores o processo de visitar cada n da rvore exatamente uma vez. O percurso pode ser interpretado como colocar todos os ns em uma linha, no existe uma ordem para ser seguida. Existem n percursos diferentes, quase todos caticos. Os bsicos so percurso em profundidade e percurso em largura Fila: busca em largura Pilha: busca em profundidade

Busca em extenso ou largura: (Breadth-First Search ou BFS).

A propriedade especial est no fato de a rvore no possuir ciclos: dados dois vrtices quaisquer, existe exatamente 1 caminho entre eles. Um percurso em extenso visitar cada n comeando do menor nvel e move-se para os nveis mais altos nvel aps nvel, visitando cada n da esquerda para a direita. Sua implementao direta quando uma fila utilizada. Depois que um n visitado, seus filhos, se houver algum, so colocados no final da fila e o n no incio da fila visitado. Assim, os ns do nvel n+1 sero visitados somente depois de ter visitados todos os ns do nvel n. Computa a menor distncia para todos os vrtices alcanaveis. O sub-grafo contendo os caminhos percorridos chamado de breadth-first tree.

Busca em profundidade (Depth-first search ou DFS).

Um algoritmo de busca em profundidade realiza uma busca no-informada que progride atravs da expanso do primeiro n filho da rvore de busca, e se aprofunda cada vez mais, at que o alvo da busca seja encontrado ou at que ele se depare com um n que no possui filhos (n folha). Ento a busca retrocede (backtrack) e comea no prximo n. Numa implementao no-recursiva, todos os ns expandidos recentemente so adicionados a uma pilha, para realizar a explorao. A complexidade espacial de um algoritmo de busca em profundidade muito menor que a de um algoritmo de busca em largura. A complexidade temporal de ambos algoritmos so proporcionais ao nmero de vrtices somados ao nmero de arestas dos grafos aos quais eles atravessam. Quando ocorrem buscas em grafos muito grandes, que no podem ser armazenadas completamente na memria, a busca em profundidade no termina, em casos onde o comprimento de um caminho numa rvore de busca infinito. O simples artifcio de lembrar quais ns j foram visitados no funciona, porque pode no haver memria suficiente. Isso pode ser resolvido estabelecendo-se um limite de aumento na profundidade da rvore. Problemas que envolvem grafos

Colorao de grafos: o Teorema das quatro cores Conjuntos de Grafos


Conjunto independente Clique

Problemas de roteamento:

Sete pontes de Knigsberg rvore de extenso mnima Problema do caminho mnimo Problema da inspeo de rotas (tambm conhecido como o "Problema do carteiro chins") Problema do caixeiro viajante

Fluxos de rede:

Teorema do mnimo corte-mximo fluxo

conjectura da reconstruo Problemas de Isomorfismo (casamento de grafos)


Rotulao cannica? Isomorfismo de subgrafos e monomorfismos. Mximo subgrafo comum

Algoritmos importantes

algoritmo de Dijkstra algoritmo de Kruskal algoritmo do vizinho mais prximo algoritmo de Prim.

Generalizaes Num hipergrafo uma aresta pode conectar mais que dois vrtices. Um grafo no-direcionado pode ser visto como um complexo simplicial consistindo de smplices de uma dimenso (as arestas) e smplices de dimenso zero (os vrtices). Ou seja, complexos so generalizaes de grafos que permitem smplices de maiores dimenses. Grafo orientado Origem: Wikipdia, a enciclopdia livre.

Um grafo orientado (direcionado). Um grafo orientado,[1] grafo dirigido,[2] grafo direcionado[3] ou digrafo um par

(algumas vezes

)(edge) de:[4][5][6]

Um conjunto V, cujos elementos so chamados vrtices ou nodos, um conjunto A de pares ordenados de vrtices, chamados arcos, arestas direcionadas, ou setas (e s vezes simplesmente arestas com o conjunto correspondente chamado E ao invs de A).

Ele difere de um grafo no-direcionado comum, em que o ltimo definido em termos de pares no ordenados de vrtices, que so normalmente chamados arestas. Por exemplo, ser possvel ir de um n A para um n B, mas no o contrrio atravs desse arco. s vezes, um digrafo chamado de um digrafo simples para distingu-lo de um multigrafo direcionado (ou multidigrafo ou ainda quiver), em que os arcos constituem um multiconjunto, ao invs de um conjunto, de pares ordenados de vrtices. Alm disso, em um digrafo simples laos no so permitidos. Por outro lado, alguns textos permitem laos, arcos mltiplos, ou ambos em um digrafo.

Terminologia bsica Um arco considerado ser direcionado de para ; chamado de cabea e chamado de cauda do arco; dito ser um sucessor direto de , e dito ser um predecessor direto de . Se um caminho composto por um ou mais arcos sucessivos leva de para , ento dito ser um successor de , e dito ser umpredecessor de . O arco chamado de arco invertido.

Um grafo direcionado G chamado de simtrico se, para cada arco, que pertence G, o arco invertido correspondente tambm pertence G. Um grafo dirigido simtrico sem laos equivalente a um grafo no orientado com os pares de arcos invertidos substitudo por arestas, assim o nmero de arestas igual ao nmero de arcos pela metade. A orientao de um grafo grafo no-direcionado simples obtida atravs da atribuio de um sentido para cada lado. Qualquer grafo direcionado construdo desta forma

chamado de um grafo orientado. A distino entre um grafo direcionado simples e um grafo orientado que se e so vrtices, um grafo direcionado simples permite tanto quanto [5] orientado. como arestas, enquanto apenas uma permitida em um grafo

Um digrafo ponderado um digrafo com pesos atribudos a seus arcos, semelhana de um grafo ponderado. A matriz de adjacncia de um digrafo (com laos e arcos mltiplos) uma matriz inteira com linhas e colunas correspondendo aos nodos do digrafo, onde uma entrada nodiagonal o nmero de arcos do n i para o n j, e a entrada diagonal o nmero de laos no n i. A matriz de adjacncia de um digrafo nica at as permutaes de linhas e colunas. Outra representao de matriz para um dgrafo sua matriz de incidncia. Veja glossrio para mais definies. Graus de sada e graus de entrada

Um digrafo com vrtices rotulados (sada ou entrada) Para um nodo, o nmero de pontos de extremidade adjacente cabea de um n chamado de grau de entrada do nodo e o nmero de pontos de extremidade da cauda o seu grau de sada. O grau de entrada denotado com e o grau de sada como . Um vrtice chamado

chamado de fonte, uma vez que a origem de cada uma das suas

arestas incidentes. Da mesma forma, um vrtice com desumidouro (ou poo).

A frmula da soma dos graus afirma que, para um grafo direcionado

Se para cada nodo, v V, balanceado. Conectividade de digrafos

, o grafo chamado de digrafo

Um digrafo G chamado de fracamente conectado (ou apenas conectado[4]p. 19) se o grafo subjacente no-direcionado obtido atravs da substituio de todas as arestas de G por arestas no direcionadas um grafo conexo. Um digrafo fortemente conectado ou forte se ele contm um caminho orientado de u a v e um caminho orientado de v a upara cada par de vrtices u,v. Os componentes fortes so os subgrafos mximo fortemente conectados. Classes de digrafos

Um grafo direcionado acclico simples Um digrafo acclico um grafo direcionado sem ciclos direcionados. Uma rvore enraizada naturalmente se define como um digrafo acclico, se todas as arestas da rvore subjacentes so dirigidas para longe da raiz.

um torneio com 4 vertices Um torneio um grafo orientado obtido ao se escolher uma direo para cada aresta em um grafo completo no-direcionado. Na teoria dos grupos de Lie, um quiver Q um grafo direcionado servindo como o domnio do e, portanto, caracterizando a forma de, uma representao V definida como um functor, mais especificamente um objeto da categoria functor FinVctKF(Q) onde F(Q) a categoria livre em Qconstituda por caminhos em Q e FinVctK a categoria de espaos vetoriais de dimenso finita sobre um campo K. Representaes de um quiver rtulam seus vrtices com espaos vetoriais e suas arestas (e, portanto, caminhos) de modo compatvel com transformaes lineares entre eles, e transformam atravs das transformaes naturais.

Mquina de estados finitos Uma mquina de estados finitos (FSM - do ingls Finite State Machine) ou autmato finito um modelo matemtico usado para representar programas de computadores oucircuitos lgicos. O conceito concebido como uma mquina abstrata que deve estar em um de seus finitos estados. A mquina est em apenas um estado por vez, este estado chamado de estado atual. Um estado armazena informaes sobre o passado, isto , ele reflete as mudanas desde a entrada num estado, no incio do sistema, at o momento presente. Uma transio indica uma mudana de estado e descrita por uma condio que precisa ser realizada para que a transio ocorra. Uma ao a descrio de uma atividade que deve ser realizada num determinado momento. Mquinas de estado finito podem modelar um grande nmero de problemas, entre os quais a automao de design eletrnico, projeto de protocolo de comunicao, anlise e outras aplicaes de engenharia. Na biologia e na pesquisa da inteligncia artificial, mquinas de estado ou hierarquias de mquinas de estado so, por vezes, utilizadas para descrever sistemas neurolgicos e em lingustica para descrever as gramticas das linguagens naturais.

Conceitos e Vocabulrio Um estado descreve um n de comportamento do sistema em que est espera de uma condio para executar uma transio. Normalmente, um estado introduzido quando o sistema no reage da mesma forma para uma mesma condio. No exemplo de um sistema de rdio de carro, quando se est ouvindo uma estao de rdio, o estmulo "prximo" significa ir para a prxima estao. Mas quando o sistema est no estado de CD, o estmulo "prximo" significa ir para a prxima faixa. O mesmo estmulo desencadeia aes diferentes, dependendo do estado atual. Em algumas representaes de estado finito mquina, tambm possvel associar aes a um estado:

Ao de entrada: o que realizado ao entrar no estado, Ao de sada: o que executado ao sair do estado.

A transio um conjunto de aes a serem executadas quando uma condio for cumprida ou quando um evento recebido. Mquinas de estado so utilizadas para descrever circuitos sequenciais. Diferentemente de um contador que em geral conta eventos enquanto a mquina de estado costuma ser usada para controlar o evento. A mquina est em apenas um estado por vez, este estado chamado de estado atual. Um estado armazena informaes sobre o passado, isto , ele reflete as mudanas desde a entrada num estado, no incio do sistema, at o momento presente. Uma transio indica uma mudana de estado e descrita por uma condio que precisa ser realizada

para que a transio ocorra. Uma ao a descrio de uma atividade que deve ser realizada num determinado momento. Representao

Fig. 1 Exemplo de mquina de estados SDL

Fig. 2 Exemplo de uma mquina de estados finitos simples

Diagrama de estados Mquinas de estados finitos podem ser representadas por meio de um diagrama de estados (ou diagrama de transio de estados). Diversas tabelas de transio de estados so usadas, a mais famosa a mostrada abaixo. A combinao do estado atual (ex: B) com uma condio (ex: Y) determina o prximo estado (ex: C). Atravs do uso das tabelas podemos representar uma de mquina finita de estados que contenha informaes completas sobre as aes. Tabela de transio de estados

Estado Atual Estado A Estado B Estado C Condio

Condio X

...

...

...

Condio Y

...

Estado C

...

Condio Z

...

...

...

Mquinas de estados UML A UML tem uma notao para descrever mquinas de estado. Mquinas de estado UML superam as limitaes das FSMs tradicionais, mantendo os seus principais benefcios. Mquinas de estados UML introduzem os novos conceitos de estados aninhados hierarquicamente e regies ortogonais, enquanto estende a noo de aes. Mquinas de estado UML tm as caractersticas de ambas as mquinas de Mealy e Moore. Elas suportam aes que dependem tanto do estado do sistema quanto da condio, como em mquinas de Mealy, assim como aes de entrada e sada que esto associadas com os estados em vez de transies, como em mquinas de Moore. [editar]Mquinas de estados SDL A SDL um padro da Unio Internacional de Telecomunicaes e uma das melhores linguagens para descrever mquinas de estado, pois inclui smbolos grficos para descrever as aes na transio:

enviar um evento receber um evento iniciar um temporizador

cancelar um temporizador iniciar uma nova mquina de estado simultnea deciso

SDL incorpora tipos bsicos de dados chamado Abstract Data Types, uma linguagem de ao, e uma semntica de execuo, a fim de tornar a mquina de estados finitos executvel. Um exemplo visto na figura 1. [editar]Outros diagramas de estado Existem vrias outras maneiras de se representar uma FSM, assim como mostrado na figura 2. Um exemplo o HDL: Em HDL (Hardware Description Language) ou LDH(Lingugem de Descrio de Hardware) possvel criar mquinas de estado simples e de descrio intuitiva. feito o uso de estados nomeados para os quais no h valores binrios definidos. Em VHDLexistem as palavras-chave como TYPE por exemplo, que define o tipo enumerado em VHDL. O projetista lista em nomes simblicos (diferentes das palavras-chave) todos os possveis valores que um sinal, varivel ou porto que declarado como sendo deste tipo pode assumir. O valor binrio determinado pelo compilador, deixando o trabalho do projetista mais simples. Uso Alm de seu uso na modelagem de sistemas reativos aqui apresentados, autmatos de estados finitos so significativos em diversas reas, incluindo engenharia eltrica, lingustica, cincia da computao, filosofia, biologia, matemtica e lgica. Mquinas de estados finitos so uma classe de autmatos estudada na teoria dos autmatos e teoria da computao. Em cincia da computao, mquinas de estados finitos so amplamente utilizados na modelagem do comportamento do aplicativo, design de sistemas digitais de hardware, engenharia de software, compiladores, protocolos de rede, e o estudo da computao e linguagens. [editar]Classificao Existem dois grupos: Aceitadores/Reconhecedores e Transdutores. [editar]Aceitadores e reconhecedores

Fig. 3 FSM aceitador: analisando a palavra "nice" Aceitadores e reconhecedores produzem uma sada binria, dizendo sim ou no para responder se a entrada aceita pela mquina ou no. Todos os estados do FSM esto a dizer se quer aceitar ou no quer aceitar. No momento em que todas as entradas so processadas, se o estado atual um estado de aceitao, a entrada aceita, caso contrrio rejeitada. Como regra a entrada so smbolos (caracteres); aes no so usadas. O exemplo da figura 3 mostra uma mquina de estados finitos que aceita a palavra "nice". Neste FSM o nico estado de aceitao o nmero 7. A mquina tambm pode ser descrita como a definio de uma linguagem, que conteria todas as palavras aceitas pela mquina e nenhuma das que so rejeitadas; dizemos ento que a linguagem aceita pela mquina. Por definio, linguagens aceitas por FSMs so as linguagens regulares, isto , uma linguagem regular se existe alguma FSM que a aceita. [editar]Estado Inicial O estado inicial geralmente mostrado desenhando uma seta "apontando para ele a partir de qualquer lugar" (Sipser (2006) p. 34). Estados de aceitao (ou Estados Finais)

Fig. 4: Representao de uma FSM. Este exemplo mostra uma FSM que determina se um nmero binrio tem um nmero par ou mpar de 0's, onde S1 um estado de aceitao. Estados de aceitao so aqueles em que a mquina relata que a seqncia de entrada, como processadas at agora, membro da linguagem que ela aceita. geralmente representado por um crculo duplo. Um exemplo de um estado de aceitao aparece na figura 4: um autmato finito determinstico (AFD) que detecta se a seqncia de entrada binria contm um nmero par de 0's. S1 (que tambm o estado inicial) indica o estado no qual um nmero par de 0's foi dado na entrada. S 1 , portanto, um estado de aceitao. Esta mquina vai terminar em um estado de aceitao se a seqncia binria contm um nmero par de 0's (incluindo qualquer seqncia binria que no contenham 0's). Exemplos de cadeias aceitas por este AFD so: epsilon (a cadeia vazia), 1, 11, 11 ..., 00, 010, 1010, 10110, etc. Transdutores Transdutores geram uma sada baseada em uma entrada e/ou um estado utilizando aes. Eles so utilizados para aplicaes de controle. A sada produzida por um contador ou uma mquina de estado pode vir diretamente das sadas do flip-flop, ou alguns circuitos lgicos. As duas variaes so chamadas de modelo Mealy de circuitos sequencial e modelo Moore. No modelo Mealy, os sinais de sada tambm so controlados por sinais de entrada adicionais, enquanto o modelo Moore no possui nenhum controle externos para os sinais de sada gerados.A sada do modelo Moore funo apenas do estado atual do flip-flop. As sadas de um circuito de tipo Moore sero completamente sncronas em relao ao clock do circuito, enquanto sadas produzidas por um circuito de tipo Mealy podem mudar assincronamente. Mquina de Moore A FSM utiliza apenas aes de entrada, i.e. a sada depende somente do estado. A vantagem do modelo de Moore a simplificao do comportamento. Consideremos por exemplo uma FSM de Moore de uma porta de elevador com 4 estados "Aberta", "Fechada", "Abrindo", "Fechando". A mquina de estados reconhece dois comandos: "comando_abrir" e "comando_fechar" que disparam a alterao de estado. A ao de entrada (E:) no estado "Abrindo" liga o motor que abre a porta, a ao de entrada no estado "Fechando" liga o motor na outra direo, fechando a porta. Os estados "Aberta" e "Fechada" no desempenham nenhuma ao. Eles sinalizam para o mundo externo (e.g. para outras mquinas de estado) a situao: "porta est aberta" ou "porta est fechada".

Fig. 5 FSM transdutor: exemplo do modelo de Mealy Mquina de Mealy A FSM utiliza apenas input actions, i.e. a sada depende da entrada e do estado. O uso de uma FSM de Mealy normalmente leva a uma reduo no nmero de estados. Por exemplo uma FSM de Mealy implementando o mesmo comportamento visto no exemplo de Moore (o comportamento depende no modelo de execuo implementado na FSM e ir funcionar e.g. para uma FSM virtual mas no para uma FSM de eventos dirigidos). Existem duas input actions(I:): inicie o motor para fechar a porta se o comando_fechar (sensor_closed na figura 5) chegar e inicie o motor na direo oposta para abrir a porta se o comando_abrir (sensor_opened na figura 5) chegar. Na prtica modelos mistos so muito utilizados. Mais detalhes sobre as diferenas e usos dos modelos de Moore e Mealy, incluindo um exemplo executvel, podem ser encontrados na nota tcnica externa "Modelo de Moore ou Mealy?"(documento em ingls) Determinismo Uma distino adicional est entre autmato determinstico (AFD) e nodeterminstico (AFN). No autmato determinstico, para cada estado h exatamente uma transio para cada entrada possvel. No autmato no determinstico, pode haver nenhuma, uma ou mais de uma transio de um determinado estado para uma entrada possvel. A FSM com apenas um estado chamada de FSM combinatria e utiliza apenas input actions. Este conceito til quando um nmero de FSM devem trabalhar juntas, e onde conveniente considerar uma parte puramente combinatria como uma forma de FSM para se adequar s ferramentas de projeto. Semnticas Alternativas H outros conjuntos de semntica disponvel para representar mquinas de estado. Por exemplo, existem ferramentas para modelagem e lgica para projetar controladores incorporados.[1] Eles combinam mquinas de estado hierrquico, grficos de fluxo e tabelas de verdade para uma linguagem, resultando em um

diferente formalismo e conjunto de semntica.[2] A Figura 6 ilustra esta mistura de mquinas de estado e grficos de fluxo com um conjunto de estados para representar o estado de um cronmetro e um grfico de fluxo para controlar os tiques do relgio. Estes grficos, como mquinas de estado originais de Harel,[3] apoiam os estados hierarquicamente aninhados, regies ortogonais, aes do estado, e as aes de transio.[4] Lgica da FSM

Fig. 6 Lgica da FSM (Mealy) O prximo estado e a sada de uma FSM so uma funo da entrada e do atual estado. A lgica da FSM mostrada na figura 6. Modelo matemtico Dependendo do tipo podem haver vrias definies. Uma mquina de estados finitos tipo aceitador uma quntupla <, S, s0, , F>, onde:

o alfabeto de entrada (um conjunto de smbolos finitos no vazio), S um conjunto finito de estados no vazio, s0 o estado inicial, um elemento de S, a funo de transio de estados: : S x S (em um AFN, seria : S x P(S), isto , iria retornar um conjunto de estados), F o conjunto de estados finais, um (possivelmente vazio) subconjunto de S.

Para ambos os FSMs determinsticas e no-deterministica, convencional para permitir ser uma funo parcial, ou seja, (q, x) no tem que ser definida para cada combinao de q S e x . Se uma FSM M est em um estado q, o smbolo seguinte x e (q, x) no est definida, ento M pode anunciar um erro (ou seja, rejeitar a entrada). Isso til em definies de mquinas de estado em geral, mas menos til ao transformar a mquina. Alguns algoritmos em sua forma padro podem exigir funes totais. Uma mquina de estados finitos uma mquina de Turing restrita em que a cabea s pode "ler" as operaes, e sempre se move da esquerda para a direita.[5] Uma mquina de estados finitos tipo transdutor uma sxtupla <, , S, s0, , >, onde:

o alfabeto de entrada (um conjunto de smbolos finitos no vazio), o alfabeto de sada (um conjunto de smbolos finitos no vazio), S um conjunto finito de estados no vazio, s0 o estado inicial, um elemento de S, a funo de transio de estados: : S x S (em um AFN, seria : S x P(S), isto , iria retornar um conjunto de estados), a funo de sada.

Se a funo de sada uma funo do estado e do alfabeto de entrada (: S x )essa definio corresponde ao modelo de Mealy. Se a funo de sada depende somente do estado (: S ) essa definio corresponde ao modelo de Moore. Se desconsiderarmos o smbolo primeira sada de uma mquina de Moore, (s0), ento ela pode ser facilmente convertida em uma mquina de Mealy de sada equivalente definindo a funo de sada de cada transio da de Mealy (isto , rotulando cada extremidade) com o smbolo de sada dado ao estado de destino da de Moore. A transformao inversa menos simples, porque um estado da mquina de Mealy pode ter rtulos de sada diferentes em suas transies de entrada (extremidades). Cada estado tem de ser dividido em vrios estados da mquina de Moore, uma para cada smbolo de sada incidente.[6] Teoria de autmatos: linguagem formal e gramtica formal Hierarquia Chomsky

Gramtica

Linguagem

Reconhecedor

Tipo-0

Irrestrita

Recursivamente enumervel

Mquina de Turing

--

--

Recursiva

Mquina de Turing que sempre para Autmato linearmente limitado Autmato com pilha Autmato finito

Tipo-1

Sensvel ao contexto Livre de contexto Regular

Sensvel ao contexto

Tipo-2 Tipo-3

Livre de contexto Regular

Implementao Aplicaes de Hardware

Fig. 7 O diagrama de circuito para um contador TTL de 4bits, um tipo de mquina de estados Em um circuito digital, uma FSM pode ser construda utilizando um dispositivo lgico programvel. Um controlador lgico programvel, portas lgicas e flipflops ou relays. Mais especificamente, a implementao de hardware requer um registrador para armazenar o estado das variveis, um bloco de lgica combinacional que determina o estado de transio e um segundo bloco de lgica combinacional que determina a sada da FSM. O mais famoso o controlador de Richards Mquinas de Mealy e de Moore produzem lgica com sada assncrona, porque h um atraso de propagao entre o flip-flop e sada. Isso causa frequncias mais lentas operando na FSM. Uma mquina de Mealy ou de de Moore pode ser convertida para uma FSM tal qual a sada diretamente de um flip-flop, o que faz

a FSM funcionar em freqncias mais altas. Este tipo de FSM chamado s vezes FSM de Medvedev.[7] Um contador a forma mais simples desse tipo de FSM. Aplicaes de Software Os seguintes conceitos so comumente usados para construir aplicaes de software com mquinas de estados finitos:

Programao baseada em autmatos FSM orientada a eventos FSM Virtual (VFSM)

Referncias 1. Tiwari, A. (2002). Formal Semantics and Analysis Methods for Simulink Stateflow Models. 2. Hamon, G. (2005). A Denotational Semantics for Stateflow. International Conference on Embedded Software (pp. 164172). Jersey City, NJ: ACM. 3. Harel, D. (1987). A Visual Formalism for Complex Systems. Science of Computer Programming , 231274. 4. Alur, R., Kanade, A., Ramesh, S., & Shashidhar, K. C. (2008). Symbolic analysis for improving simulation coverage of Simulink/Stateflow models. Internation Conference on Embedded Software (pp. 8998). Atlanta, GA: ACM. 5. BLACK, Paul E. (12 May 2008). "Finite State Machine". Dictionary of Algorithms and Data Structures. U.S. National Institute of Standards and Technology. 6. Automata theory with modern applications. [S.l.]: Cambridge University Press, 2006. 105108 p. ISBN 9780521848879 7. FSM: Medvedev.

Timothy Kam, Synthesis of Finite State Machines: Functional Optimization . Kluwer Academic Publishers, Boston 1997, ISBN 0-7923-9842-4 Tiziano Villa, Synthesis of Finite State Machines: Logic Optimization. Kluwer Academic Publishers, Boston 1997, ISBN 0-7923-9892-0 Carroll, J., Long, D. , Theory of Finite Automata with an Introduction to Formal Languages. Prentice Hall. Englewood Cliffs, 1989. Hopcroft, J.E., Ullman, J.D., Introduction to Automata Theory, Languages and Computation. Addison -Wesley, 1979. Kohavi, Z., Switching and Finite Automata Theory. McGraw-Hill, 1978. Gill, A., Introduction to the Theory of Finite-state Machines. McGraw-Hill, 1962.

Cassandras, C., Lafortune, S., "Introduction to Discrete Event Systems". Kluwer, 1999, ISBN 0-7923-8609-4 Tocci, Ronald J., "Sistemas digitais:Princpios e aplicaes.", 10 edio, 2007

Ligaes externas

Description from the Free On-Line Dictionary of Computing NIST Dictionary of Algorithms and Data Structures entry Hierarchical State Machines

Algoritmo
Origem: Wikipdia, a enciclopdia livre.

Uma animao do algoritmo de ordenao quicksort de uma matriz de valores ao acaso. As barras vermelhas marcam o elemento piv. No incio da animao, estando o elemento para o lado direito, escolhido como o piv. Um algoritmo uma sequncia finita de instrues bem definidas e no ambguas, cada uma das quais pode ser executada mecanicamente num perodo de tempo finito e com uma quantidade de esforo finita[1][2]. O conceito de algoritmo frequentemente ilustrado pelo exemplo de uma receita culinria, embora muitos algoritmos sejam mais complexos. Eles podem repetir passos (fazer iteraes) ou necessitar de decises (tais como comparaes ou lgica) at que a tarefa seja completada. Um algoritmo corretamente executado no ir resolver um problema se estiver implementado incorretamente ou se no for apropriado ao problema. Um algoritmo no representa, necessariamente, um programa de computador[3], e sim os passos necessrios para realizar uma tarefa. Sua implementao pode ser feita por um computador, por outro tipo de autmato ou mesmo por um ser humano. Diferentes algoritmos podem realizar a mesma tarefa usando um conjunto diferenciado de instrues em mais ou menos tempo, espao ou esforo do que outros. Tal diferena pode ser reflexo da complexidade computacional aplicada, que depende de estruturas de dados adequadas ao algoritmo. Por exemplo, um algoritmo para se vestir pode especificar

que voc vista primeiro as meias e os sapatos antes de vestir a cala enquanto outro algoritmo especifica que voc deve primeiro vestir a cala e depois as meias e os sapatos. Fica claro que o primeiro algoritmo mais difcil de executar que o segundo apesar de ambos levarem ao mesmo resultado. O conceito de um algoritmo foi formalizado em 1936 pela Mquina de Turing de Alan Turing e pelo clculo lambda de Alonzo Church, que formaram as primeiras fundaes da Cincia da computao.

Etimologia A palavra bastante interessante, pois numa anlise breve parece que algum quis escrever "logaritmo" mas trocou as primeiras quatro letras. Os historiadores da palavraalgoritmo encontraram a origem no sobrenome, Al-Khwarizmi, do matemtico persa do sculo IX Mohamed ben Musa[4], cujas obras foram traduzidas no ocidente cristo nosculo XII, tendo uma delas recebido o nome Algorithmi de numero indorum, sobre os algoritmos usando o sistema de numerao decimal (indiano). Outros autores, entretanto, defendem a origem da palavra em Al-goreten (raiz - conceito que se pode aplicar aos clculos).[5] Algebra e algorismo tambm formam formas corrompidas da palavra, pois as pessoas esqueciam as derivaes originais. O dicionrio Vollstndiges Mathematisches Lexicon (Leipzig, 1747) refere a palavra "Algorithmus"; nesta designao est combinado as noes de quatro calculos aritmticos, nomeadamente a adio, multiplicao, subtrao e diviso. A frase "algorithmus infinitesimalis" foi na altura utilizado para significar; "maneiras de calcular com quantidades infinitsimas" (pequenas), uma inveno de Leibnitz. Tambm conhecido no meio financeiro, como "algos".[6] [editar]Formalismo

Fluxograma, um exemplo de algoritmo imperativo. O estado em vermelho indica a entrada do algoritmo enquanto os estados em verde indicam as possveis sadas. Um programa de computador essencialmente um algoritmo que diz ao computador os passos especficos e em que ordem eles devem ser executados, como por exemplo, os passos a serem tomados para calcular as notas que sero impressas nos boletins dos alunos de uma escola. Logo, o algoritmo pode ser considerado uma sequncia de operaes que podem ser simuladas por uma mquina de Turing completa. Quando os procedimentos de um algoritmo envolvem o processamento de dados, a informao lida de uma fonte de entrada, processada e retornada sob novo valor aps processamento, o que geralmente realizado com o auxlio de uma ou mais estrutura de dados. Para qualquer processo computacional, o algoritmo precisa estar rigorosamente definido, especificando a maneira que ele se comportar em todas as circunstncias. A corretividade do algoritmo pode ser provada matematicamente, bem como a quantidade assinttica de tempo e espao (complexidade) necessrios para a sua execuo. Estes aspectos dos algoritmos so alvo da anlise de algoritmos. A maneira mais simples de se pensar um algoritmo por uma lista de procedimentos bem definida, na qual as instrues so executadas passo a passo a partir do comeo da lista, uma idia que pode ser facilmente visualizada atravs de um fluxograma. Tal formalizao adota as premissas da programao imperativa, que uma forma mecnica

para visualizar e desenvolver um algoritmo. Concepes alternativas para algoritmos variam em programao funcional e programao lgica. Trmino do algoritmo Alguns autores restringem a definio de algoritmo para procedimentos que eventualmente terminam. Marvin Minsky constatou que se o tamanho de um procedimento no conhecido de antemo, tentar descobri-lo um problema indecidvel, j que o procedimento pode ser executado infinitamente, de forma que nunca se ter a resposta. Alan Turing provou em 1936 que no existe mquina de Turing para realizar tal anlise para todos os casos, logo no h algoritmo para realizar tal tarefa para todos os casos. Tal condio conhecida atualmente como problema da parada. Para algoritmos interminveis o sucesso no pode ser determinado pela interpretao da resposta e sim por condies impostas pelo prprio desenvolvedor do algoritmo durante sua execuo. [editar]Implementao A maioria dos algoritmos desenvolvida para ser implementada em um programa de computador. Apesar disso eles tambm podem ser implementados por outros modos tais como uma rede neural biolgica (tal como no crebro quando efetuamos operaes aritmticas) em circuitos eltricos ou at mesmo em dispositivos mecnicos. Para programas de computador existe uma grande variedade de linguagens de programao, cada uma com caractersticas especficas que podem facilitar a implementao de determinados algoritmos ou atender a propsitos mais gerais. [editar]Anlise de algoritmos Ver artigo principal: Anlise de algoritmos A anlise de algoritmos um ramo da cincia da computao que estuda as tcnicas de projeto de algoritmos e os algoritmos de forma abstrata, sem estarem implementados em uma linguagem de programao em particular ou implementadas de algum outro modo. Ela preocupa-se com os recursos necessrios para a execuo do algoritmo tais como o tempo de execuo e o espao de armazenamento de dados. Deve-se perceber que para um dado algoritmo pode-se ter diferentes quantidades de recursos alocados de acordo com os parmetros passados na entrada. Por exemplo, se definirmos que o fatorial de um nmero natural igual ao fatorial de seu antecessor multiplicado pelo prprio nmero, fica claro que a execuo de fatorial(10) consome mais tempo que a execuo de fatorial(5). Um meio de exibir um algoritmo a fim de analis-lo atravs da implementao por pseudocdigo em portugus estruturado. O exemplo a seguir um algoritmo em portugus estruturado que retorna (valor de sada) a soma de dois valores (tambm

conhecidos como parmetros ou argumentos, valores de entrada) que so introduzidos na chamada dafuno: Algoritmo "SomaDeDoisValores"; varivel: SOMA,A,B: inteiro; inicio Escreva("Digite um numero"); Leia(A); escreva("digite outro numero"); leia(B); SOMA A + B; escreva(SOMA); fim. Classificao Classificao por implementao Pode-se classificar algoritmos pela maneira pelo qual foram implementados.

Recursivo ou iterativo - um algoritmo recursivo possui a caracterstica de invocar a si mesmo repetidamente at que certa condio seja satisfeita e ele terminado, que um mtodo comum em programao funcional. Algoritmos iterativos usam estruturas de repetio tais como laos, ou ainda estruturas de dados adicionais tais como pilhas, para resolver problemas. Cada algoritmo recursivo possui um algoritmo iterativo equivalente e vice-versa, mas que pode ter mais ou menos complexidade em sua construo.

Lgico - um algoritmo pode ser visto como uma deduo lgica controlada. O componente lgico expressa os axiomas usados na computao e o componente de controle determina a maneira como a deduo aplicada aos axiomas. Tal conceito base para a programao lgica. Serial ou paralelo - algoritmos so geralmente assumidos por serem executados instruo a instruo individualmente, como uma lista de execuo, o que constitui um algoritmo serial. Tal conceito base para a programao imperativa. Por outro lado existem algoritmos executados paralelamente, que levam em conta as arquiteturas de computadores com mais de um processador para executar mais de uma

instruo ao mesmo tempo. Tais algoritmos dividem os problemas em subproblemas e o delegam a quantos processadores estiverem disponveis, agrupando no final o resultado dos subproblemas em um resultado final ao algoritmo. Tal conceito base para a programao paralela. De forma geral, algoritmos iterativos so paralelizveis; por outro lado existem algoritmos que no so paralelizveis, chamados ento problemas inerentemente seriais.

Determinstico ou no-determinstico - algoritmos determinsticos resolvem o problema com uma deciso exata a cada passo enquanto algoritmos no-determinsticos resolvem o problema ao deduzir os melhores passos atravs de estimativas sob forma de heursticas. Exato ou aproximado - enquanto alguns algoritmos encontram uma resposta exata, algoritmos de aproximao procuram uma resposta prxima a verdadeira soluo, seja atravs de estratgia determinstica ou aleatria. Possuem aplicaes prticas sobretudo para problemas muito complexos, do qual uma resposta correta invivel devido sua complexidade computacional.

Classificao por paradigma Pode-se classificar algoritmos pela metodologia ou paradigma de seu desenvolvimento, tais como:

Diviso e conquista - algoritmos de diviso e conquista reduzem repetidamente o problema em sub-problemas, geralmente de forma recursiva, at que o sub-problema pequeno o suficiente para ser resolvido. Um exemplo prtico o algoritmo de ordenao merge sort. Uma variante dessa metodologia o decremento e conquista, que resolve um sub-problema e utiliza a soluo para resolver um problema maior. Um exemplo prtico o algoritmo para pesquisa binria.

Programao dinmica - pode-se utilizar a programao dinmica para evitar o re-clculo de soluo j resolvidas anteriormente. Algoritmo ganancioso - um algoritmo ganancioso similar programao dinmica, mas difere na medida em que as solues dos sub-problemas no precisam ser conhecidas a cada passo, uma escolha gananciosa pode ser feita a cada momento com o que at ento parece ser mais adequado.

Programao linear Reduo - a reduo resolve o problema ao transform-lo em outro problema. chamado tambm transformao e conquista.

Busca e enumerao - vrios problemas podem ser modelados atravs de grafos. Um algoritmo de explorao de grafo pode ser usado para caminhar pela estrutura e retornam informaes teis para a resoluo do problema. Esta categoria inclui algoritmos de busca e backtracking.

Paradigma heurstico e probabilstico - algoritmos probabilsticos realizam escolhas aleatoriamente. Algoritmos genticos tentam encontrar a soluo atravs de ciclos de mutaes evolucionrias entre geraes de passos, tendendo para a soluo exata do problema. Algoritmos heursticos encontram uma soluo aproximada para o problema.

Classificao por campo de estudo Cada campo da cincia possui seus prprios problemas e respectivos algoritmos adequados para resolv-los. Exemplos clssicos so algoritmos de busca, de ordenao, de anlise numrica, de teoria de grafos, de manipulao de cadeias de texto, de geometria computacional, de anlise combinatria, de aprendizagem de mquina, de criptografia, decompresso de dados e de interpretao de texto. Classificao por complexidade Ver artigo principal: Complexidade computacional Alguns algoritmos so executados em tempo linear, de acordo com a entrada, enquanto outros so executados em tempo exponencial ou at mesmo nunca terminam de serem executados. Alguns problemas possuem mltiplos algoritmos enquanto outros no possuem algoritmos para resoluo. Referncias 1. Cruz, Adriano Joaquim de Oliveira (1 de janeiro de 1997). Algoritmos. Ncleo de Computao Eletrnica da Universidade Federal do Rio de Janeiro. Pgina visitada em 12 de janeiro de 2012. 2. Linder, Marcelo Santos. Programao para Computao. Universidade Federal do Vale de So Francisco. Pgina visitada em 12 de janeiro de 2012. 3. Introduo programao cientfica. Grupo de Estudos sobre Movimento Humano (20 de abril de 2011). Pgina visitada em 12 de janeiro de 2012.

4. Loureiro, Antnio Alfredo Ferreira (1 de janeiro de 2010). Anlise de complexidade. Departamento de Computao da Universidade Federal de Ouro Preto. Pgina visitada em 12 de janeiro de 2012. 5. TAVARES, P. de Campos; Algoritmo, in "Enciclopdia Verbo Luso-Brasileira da Cultura, Edio Sculo XXI", Volume II, Editorial Verbo, Braga, Janeiro de 1998 ISBN 972-22-1864-6. 6. algoritmos e mercados Acedido em 20 de julho 2012 Bibliografia

Algoritmos e Programao - Teoria e Prtica: para universitrios e profissionais de informtica: Novatec Editora. ISBN 85-7522-073-X Donald E. Knuth (1973) The Art of Computer Programming, Volume 1: Fundamental Algorithms (2 edio). Addison-Wesley, ISBN 0-20103809-9 (em ingls)

Ver tambm

Estrutura de dados Autmato Teoria da computao Algoritmo probabilstico Algoritmo de Euclides

Ligaes externas

O que algoritmo? (em portugus) - Revista Nova Escola Dictionary of Algorithms and Data Structures Curso de Algoritmos Computacionais (em portugus) - Livro Gratuito de Algoritmos Curso sobre Algoritmos em Portugus Estruturado: Curso desenvolvido pelo criador do IPE (listado abaixo), com diversos exemplos. Interpretador de Portugus Estruturado: O IPE capaz de executar algoritmos em Portugus Estruturado diretamente usando a linguagem definida na pgina do interpretador. Um manual acompanha o aplicativo com exemplos de algoritmos. Aprenda a Programar: Srie de artigos didticos ensinando Portugus Estruturado Exerccios resolvidos de algoritmos para estudo

Grafo nulo Origem: Wikipdia, a enciclopdia livre.

Grafo nulo vrtices arestas 0 0

Automorfismos 1 No campo da matemtica da teoria dos grafos, o grafo nulo ou o grafo vazio ou o grafo sem nenhum vrtice e (portanto) sem arestas, ou qualquer grafo sem arestas. O grafo nulo (no sentido original) o objeto inicial na categoria de grafos, de acordo com algumas definies de categoria de grafos. No tendo nenhum vrtice, o grafo nulo, portanto, tambm no tem componentes ligados. Assim, embora o grafo nulo seja umafloresta (um grafo sem ciclos), no uma rvore, uma vez que as rvores tm componente ligados. Grafo sem arestas Grafo sem arestas vrtices arestas n 0

Automorfismos n! Nmero cromtico Propriedades Notao Alguns autores entendem que um termo melhor para o ltimo sentido (V, { }) para qualquer conjunto V o mais explcito grafo sem arestas. Assim se reserva o termo grafo nulo para o primeiro sentido: um grafo sem quaisquer vrtices. Outros, ainda, fazem essa distino, aplicando o rtulo vazio para esses grafos sem arestas. O grafo sem arestas de n-vrtices o grafo complementar para o grafo completo por isso comumente denotado como . ,e 1 Integral Simtrico

Mesmo que esta definio forneca uma base slida para a definio de certas operaes sobre grafos (por exemplo: decomposio) considerando-se grafos como conjuntos de

vrtices e arestas (V,E), esta definio levanta um problema na singularidade do elemento nulo dos grafos.

Grafo regular Origem: Wikipdia, a enciclopdia livre. Famlias de grafos definidos por seus automorfismos distnciatransitivo distnciaregular fortemente regular

simtrico (arcotransitivo)

ttransitivo, t 2

(se conectado)

transitivo nos vrtices e nas arestas

arestatransitivo e regular

arestatransitivo

vrticetransitivo

regular

grafo de Cayley

anti-simtrico

assimtrico

Em Teoria dos grafos, um grafo regular um grafo onde cada vrtice tem o mesmo nmero de adjacncias, i.e. cada vrtice tem o mesmo grau ou valncia. Um grafo direcionado regular tambm deve satisfazer a condio mais forte de que o grau de

entrada e o grau de sada de cada vrtice sejam iguais uns aos outros.[1] Um grafo regular com vrtices de grau k chamado um grafok-regular ou grafo regular de grau k. Grafos regulares de grau no mximo 2 so fceis de classificar: Um grafo 0-regular composto por vrtices desconectados, um grafo 1-regular consiste de arestas desconectadas, e um grafo 2-regular consiste de ciclos desconectados. Um grafo 3-regular conhecido como um grafo cbico. Um grafo fortemente regular um grafo regular, onde cada par de vrtices adjacentes tem o mesmo nmero l de vizinhos em comum, e cada par de vrtices no-adjacentes tem o mesmo nmero n de vizinhos em comum. Os menores grafos que so regulares, mas no fortemente regulares so os grafos ciclos e os grafos circulantes em 6 vrtices. O grafo completo fortemente regular para qualquer .

Um teorema de Nash-Williams diz que cada k-grafo regular em 2k + 1 vrtices tem um ciclo hamiltoniano.

grafo 0-regular

grafo 1-regular

grafo 2-regular

grafo 3-regular Propriedades algbricas Seja A a matriz de adjacncia de um grafo. Ento, o grafo regular se e somente se um autovetor de A..[2] Seu autovalor ser o grau constante do grafo. Autovetores correspondentes a outros autovalores so ortogonais a , assim como para tais autovetores multiplicidade 1.[2] Referncias 1. Chen, Wai-Kai. Graph theory and its engineering applications. [S.l.]: World Scientific, 1997. 29 p. ISBN 978-981021859-1 2. a b Cvetkovi, D. M.; Doob, M.; and Sachs, H. Spectra of Graphs: Theory and Applications, 3rd rev. enl. ed. New York: Wiley, 1998. Ligaes externas , ns temos .

Um grafo regular de grau k conectado se e somente se o autovalor k tem uma

Multigrafo Origem: Wikipdia, a enciclopdia livre.

Multigrafo com laos (azul) e arestas mltiplas (vermelho)

Multigrafo ou pseudografo um grafo no dirigido que pode possuir arestas mltiplas (ou paralelas), ou seja, arestas com mesmos ns finais. Assim, dois vrtices podem estar conectados por mais de uma aresta. Formalmente, um multigrafo G um par ordenado

, sendo

um conjunto de vrtices ou ns, um multiconjunto de pares no-ordenados de vrtices, chamado arestas ou linhas.

Alguns autores tambm consideram multigrafos aqueles que tm laos, isto , uma aresta que conecta um vrtice a ele mesmo[1]; outros chamam estes de pseudografos, reservando o termo multigrafo para os casos em que no h laos[2]. Multigrafos podem ser usados, por exemplo, pra modelar as possveis conexes de vo oferecidas por uma linha area. Nesse caso o pseudografo seria um grafo dirigido com pares de arestas paralelas dirigidas conectando cidades para mostrar que possvel voar para e a partir destas locaes. Um multidgrafo um dgrafo (grafo com arestas dirigidas) em que pode-se ter arestas mltiplas. Um multidgrafo

um par ordenado

, sendo

um conjunto de vrtices ou ns, um multiconjunto de pares ordenados de vrtices, chamado arestas dirigidas, arcos ou flechas.

Um multigrafo misto pode ser definido do mesmo jeito que um grafo misto (com arestas que podem ser dirigidas ou no). Etiquetas Multigrafos e multidgrafos podem suportar a noo de grafos etiquetados, de modo similar. Contudo no h consenso na terminologia nesse caso. As definies de multigrafos e multidgrafos etiquetados so similares, e definiremos apenas o ltimo: Um multidgrafo etiquetado um grafo etiquetado com arcos etiquetados. Formalmente: Um multidgrafo etiquetado G um multigrafo com ns etiquetados e arcos. Formalmente uma 8-tupla

, em que: um multiconjunto de arcos.

um conjunto de ns e e

so alfabetos finitos de ns e etiquetas de arcos disponveis. so duas funes indicando o n de origem e o de

e destino de um arco.

e ns e arestas.

so duas funes descrevendo a etiquetagem dos

Notas 1. Para exemplos, veja. Bollobas, p. 7 and Diestel, p. 25. 2. Graphs, Colourings and the Four-Colour Theorem, by Robert A. Wilson, 2002, ISBN 0198510624, p. 6 Referncias

http://www.utm.edu/departments/math/graph/glossary.html#multigraph Diestel, Reinhard; Graph Theory, Springer; 2nd edition (February 18, 2000). ISBN 0387-98976-5.

Lao (teoria dos grafos) Origem: Wikipdia, a enciclopdia livre.

Um grafo com um lao no vrtice 1 Em teoria dos grafos, um lao ou auto-loop (em ingls: loop, self-loop ou buckle) uma aresta que conecta um vrtice a ele mesmo. Um grafo simples, no contm nenhum lao. Dependendo do contexto, um grafo ou um multigrafo pode ser definido de forma a permitir ou proibir a presena de laos (muitas vezes em combinao com a permisso ou proibio do uso de arestas mltiplas entre os mesmos vrtices:

Onde os grafos so definidos de modo a permitir laos e arestas mltiplas, um grafo sem laos muitas vezes chamado demultigrafo.[1][2][3]

Onde os grafos so definidos de modo a no permitir laos e arestas mltiplas, um multigrafo ou pseudografo muitas vezes definido como um grafo que pode ter laos e arestas mltiplas.[4][5]

Grau Para um grafo no direcionado, o grau de um vrtice igual ao nmero de vrtices adjacentes. Um caso especial um lao, que acrescenta dois para o grau. Isso pode ser entendido se deixando cada conexo da contagem de arestas do lao como seu prprio vrtice adjacente. Em outras palavras, um vrtice com um lao "v" a si mesmo como um vrtice adjacente de ambas as extremidades da aresta, assim, se soma dois e no um, para o grau. Para um grafo direcionado, um lao soma um ao grau de entrada e um ao grau de sada Ver tambm

Ciclo (teoria dos grafos)

Referncias 1. BALAKRISHNAN, V. K.. Graph Theory (em ingls). New York: McGraw-Hill, 1997. ISBN 0-07-005489-4 2. GROSS, Jonathon L.;YELLEN, Jay (eds.). Handbook of Graph Theory (em ingls). [S.l.]: CRC, 2003. ISBN 1-58488-090-2 3. ZWILLINGER, Daniel. CRC Standard Mathematical Tables and Formulae (em ingls). 31 ed. [S.l.]: Chapman & Hall/CRC, 2002. ISBN 1-58488-291-3 4. BOLLOBS, Bla. Modern Graph Theory (em ingls). 1 ed. New York/Berlin: Springer, 2002. ISBN 0-387-98488-7 5. DIESTEL, Reinhard. Graph Theory (em ingls). 2 ed. New York/Berlin: Springer, 2000. ISBN 0-387-98976-5 Ligaes externas

Grafos - Definies (UFSC)

Ciclo (teoria de grafos) Origem: Wikipdia, a enciclopdia livre. (Redirecionado de Ciclo (teoria dos grafos))

Um ciclo em teoria de grafos "um passeio de comprimento mnimo trs, em que o primeiro e o ltimo vrtice coincidem, mas nenhum outro vrtice repetido" [1]. Um ciclo uma cadeia simples e fechada[2][3]. Um ciclo uma cadeia fechada[2]. O termo ciclo pode tambm ser usado para se referir ao grafo que contm os vrtices e arestas de um ciclo na definio acima[1]. Definio matemtica Matematicamente: Seja G um grafo. Um ciclo em G um caminho {v1, v2, . . ., vk, vk+1} sendo v1 = vk+1, 3 k[4] Referncias 1. a b SCHEINERMAN, Edward. Matemtica Discreta: Uma Introduo. 2 ed. So Paulo: Cengage Learning, 2011. p. 473. 2. a b FURTADO, Antonio Luz. Teoria dos Grafos. Rio de Janeiro, Guanabara: LTC/Editora da USP, 1973. CDD 511.2076 3. BOAVENTURA NETTO, Paulo Oswaldo. Grafos. So Paulo: Edgard Blcher, 2001. ISBN 85-212-0292-X 4. SZWARCFITER, Jayme Luiz. Grafos e algoritmos computacionais. Rio de Janeiro: Campus, 1988. ISBN 85-7001-341-8

Vrtice de corte (teoria dos grafos) Origem: Wikipdia, a enciclopdia livre.

Um grafo no-dirigido com n=5 vertices en-2=3 vrtices de corte; os vrtices de corte (em vermelho) so aqueles que no esto em ambos as pontas

Um grafo no-dirigido sem vrtices de corte Em matemtica e cincia da computao, um vrtice de corte ou ponto de articulao[1] um vrtice de um grafo tal que a remoo deste vrtice provoca um aumento no nmero de componentes conectados. Se o grafo era conectado antes da remoo do vrtice, ele ser desconectado depois. Qualquer grafo conectado com um vrtice de corte tem uma conectividade de 1. Embora bem definidos, mesmo para grafos dirigidos (digrafos), os vrtices de corte so utilizados principalmente em grafos no dirigidos. Em geral, um grafo conectado, nodirigido, com n vrtices no pode ter mais do que n-2 vrtices de corte. Naturalmente, um grafo pode no ter nenhum vrtice de corte. Uma ponte uma aresta anloga a um vrtice de corte, ou seja, a remoo de uma ponte aumenta o nmero de componentes conectados do grafo.

Encontrando Vrtices de corte Um algoritmo trivial como se segue:

C = conjunto vazio (no final do algoritmo ele ir conter os vrtices de corte) a = nmero de componentes em G (encontrado usando uma Busca em profundidade/Busca em largura) para cada i em V com arestas incidentes b = nmero de componentes em G com i removido se b > a i um vrtice de corte C = C + {i} fimse fimpara Um algoritmo com o tempo muito melhor execuo uma Busca em profundidade. Algoritmo em C++ #include <algorithm>
[2]

conhecido usando

#include <set> #include <vector> #include <cstring> #define MAX 100 using namespace std; int n, time_s, visit[MAX]; vector<int> ADJ[MAX]; int dfs(int u, set<int>& ans){ int menor = visit[u] = time_s++; int filhos = 0; for(int i = 0; i<ADJ[u].size(); i++){ if(visit[ADJ[u][i]]==0){ filhos++; int m = dfs(ADJ[u][i], ans); menor = min(menor,m); if(visit[u]<=m && (u!=0 || filhos>=2)){ ans.insert(u); } }else{ menor = min(menor, visit[ADJ[u][i]]); } } return menor; } set<int> get_articulacoes(){ set<int> ans; time_s = 1; memset(visit, 0, n*sizeof(int)); dfs(0,ans); return ans; } Teste seu cdigo em: http://br.spoj.pl/problems/MANUT/ [editar]Vrtices de corte em rvores Um vrtice v de uma rvore G um vrtice de corte de G somente se o grau do vrtice maior que 1. Referncias 1. GERSTING, Judith L.. Fundamentos Matemticos para a Cincia da Computao. 3 ed. Rio de Janeiro: LTC, 1993. 307 p. ISBN 85-216-1041-6 2. Slides apresentando o algoritmo O(n+m)

rvore (grafo)

Uma rvore com 5 arestas e 6 vrtices. Na teoria dos grafos, uma rvore um grafo conexo (existe caminho entre quaisquer dois de seus vrtices) e acclico (no possui ciclos)[1][2]. Caso o grafo seja acclico mas no conexo, ele dito uma floresta. Uma floresta tambm definida como uma unio disjunta de rvores. Toda rvore um grafo, mas nem todo grafo uma rvore. Toda rvore um grafo bipartido e planar. Todo grafo conexo possui pelo menos uma rvore de extenso associada, composta de todos os seus vrtices e algumas de suas arestas. Propriedades Seja G um grafo. G uma rvore se satisfaz as seguintes condies:

G conexo e h exatamente um caminho entre dois vrtices quaisquer. J em uma floresta, h no mximo um caminho entre dois vrtices, devido no-conectividade. G acclico, e um simples ciclo formado se qualquer aresta for adicionada a G. G conexo, e deixar de ser conexo se qualquer aresta for removida de G. G conexo, acclico e tem n 1 arestas.

Definies

Uma rvore denominada enraizada se um vrtice escolhido como especial. Esse vrtice chamado raiz. Uma rvore que no enraizada denominada livre. Um grafo G uma rvore se e somente se existir um nico caminho entre cada par de vrtices de G[2].

Referncias

1. BARBOSA, Ruy Madsen. Combinatria e Grafos. So Paulo: Livraria Nobel, 1975. p. 196. 2 vol. vol. 2. 2. a b SZWARCFITER, Jayme Luiz. Grafos e algoritmos computacionais. Rio de Janeiro: Campus, 1988. p. 43-45. ISBN 85-7001-341-8 Este artigo sobre Informtica um esboo. Voc pode ajudar a Wikipdia expandindo-o. Este artigo sobre matemtica um esboo. Voc pode ajudar a Wikipdia expandindo-o.

Clique Origem: Wikipdia, a enciclopdia livre. Nota: H uma pagina de Clique (desambiguao)

Um grafo com 23 cliques de 1-vrtice (its vertices), 42 cliques de 2-vrtices (suas arestas), 19 cliques de 3-vrtices (os tringulos em azul claro), e 2 cliques de 4-vrtices (azul escuro). Seis das arestas e 11 dos tringulos formam cliques maximais. As duas 4cliques em azul escuro so tanto mximas quanto maximais, e o nmero de clique do grafo 4. Na rea da matemtica da teoria dos grafos, uma clique em um grafo no-orientado um subconjunto de seus vrticestais que cada dois vrtices do subconjunto so conectados por uma aresta. Uma clique em um grafo G um subgrafo de G que completo. Eles
[1] recebem a notao . O tamanho de uma clique igual a cardinalidade de seu conjunto de vrtices. Por exemplo no grafo G(V,E) sendo V seu conjunto de vrtices e E o

de arestas, temos que: Se V={1,2,3,4,5} e E={(1,2),(1,3),(1,4),(1,5),(2,3),(2,4),(3,4),(4,5)}, o subgrafo induzido pelos vrtices (1,2,3,4) uma clique de tamanho 4. Ver tambm

Grafo completo

Referncias 1. BOAVENTURA NETTO, Paulo Oswaldo. Grafos. So Paulo: Edgard Blcher, 2001. ISBN 85-212-0292-X

Conjunto independente

Um conjunto independente num grafo. Na teoria dos grafos, um conjunto independente de um grafo um conjunto de vrtices de tal que no existem dois vrtices adjacentes contidos em S. Em outras palavras, se e so vrtices quaisquer de um conjunto independente, no h aresta entre e . Todo grafo tem ao menos um conjunto independente: o conjunto vazio. Um grafo pode ter vrios conjuntos independentes distintos. Se S um conjunto independente de G e no existe um conjunto independente de G maior que S, diz-se que S um conjunto independente mximo de G. O problema de, dado um grafo G, determinar se h um conjunto independente de tamanho k um problema NP-completo. [editar]Definio Conjunto independente de Caractersticas As seguintes indicaes so equivalentes:

um conjunto independente de uma cobertura de vertices de um conjunto independente de

Ver

Teoria dos grafos Este artigo sobre uma Teoria um esboo. Voc pode ajudar a Wikipdia expandindo-o.

Grafo planar Origem: Wikipdia, a enciclopdia livre. Na teoria dos grafos, um grafo planar um grafo que pode ser representado no plano de tal forma que suas arestas no se cruzem. Por exemplo, os dois grafos seguintes so planares:

Teorema de Kuratowski Segundo o Teorema de Kuratowski, um grafo planar no pode apresentar nem o grafo completo K5 nem o grafo bipartido K3,3 como subgrafos. A prova de que o K3,3 no planar pode ser feita de duas formas: por induo e por construo, enquanto a do K 5 feita apenas por construo. No possvel redesenhar estes grafos sem que suas arestas se cruzem.

Representao do K5 (um grafo completo com 5 vrtices).

Representao do K3,3 (um grafo bipartido completo com 6 vrtices). Teorema das quatro cores O teorema das quatro cores afirma que qualquer grafo planar 4-colorvel (ou 4-partvel).

Ver tambm

Teorema de Kuratowski Teorema das quatro cores

You might also like