O documento discute algoritmos para encontrar caminhos de menor custo em grafos. Apresenta o algoritmo de Dijkstra para grafos sem arestas de custo negativo e o algoritmo de Bellman-Ford para grafos que podem conter ciclos de custo negativo, podendo detectá-los. Explica a implementação e análise da complexidade de ambos, com exemplos de problemas clássicos onde podem ser usados.
Treinamento Para Competições de Programação - All Pairs Shortest Paths - O Al...Murilo Adriano Vasconcelos
O documento descreve o algoritmo de Floyd-Warshall para encontrar os caminhos mais curtos entre todos os pares de vértices em um grafo. O algoritmo funciona iterando sobre cada vértice como intermediário e atualizando as distâncias entre pares de vértices se o caminho através do vértice intermediário for mais curto. Isso é feito em O(N3) tempo e O(N2) espaço para armazenar a matriz de adjacência do grafo. O algoritmo pode ser usado para problemas como encontrar o fecho transitivo de um grafo direcionado.
O documento descreve o algoritmo de Bellman-Ford para encontrar o caminho mínimo em grafos. O algoritmo funciona em três etapas: inicialização, relaxamento e verificação de ciclos negativos. Ele pode lidar com grafos cujas arestas possuem pesos negativos, ao contrário do algoritmo de Dijkstra. A complexidade do algoritmo é O(AV) onde A é o número de arestas e V o número de vértices.
Complexidade do Algoritmo: Caminho mínimo Floyd WarshallLucas Vinícius
O algoritmo de Floyd-Warshall encontra os caminhos mínimos entre todos os pares de vértices de um grafo ponderado. Ele preenche uma matriz com os tamanhos dos menores caminhos, iterando sobre cada vértice e atualizando a matriz. Sua complexidade é O(n3), onde n é o número de vértices do grafo.
O documento discute algoritmos gulosos e grafos. Apresenta conceitos como árvore espalhada mínima, subestrutura ótima, escolha gulosa e algoritmos como Prim e Kruskal para encontrar a árvore espalhada mínima de um grafo. Também aborda problemas de caminho mínimo e o algoritmo de Dijkstra para resolver o problema da fonte única.
Caminhos Mínimos - Algoritmo de DijkstraMarcos Castro
O documento descreve como encontrar o caminho mínimo entre duas cidades em um grafo usando o algoritmo de Dijkstra. O algoritmo iterativamente encontra os vértices mais próximos de um vértice inicial e mantém os caminhos mínimos conhecidos em uma estrutura de dados.
Este documento apresenta uma lista de exercícios de óptica com suas respectivas soluções. As principais informações incluem:
1) Cálculos envolvendo potência em dB, fótons, frequência e canais de voz.
2) Aplicação das leis de Snell, lentes e difração.
3) Cálculos envolvendo banda óptica, dispersão e taxa de transmissão em fibras ópticas.
4) Ângulos críticos, reflexão total e modos em guias de onda.
Este documento discute o problema de fluxo a custo mínimo em grafos. Ele resume o problema, explica como identificar se uma solução é viável, e descreve o algoritmo Successive Shortest Path (SSP) para resolver o problema em até 3 frases:
O documento discute o problema de fluxo a custo mínimo em grafos, explicando como transformar o grafo para garantir que o fluxo de entrada é igual ao de saída e como usar o algoritmo SSP para encontrar sucessivamente os caminhos de menor custo entre os vértices origem e destino até que não h
1) O documento discute funções vetoriais e suas propriedades como domínio, imagem e continuidade.
2) Apresenta exemplos de curvas no espaço como helicóide e cicloide definidas por funções vetoriais.
3) Discutem derivadas de funções vetoriais e suas interpretações geométricas em termos de velocidade e aceleração de uma partícula.
Treinamento Para Competições de Programação - All Pairs Shortest Paths - O Al...Murilo Adriano Vasconcelos
O documento descreve o algoritmo de Floyd-Warshall para encontrar os caminhos mais curtos entre todos os pares de vértices em um grafo. O algoritmo funciona iterando sobre cada vértice como intermediário e atualizando as distâncias entre pares de vértices se o caminho através do vértice intermediário for mais curto. Isso é feito em O(N3) tempo e O(N2) espaço para armazenar a matriz de adjacência do grafo. O algoritmo pode ser usado para problemas como encontrar o fecho transitivo de um grafo direcionado.
O documento descreve o algoritmo de Bellman-Ford para encontrar o caminho mínimo em grafos. O algoritmo funciona em três etapas: inicialização, relaxamento e verificação de ciclos negativos. Ele pode lidar com grafos cujas arestas possuem pesos negativos, ao contrário do algoritmo de Dijkstra. A complexidade do algoritmo é O(AV) onde A é o número de arestas e V o número de vértices.
Complexidade do Algoritmo: Caminho mínimo Floyd WarshallLucas Vinícius
O algoritmo de Floyd-Warshall encontra os caminhos mínimos entre todos os pares de vértices de um grafo ponderado. Ele preenche uma matriz com os tamanhos dos menores caminhos, iterando sobre cada vértice e atualizando a matriz. Sua complexidade é O(n3), onde n é o número de vértices do grafo.
O documento discute algoritmos gulosos e grafos. Apresenta conceitos como árvore espalhada mínima, subestrutura ótima, escolha gulosa e algoritmos como Prim e Kruskal para encontrar a árvore espalhada mínima de um grafo. Também aborda problemas de caminho mínimo e o algoritmo de Dijkstra para resolver o problema da fonte única.
Caminhos Mínimos - Algoritmo de DijkstraMarcos Castro
O documento descreve como encontrar o caminho mínimo entre duas cidades em um grafo usando o algoritmo de Dijkstra. O algoritmo iterativamente encontra os vértices mais próximos de um vértice inicial e mantém os caminhos mínimos conhecidos em uma estrutura de dados.
Este documento apresenta uma lista de exercícios de óptica com suas respectivas soluções. As principais informações incluem:
1) Cálculos envolvendo potência em dB, fótons, frequência e canais de voz.
2) Aplicação das leis de Snell, lentes e difração.
3) Cálculos envolvendo banda óptica, dispersão e taxa de transmissão em fibras ópticas.
4) Ângulos críticos, reflexão total e modos em guias de onda.
Este documento discute o problema de fluxo a custo mínimo em grafos. Ele resume o problema, explica como identificar se uma solução é viável, e descreve o algoritmo Successive Shortest Path (SSP) para resolver o problema em até 3 frases:
O documento discute o problema de fluxo a custo mínimo em grafos, explicando como transformar o grafo para garantir que o fluxo de entrada é igual ao de saída e como usar o algoritmo SSP para encontrar sucessivamente os caminhos de menor custo entre os vértices origem e destino até que não h
1) O documento discute funções vetoriais e suas propriedades como domínio, imagem e continuidade.
2) Apresenta exemplos de curvas no espaço como helicóide e cicloide definidas por funções vetoriais.
3) Discutem derivadas de funções vetoriais e suas interpretações geométricas em termos de velocidade e aceleração de uma partícula.
O documento apresenta o modelo cinemático direto e inverso de um robô RR utilizando os parâmetros de Denavit-Hartenberg. É construída a matriz de transformações para diferentes configurações de ângulos de junta e são obtidas as coordenadas cartesianas correspondentes. O modelo cinemático inverso é obtido através da função atan2 para determinar os ângulos de junta a partir das coordenadas no espaço de trabalho. Geradores de trajetórias são elaborados tanto no espaço de juntas quanto no espaço cartesiano
O documento discute problemas NP-completos relacionados a grafos, como o problema do caixeiro viajante, cobertura de nós e conjuntos independentes. Explica que esses problemas são NP-completos através de reduções em tempo polinomial de problemas conhecidos como 3-SAT e ciclo hamiltoniano.
O documento apresenta cálculos envolvendo colisões entre corpos e ondas mecânicas. São determinadas velocidades finais em colisões perfeitamente inelásticas e elásticas entre corpos, considerando conservação de quantidade de movimento e energia. Também são calculadas propriedades de ondas mecânicas como comprimento de onda e deslocamento em função do tempo.
O documento apresenta um problema sobre o equilíbrio de duas partículas de massas m e M fixadas nas extremidades de uma barra posicionada dentro de uma casca hemisférica. A razão entre as massas m/M é igual a (L2 - 2r2)/(2r2), onde L é o comprimento da barra e r é o raio da casca hemisférica.
1. O documento discute integrais de linha, que podem ser usadas para calcular trabalho realizado por forças variáveis ou calor em transformações termodinâmicas.
2. São introduzidos os conceitos de integrais de linha de funções de duas variáveis e campos vetoriais no plano, que podem ser transformadas em integrais simples.
3. Exemplos mostram como calcular integrais de linha para curvas no plano e no espaço, tanto em forma cartesiana quanto paramétrica.
i) A velocidade de um objeto em queda livre em uma rampa parabólica é dada por a raiz quadrada da posição x.
ii) A força normal é inversamente proporcional à raiz quadrada da posição x.
iii) A aceleração tangencial é diretamente proporcional à raiz quadrada da posição x.
Este documento apresenta exemplos de funções de várias variáveis e discute o conceito de domínio de uma função. Apresenta seis exemplos de funções que mapeiam espaços Rn para Rm, onde n e m podem ser iguais ou diferentes. Também define formalmente o domínio de uma função e ilustra com um exemplo onde o domínio é restrito a valores onde a função é bem definida.
i) A velocidade do objeto em função da posição é dada por v = √2gx.
ii) A força normal é dada por N = mg/√1+(2gx/g).
iii) A aceleração tangencial é dada por at = √2g.
Integrais, duplos, Areas, volumes, Propriedades, Fubini, Aplicacões, Mudança de variáveis, Coordenadas, Polares, Polares generalizadas, Applets
Se quiser a fonte em LaTeX ofereço com todo o gosto: sandra.gaspar.martins@gmail.com
Este documento apresenta 7 questões sobre cinemática do movimento uniformemente variado. As questões abordam tópicos como queda livre, aceleração constante, velocidade final, tempo de queda de gotas e distância percorrida com freios. As respostas são calculadas usando equações como a equação horária do espaço e a definição de aceleração escalar média.
O documento apresenta uma introdução sobre árvores espalhadas mínimas e descreve dois algoritmos para encontrar tal árvore em um grafo: o algoritmo de Prim e o algoritmo de Kruskal. O documento discute o funcionamento, análise de complexidade e corretude de cada algoritmo e faz uma comparação entre eles.
O objeto desce uma rampa parabólica com velocidade inicial v0. Sua velocidade é dada por v = v0√(1-x/a), a força normal é N = mg√(1-x/a) e a aceleração tangencial é at = -g√(1-x/a), onde a é o comprimento da rampa.
1) O documento apresenta o algoritmo de Fluxo Máximo a Custo Mínimo.
2) Este algoritmo encontra os caminhos de menor custo que geram o fluxo máximo em uma rede, utilizando algoritmos de fluxo máximo e menor caminho de origem única.
3) É apresentada a análise do algoritmo Bellman-Ford e do algoritmo de fluxo máximo de Ford-Fulkerson.
O documento descreve os conceitos de tensões de cisalhamento em vigas sob flexão. Discute as hipóteses básicas, a fórmula de cisalhamento e a distribuição das tensões de cisalhamento em seções retangulares e circulares. Também apresenta exemplos numéricos de dimensionamento de seções sob tensões de cisalhamento e flexão.
Campos escalares e vectoriais
Análise Matemática 2.
Para obter os ficheiros em LaTeX envie email para sandra.gaspar.martins@gmail.com ... eu envio com todo o gosto!
1) O documento apresenta a resolução de um problema físico sobre conservação de energia mecânica envolvendo uma esfera rolando sem deslizar em um plano inclinado.
2) É analisado o equilíbrio de um disco sobre um plano inclinado, considerando o torque e a força resultante.
3) São resolvidos cálculos envolvendo a variação de pressão e temperatura de um gás confinado em um recipiente à medida que um líquido é despejado nele.
Este documento resume um conjunto de aulas sobre cinemática de projéteis. Ele apresenta:
1) A posição inicial de um projétil é zero no instante inicial t=0.
2) O tempo para o projétil atingir o ponto P é 16 segundos.
3) As coordenadas do ponto Q, atingido no instante t=20s, são (1200, -400).
O documento discute o teorema da recursão e sua aplicação em tópicos avançados de computabilidade. Em particular, o teorema permite que máquinas de Turing obtenham sua própria descrição e o usem para realizar computações recursivas. Isso é ilustrado através da máquina de Turing AUTO, que imprime sua própria descrição usando recursão. O teorema também é usado para provar a indecidibilidade do problema da parada para máquinas de Turing.
Slides sobre os padrões de projeto Adapter e Decorator com exemplos em C++ apresentados a turma de Projeto de Software do curso de Ciência da Computação da Universidade Federal de Goiás.
Treinamento Para competições de Programação do INF-UFG - Grafos Parte 1 - Tur...Murilo Adriano Vasconcelos
O documento fornece uma introdução sobre grafos, definindo seus principais conceitos como vértices, arestas e tipos de grafos. Explica as representações de grafos por matrizes de adjacência e listas de adjacência e apresenta os algoritmos de busca em largura e profundidade como aplicações importantes de grafos.
Apresentação sobre parte do Capítulo 2 do livro Digital Image Processing de GONZALEZ e WOODS preparada para a disciplina de Processamento de Imagens Digitais do IC - Unicamp semestre 1/2012. Cobre a anatomia do olho humano, o espectro eletromagnético, sensores e aquisição de imagens e amostragem e quantização de imagens.
O documento apresenta o modelo cinemático direto e inverso de um robô RR utilizando os parâmetros de Denavit-Hartenberg. É construída a matriz de transformações para diferentes configurações de ângulos de junta e são obtidas as coordenadas cartesianas correspondentes. O modelo cinemático inverso é obtido através da função atan2 para determinar os ângulos de junta a partir das coordenadas no espaço de trabalho. Geradores de trajetórias são elaborados tanto no espaço de juntas quanto no espaço cartesiano
O documento discute problemas NP-completos relacionados a grafos, como o problema do caixeiro viajante, cobertura de nós e conjuntos independentes. Explica que esses problemas são NP-completos através de reduções em tempo polinomial de problemas conhecidos como 3-SAT e ciclo hamiltoniano.
O documento apresenta cálculos envolvendo colisões entre corpos e ondas mecânicas. São determinadas velocidades finais em colisões perfeitamente inelásticas e elásticas entre corpos, considerando conservação de quantidade de movimento e energia. Também são calculadas propriedades de ondas mecânicas como comprimento de onda e deslocamento em função do tempo.
O documento apresenta um problema sobre o equilíbrio de duas partículas de massas m e M fixadas nas extremidades de uma barra posicionada dentro de uma casca hemisférica. A razão entre as massas m/M é igual a (L2 - 2r2)/(2r2), onde L é o comprimento da barra e r é o raio da casca hemisférica.
1. O documento discute integrais de linha, que podem ser usadas para calcular trabalho realizado por forças variáveis ou calor em transformações termodinâmicas.
2. São introduzidos os conceitos de integrais de linha de funções de duas variáveis e campos vetoriais no plano, que podem ser transformadas em integrais simples.
3. Exemplos mostram como calcular integrais de linha para curvas no plano e no espaço, tanto em forma cartesiana quanto paramétrica.
i) A velocidade de um objeto em queda livre em uma rampa parabólica é dada por a raiz quadrada da posição x.
ii) A força normal é inversamente proporcional à raiz quadrada da posição x.
iii) A aceleração tangencial é diretamente proporcional à raiz quadrada da posição x.
Este documento apresenta exemplos de funções de várias variáveis e discute o conceito de domínio de uma função. Apresenta seis exemplos de funções que mapeiam espaços Rn para Rm, onde n e m podem ser iguais ou diferentes. Também define formalmente o domínio de uma função e ilustra com um exemplo onde o domínio é restrito a valores onde a função é bem definida.
i) A velocidade do objeto em função da posição é dada por v = √2gx.
ii) A força normal é dada por N = mg/√1+(2gx/g).
iii) A aceleração tangencial é dada por at = √2g.
Integrais, duplos, Areas, volumes, Propriedades, Fubini, Aplicacões, Mudança de variáveis, Coordenadas, Polares, Polares generalizadas, Applets
Se quiser a fonte em LaTeX ofereço com todo o gosto: sandra.gaspar.martins@gmail.com
Este documento apresenta 7 questões sobre cinemática do movimento uniformemente variado. As questões abordam tópicos como queda livre, aceleração constante, velocidade final, tempo de queda de gotas e distância percorrida com freios. As respostas são calculadas usando equações como a equação horária do espaço e a definição de aceleração escalar média.
O documento apresenta uma introdução sobre árvores espalhadas mínimas e descreve dois algoritmos para encontrar tal árvore em um grafo: o algoritmo de Prim e o algoritmo de Kruskal. O documento discute o funcionamento, análise de complexidade e corretude de cada algoritmo e faz uma comparação entre eles.
O objeto desce uma rampa parabólica com velocidade inicial v0. Sua velocidade é dada por v = v0√(1-x/a), a força normal é N = mg√(1-x/a) e a aceleração tangencial é at = -g√(1-x/a), onde a é o comprimento da rampa.
1) O documento apresenta o algoritmo de Fluxo Máximo a Custo Mínimo.
2) Este algoritmo encontra os caminhos de menor custo que geram o fluxo máximo em uma rede, utilizando algoritmos de fluxo máximo e menor caminho de origem única.
3) É apresentada a análise do algoritmo Bellman-Ford e do algoritmo de fluxo máximo de Ford-Fulkerson.
O documento descreve os conceitos de tensões de cisalhamento em vigas sob flexão. Discute as hipóteses básicas, a fórmula de cisalhamento e a distribuição das tensões de cisalhamento em seções retangulares e circulares. Também apresenta exemplos numéricos de dimensionamento de seções sob tensões de cisalhamento e flexão.
Campos escalares e vectoriais
Análise Matemática 2.
Para obter os ficheiros em LaTeX envie email para sandra.gaspar.martins@gmail.com ... eu envio com todo o gosto!
1) O documento apresenta a resolução de um problema físico sobre conservação de energia mecânica envolvendo uma esfera rolando sem deslizar em um plano inclinado.
2) É analisado o equilíbrio de um disco sobre um plano inclinado, considerando o torque e a força resultante.
3) São resolvidos cálculos envolvendo a variação de pressão e temperatura de um gás confinado em um recipiente à medida que um líquido é despejado nele.
Este documento resume um conjunto de aulas sobre cinemática de projéteis. Ele apresenta:
1) A posição inicial de um projétil é zero no instante inicial t=0.
2) O tempo para o projétil atingir o ponto P é 16 segundos.
3) As coordenadas do ponto Q, atingido no instante t=20s, são (1200, -400).
O documento discute o teorema da recursão e sua aplicação em tópicos avançados de computabilidade. Em particular, o teorema permite que máquinas de Turing obtenham sua própria descrição e o usem para realizar computações recursivas. Isso é ilustrado através da máquina de Turing AUTO, que imprime sua própria descrição usando recursão. O teorema também é usado para provar a indecidibilidade do problema da parada para máquinas de Turing.
Slides sobre os padrões de projeto Adapter e Decorator com exemplos em C++ apresentados a turma de Projeto de Software do curso de Ciência da Computação da Universidade Federal de Goiás.
Treinamento Para competições de Programação do INF-UFG - Grafos Parte 1 - Tur...Murilo Adriano Vasconcelos
O documento fornece uma introdução sobre grafos, definindo seus principais conceitos como vértices, arestas e tipos de grafos. Explica as representações de grafos por matrizes de adjacência e listas de adjacência e apresenta os algoritmos de busca em largura e profundidade como aplicações importantes de grafos.
Apresentação sobre parte do Capítulo 2 do livro Digital Image Processing de GONZALEZ e WOODS preparada para a disciplina de Processamento de Imagens Digitais do IC - Unicamp semestre 1/2012. Cobre a anatomia do olho humano, o espectro eletromagnético, sensores e aquisição de imagens e amostragem e quantização de imagens.
Processamento de Imagens Digitais - Transformações de Intensidade, Filtragem ...Murilo Adriano Vasconcelos
O documento introduz os conceitos básicos de processamento de imagens digitais, incluindo transformações de intensidade, filtragem espacial e processamento de histograma. Ele descreve as definições de filtragem espacial e transformação de intensidade e fornece exemplos destes processos.
Introdução ao Processamento de Imagem Digital - Relacionamentos básicos entre...Murilo Adriano Vasconcelos
O documento introduz conceitos básicos sobre processamento de imagens digitais, como vizinhança e adjacência de pixels. A vizinhança de um pixel inclui pixels adjacentes horizontal, vertical e diagonalmente. A adjacência de pixels depende se eles compartilham valores de intensidade de acordo com sua vizinhança.
Grafos e árvores são estruturas matemáticas que representam relações. Grafos consistem em vértices e arestas, e podem ser direcionados ou não. Árvores são grafos acíclicos e conexos. Árvores binárias dividem cada nó em no máximo duas subárvores esquerda e direita.
O documento discute a sobrecarga de operadores em C++. Ele explica que sobrecarregar um operador permite aplicá-lo a tipos de dados definidos pelo usuário como classes e estruturas. Em seguida, apresenta exemplos de sobrecarga de operadores unários, binários e de acesso a elementos de vetores e matrizes.
Este documento discute criptografia com uso de curvas elípticas. Apresenta curvas elípticas e sua aplicação na criptografia de chave pública. Explica que a segurança dessas curvas se baseia no problema matemático difícil de calcular logaritmos discretos em curvas elípticas.
1) O documento apresenta algoritmos aproximativos para problemas NP-difíceis como cobertura de vértices, caixeiro viajante e soma de subconjuntos;
2) Para o problema de cobertura de vértices é apresentado um algoritmo 2-aproximativo de tempo polinomial;
3) Para o problema do caixeiro viajante é apresentado um algoritmo que constrói um ciclo hamiltoniano a partir de uma árvore geradora mínima, garantindo que o comprimento do ciclo seja no máximo o comprimento do ciclo ótimo
O documento explica a representação trigonométrica de números complexos, onde um número complexo z = a + bi é representado por seu módulo r e argumento θ. O documento também descreve operações com números complexos como soma, produto, inverso e potenciação usando esta representação trigonométrica.
O documento apresenta vários teoremas sobre derivadas, incluindo: (1) a derivada de uma constante é zero; (2) a regra da potência para derivar xn; (3) a derivada de um escalar vezes uma função é o escalar vezes a derivada da função. Também apresenta regras para derivar soma, produto, quociente e função recíproca.
Exercícios resolvidos de máximo e mínimo de funçãoDiego Oliveira
1) O documento apresenta 9 exemplos resolvidos de problemas de máximos e mínimos utilizando cálculo.
2) Os exemplos envolvem encontrar áreas, volumes e distâncias máximas dadas certas restrições e funções objetivo.
3) As soluções utilizam derivadas de primeira e segunda ordem, testes de pontos críticos e análise de gráficos para localizar extremos.
Graph Theory - Exercises - Chapter 3 - Algorithms of Dijkstra and Bellman-FordMichel Alves
O documento descreve algoritmos para encontrar caminhos de menor custo em grafos, como o algoritmo de Dijkstra e o algoritmo de Bellman-Ford. O documento inclui exemplos passo a passo da aplicação dos algoritmos em um grafo exemplo e lista as etapas de implementação dos algoritmos em C++.
Este documento fornece um resumo de uma palestra sobre algoritmos de caminho mais curto em grafos. Ele inclui:
1) Uma introdução aos grafos direcionados e não direcionados;
2) Uma breve discussão sobre complexidade algorítmica;
3) Um esboço dos principais algoritmos de caminho mais curto, incluindo busca em largura, método de Dijkstra e método de Bellman-Ford.
O documento introduz os conceitos de complexidade de algoritmos e notações para analisar o tempo de execução de algoritmos. Explica que a complexidade temporal de um algoritmo depende do número de operações necessárias para resolver o problema para um dado tamanho de entrada n. Apresenta exemplos de complexidades como Θ(n log n) para ordenação merge sort e O(log n) para busca binária.
1) O documento descreve a aplicação do algoritmo k-NN (k vizinhos mais próximos) utilizando a ordenação Bitônica para resolver o problema da mochila fracionária, onde objetos podem ser colocados parcialmente na mochila.
2) É apresentada a estrutura de dados, funções e algoritmos como Quicksort e Bitônica Sort utilizados para ordenar os elementos e resolver o problema da mochila fracionária de forma paralela.
3) Os resultados da abordagem paralela utilizando Bitônica Sort são comparados com
Cálculo diferencial e integral de várias variáveis unid iiiBruno Luz
1) O documento apresenta os conceitos de integrais duplas e integração por partes.
2) São mostrados exemplos de cálculo de integrais imediatas, integrais definidas e integrais por substituição.
3) Exemplos de resolução de integrais por partes são apresentados para revisão do tema.
O algoritmo de Floyd-Warshall se propõe a resolver o problema de encontrar o menor caminho entre todos os pares de vértices de um grafo orientado e ponderado. Ele utiliza programação dinâmica para calcular de forma eficiente as distâncias mínimas entre todos os pares de vértices do grafo.
(1) O documento descreve técnicas de integração por partes, incluindo a fórmula geral e exemplos de sua aplicação. (2) A integração por partes permite transformar uma integral desconhecida em outra mais simples. (3) Os exemplos ilustram como a técnica pode ser usada repetidamente para resolver integrais mais complexas.
1. O documento apresenta conceitos fundamentais sobre cálculo integral, incluindo diferenciais, integrais indefinidas e regras básicas de integração.
2. É explicado que a integral e a derivada são funções inversas, com a integral encontrando a "função primitiva" de uma derivada.
3. A constante de integração aparece ao se integrar uma função, pois não é possível saber o valor exato da constante apenas ao se calcular a integral.
Este documento apresenta os conceitos fundamentais de integração indefinida e definida. Na seção sobre integração indefinida, é introduzida a noção de primitiva de uma função e mostrado que duas primitivas diferem apenas por uma constante. A seção sobre integração definida define a integral como o limite da soma de Riemann e mostra que para funções contínuas, a integral coincide com o cálculo de área. Finalmente, são apresentados teoremas como a linearidade e monotonicidade da integral definida.
Este documento contém 14 exercícios resolvidos sobre funções polinomiais do segundo grau e logarítmica. Os exercícios abordam tópicos como gráficos de funções, raízes, máximos e mínimos, equações e inequações do segundo grau. O último exercício trata sobre juros compostos e tempo para que um capital inicial duplique de valor.
O documento apresenta conceitos e técnicas de vetorização. Discute sobre introdução à vetorização, incluindo vantagens do processamento vetorial. Apresenta abordagens para vetorização como auto-vetorização, diretivas como #pragma, e uso de Intel Cilk Plus para notação vetorial.
O documento discute programação paralela em Python, apresentando bibliotecas e alternativas como threading, multiprocessing, Parallel Python e MPI for Python. Exemplos mostram como esses módulos podem ser usados para executar tarefas em paralelo em Python.
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
O documento discute o conceito de refatoração de código e apresenta um exemplo de como refatorar um código para melhorar sua estrutura e legibilidade. O Capitão Nascimento explica que a refatoração envolve reescrever um programa preservando seu comportamento para facilitar a manutenção e entendimento do código. Ele também destaca a importância de testar o código e sentir quando ele tem "mau cheiro" para identificar onde pode ser refatorado.
Apresentação para o Hack Thursday (http://hackthursday.com/) sobre a linguagem C. Pode servir como uma introdução para a linguagem. O material é inspirado nesse curso aqui: http://www.cs.cf.ac.uk/Dave/C/ Para quem não participou da apresentação pode ser mais didático olhar o link.
Semelhante a Treinamento para Competições de Programacão - Single-Source Shortest Paths: Dijkstra e Bellman-Ford (20)
Treinamento para Competições de Programacão - Single-Source Shortest Paths: Dijkstra e Bellman-Ford
1. TREINAMENTO PARA COMPETIÇÕES DE
PROGRAMAÇÃO
GRAFOS - PARTE III
SINGLE-SOURCE SHORTEST PATHS:
DIJKSTRA E BELLMAN-FORD
Murilo Adriano Vasconcelos
http://murilo.wordpress.com
2. O problema
• Dado um grafo ponderado G(V, E), onde as
arestas tem custos positivos, queremos
saber qual o custo do menor caminho de
um vértice origem u ∈ V para todos os
outros vértices v ∈ V.
3. O algoritmo de Dijkstra
const int MAXV = 1000; // número máximo de vértices
const int INF = 0x3f3f3f3f; // cuidado com esse valor
list< pair<int, int> > grafo[MAXV]; // lista de adjacência
int dist[MAXV]; // a resposta ficará neste vetor
int visited[MAXV], N; // N é a quantidade de vértices atual
void leitura()
{
cin >> N >> m; // quantidade de vertices e arestas
int de, para, custo;
// limpa o grafo
for (int i = 0; i < N; ++i) g[i].clear();
// leitura da entrada
for (int i = 0; i < m; ++i) {
cin >> de >> para >> custo;
g[de].push_back(make_pair(para, custo));
}
}
4. O algoritmo de Dijkstra
void dijkstra(int origem)
{
for (int i = 0; i < N; ++i) {
dist[i] = INF;
visited[i] = false;
}
// nossa heap de máximo onde: first = custo,
// second = vertice
priority_queue< pair<int, int> > pq;
pq.push(make_pair(0, origem));
dist[origem] = 0; // distancia da origem pra ela
// mesma é 0
pair<int, int> atual;
list< pair<int, int> >::iterator it;
5. O algoritmo de Dijkstra
while (!pq.empty()) {
atual = pq.top();
pq.pop();
int custo = -atual.first; // nao esqueça do ‘-’!
int v = atual.second;
if (visited[v]) continue; // já processamos ele
visited[v] = true; // se cheguei aqui, o menor custo
// de origem para v já foi calculado
// para cada aresta, tentamos fazer a relaxação
for (it = g[v].begin(); it != g[v].end(); ++it) {
if (dist[it->second] > w + it->first) {
dist[it->second] = w + it->first;
pq.push(make_pair(-dist[it->second],
it->second));
}
}
}
} // dijkstra
6. O algoritmo de Dijkstra
• Inicialmente, colocamos na heap, o vértice
de origem com o custo 0 e dizemos que o
custo da origem para origem é 0
• Em seguida, para cada elemento v com o
menor custo (top() na priority_queue),
tentamos relaxar (diminuindo) o custo dos
seus vizinhos
• Se o custo de algum vértice u for maior
que o custo de v mais o custo da aresta
que liga o v a u, diminuímos o custo de u
para este valor
9. Outro problema
• Dado um grafo ponderado G(V, E), onde as
arestas podem ter custos negativos,
queremos saber qual o custo do menor
caminho de um vértice origem u ∈ V para
todos os outros vértices v ∈ V.
11. Usar o Dijkstra?
Seja G, este grafo:
2
-1 -4
0 10 1 3 4
2 1
Qual a menor distância entre 0 e 4?
12. Usar o Dijkstra?
Não podemos usar o Dijkstra, pois o grafo
contém um ciclo negativo.
2
-1 -4
0 10 1 3 4
2 1
Podemos ficar infinitamente neste ciclo pois o
custo sempre diminuirá
13. O algoritmo Bellman-Ford
• O algoritmo de Bellman-Ford encontra o
menor caminho entre um vértice origem e
todos os outros se o grafo não tiver ciclos
negativos
• Se o grafo tiver ciclos negativos, o algoritmo
serve para detectá-los
14. O algoritmo Bellman-Ford
• Utiliza a representação de lista de arestas
• Faz a relaxação utilizando a desigualdade
triangular |V| - 1 vezes
• Se após |V| - 1 relaxações, ainda
conseguirmos diminuir o custo de algum
vértice, o grafo contém ciclos negativos
15. O algoritmo Bellman-Ford
const int MAXV = 1000; // número máximo de vértices
const int INF = 0x3f3f3f3f; // cuidado com esse valor
struct aresta { int u, v, w; }; // de, para, custo
vector<aresta> grafo; // pode ser um array se
// soubermos o máximo de arestas
int custo[MAXV], N, E; // custo, vértices, arestas
void le()
{
cin >> N >> E; // le a quant. de vértices e arestas
grafo.clear();
aresta ar;
for (int i = 0; i < E; ++i) {
cin >> ar.u >> ar.v >> ar.w; // de, para, custo
grafo.push_back(ar);
}
}
16. O algoritmo Bellman-Ford
bool bellan_ford(int origem)
{
for (int i = 0; i < V; ++i) custo[i] = INF;
custo[origem] = 0;
for (int i = 0; i < V - 1; ++i) { // até V - 1
for (int j = 0; j < E; ++j) {
int u = grafo[j].u;
int v = grafo[j].v;
int w = grafo[j].w;
// relaxação
if (custo[v] > custo[u] + w) {
custo[v] = custo[u] + w;
}
}
}
17. O algoritmo Bellman-Ford
// checagem de ciclos de custo negativo
for (int j = 0; j < E; ++j) {
int u = grafo[j].u;
int v = grafo[j].v;
int w = grafo[j].w;
// se ainda é possível diminuir o custo
// é porque sempre vai ter como (ciclo negativo)
if (custo[v] > custo[u] + w) {
return false; // ciclo encontrado
}
}
return true; // nenhum ciclo negativo
} // bellman_ford()
18. Bellman-Ford - análise
• Complexidade O(VE)
• Loop de fora V vezes, loop interno E
vezes
19. Alguns Problemas
Dijkstra (UVA):
341 - Non-Stop Travel
929 - Number Maze
1202 - Finding Nemo
10166 - Travel
10269 - Adventure of Super Mario
10278 - Fire Station
10389 - Subway
10603 - Fill
10801 - Lift Hopping
10986 - Sending email
11367 - Full Tank?
11377 - Airport Setup
11492 - Babel
11833 - Route Change
12138 - Chemical Plant
Bellman Ford (UVA):
558 - Wormholes
10557 - XYZZY
11280 - Flying to Fredericton