Complexidade de tempo de pesquisa de um gráfico *


9

Alguma confusão sobre complexidade de tempo e A *.

De acordo com o A * Wiki, a complexidade do tempo é exponencial na profundidade da solução (caminho mais curto):

A complexidade do tempo de A * depende da heurística. No pior caso de um espaço de pesquisa ilimitado, o número de nós expandidos é exponencial na profundidade da solução (o caminho mais curto) d: , em que é o fator de ramificação (o número médio de sucessores por Estado).O(bd)b

O comentário a esta resposta aceita ressalta que faz mais sentido fornecer a complexidade em termos do tamanho do gráfico e, portanto, deve serO((|V|+|E|)euog|V|)

Obviamente, se a heurística atribuir um valor de 0 a cada nó, A * se tornará o algoritmo de Dijkstra e qualquer heurística de custo uniforme desativará essencialmente a heurística.

Se assumirmos que a heurística é (e consistente), faria sentido que o pior caso seja essencialmente degradante A * do algoritmo de Dijkstra, que tem complexidadeO(1 1)

O(|E|+|V|registro|V|)

com uma implementação de fila com prioridade mínima (pilha de Fibonacci).

Estou errado?

Qualquer livro, etc., que eu tenho procurado, sempre dá a complexidade em termos da profundidade da solução

Respostas:


11

Essas são basicamente duas perspectivas diferentes ou duas maneiras diferentes de visualizar o tempo de execução. Ambos são válidos (nenhum dos dois está incorreto), mas é sem dúvida mais útil nas configurações que normalmente surgem na IA.O(bd)

Na comunidade de algoritmos e na teoria da CS, as pessoas tendem a gostar de contar o tempo de execução em função do número de vértices e arestas no gráfico. Por quê? Nesse contexto, o pior caso de tempo de execução é o que faz mais sentido; Além disso, nos problemas normalmente considerados nessa comunidade, na pior das hipóteses, precisamos examinar o gráfico inteiro; portanto, você normalmente não pode esperar fazer melhor que .O(|V|+|E|)

Na comunidade da IA, as pessoas tendem a contar o tempo de execução de maneira diferente. Eles costumam considerar um tipo específico de gráfico: uma árvore com fator de ramificação . Além disso, nas situações que surgem lá, o gráfico geralmente é infinito ou muito grande. Normalmente, nos esforçamos para evitar examinar todo o gráfico - esse geralmente é um dos principais objetivos dos algoritmos. Assim, contando a complexidade em termos deenão faz sentido:pode ser infinito e, de qualquer forma, não planejamos examinar todo o gráfico; portanto, tudo o que importa é o número de vértices que realmente visitamos, não o número que pode existir em outro lugar, mas com o qual não nos importamos.b|V||E||V|

Portanto, para as situações que frequentemente surgem na comunidade de IA, é mais significativo medir o tempo de execução em termos do fator de ramificação da árvore ( ) e da profundidade do nó da meta ( ). Normalmente, uma vez que encontramos o nó da meta, o algoritmo para. Em uma árvore, se examinarmos todos os vértices em profundidade antes de encontrarmos o nó de objetivo, acabaremos visitando os vértices antes de parar. Assim, se você preferir, poderia pensar nisso como visitar um subconjunto do gráfico com (onde agora inclui apenas os vértices que visitamos) e ( inclui apenas as arestas que examinamos) e você pode pensar em umbddO(bd)|V|=O(bd)V|E|=O(bd)EO(bd)Algoritmo -time como aquele cujo tempo de execução é ... embora isso seja um pouco abusivo donotação. De qualquer forma, espero que você possa ver por que é mais informativo que nesse contexto.O(|V|+|E|)|V|,|E|O(bd)O(|V|+|E|)


1

É comum na comunidade de pesquisa combinatória definir espaços de pesquisa implicitamente , isto é, como um conjunto de estados e transições entre eles - em oposição a explicitamente , isto é, como conjuntos concretos de vértices e arestas. Em espaços de pesquisa implícitos, estados podem ser representados como vértices e transições como arestas, no entanto, em muitos casos, o conjunto prático de estados pode não ter limites finitos e, portanto, o número de arestas e vértices nem sempre pode ser definido com cardinalidades finitas (praticamente ou teoricamente). Assim, para muitas aplicações, faz mais sentido definir o desempenho em termos do fator de ramificação , em oposição às cardinalidades de vértices e arestas.b

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.