Você está na página 1de 8

UNIVERSIDADE PAULISTA – UNIP

INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (ICET)

MARIA FERNANDA CANUTO GALLÃO


N412EF-4

ANÁLISE DE ALGORITMOS

RIBEIRÃO PRETO
2022
MARIA FERNANDA CANUTO GALLÃO

ANÁLISE DE ALGORITMOS

Trabalho acadêmico apresentado à disciplina de Análise de Algoritmos do Curso Ciência da


Computação da Faculdade Universidade Paulista- UNIP como requisito de nota parcial da NP2 da
Turma CC7Q18. Requerido pela prof. Camila KS Prado.

RIBEIRÃO PRETO
2022
Sumário
1 o problema de fluxo máximo 4
2 Problemas NP-completos 6
2.1.1 Exemplos de alguns problemas de class P 7
3 Algoritmos Aproximados 7
4 Multithread 8
4.1.1 Vantagens 9
4

1 O PROBLEMA DE FLUXO MÁXIMO

O problema do fluxo máximo é uma poderosa ferramenta de modelagem, capaz de


representar uma grande variedade de outros problemas. As aplicações mais óbvias
incluem o fluxo de um líquido através de uma rede de tubos, o fluxo de mercadorias
do produtor ao consumidor, o casamento de desempregados com empregos, etc.
O problema do emparelhamento bipartido máximo é um caso particular. O problema
de fluxo máximo em redes consiste em dada uma rede e um vértice origem s e um
vertice destino t, determinar uma atribuição de fluxo para as arestas da rede
satisfazendo as condições i) a iv) tal que fluxo na rede seja o maior possível.

Figura 1 - Fluxo maximal em uma rede

Figura 2 - Fluxo máximo em uma Rede

Todo fluxo máximo é maximal, mas a recíproca não é verdadeira. Na Figura 1 temos
um fluxo maximal que não é máximo e na Figura 2 um fluxo máximo (e maximal).

Fluxo máximo de custo mínimo


5

O problema do fluxo máximo de custo mínimo é bastante famoso em pesquisa


operacional, logística e, principalmente, ciência da computação, pois é um problema
que generaliza diversos outros ligados à teoria de grafos, inclusive o de obter um
caminho de custo mínimo e o de encontrar um fluxo máximo. Além disso, existem
algoritmos polinomiais assintoticamente eficientes para resolvê-lo, muito embora
esses sejam uns dos mais complexos em teoria de grafos. Nosso trabalho será
mostrar como esse problema pode ser ajustado para resolver um problema de
otimização que costuma aparecer em sistemas distribuídos, o de balancear a carga
nos nós do sistema.

1. A rede é representada por um Dígrafo (orientada) e conectada.


2. No mínimo um dos nós é um "nó de fornecimento" (origem).
3. No mínimo um dos nós é um "nó de demanda" (destino).
4. Todos os nós restantes são "nós Transshipment' (entreposto,
5. intermediário).
6. A rede possui arcos, tanto quanto forem necessários, com capacidade
suficiente para habilitar todos os fluxos gerados nos nós de fornecimento para
alcançar os nós de demanda.
7. O custo do fluxo através de cada arco é proporcional a quantidade daquele
fluxo, onde o custo por unidade de fluxo é conhecido.
8. O objetivo é minimizar o custo total de enviar o fornecimento disponível
através da rede para satisfazer a demanda dada (um objetivo alternativo é
maximizar o lucro total para fazer isto)

Figura 2 - Fluxo Máximo a Custo Mínimo

2 PROBLEMAS NP-COMPLETOS
6

A complexidade de muitos problemas computacionais de interesse prático é


desconhecida. Para muitos desses problemas, não sabemos se um algoritmo
polinomial existe. Em particular, para muitos problemas de decisão polinomialmente
verificáveis não sabemos se o problema está na classe P. Resta-nos tentar entender
quais desses problemas são menos provavelmente polinomiais.
Uma vez conhecido um problema NP-completo, o conceito de redução
polinomial pode ser usado para mostrar que outros problemas são NP-completos.
Com efeito, se X é um problema NP-completo e X ≼ Z então Z também é NP-
completo. O conjunto dos problemas NP-completos será designada por NPC.
Se algum problema NP-completo for polinomial então todos os problemas NP-
completos são polinomiais. Portanto, para provar que P = NP basta encontrar um
algoritmo polinomial para um único problema NP-completo. Isso pode ser resumido
assim: P ≠ NP se e somente se P ∩ NPC = ∅.
Classe P = problemas cujas respostas são encontradas utilizandoalgum algoritmo
O(nk)Classe NP = problemas para os quais “testar se uma determinadasugestão de
resposta é ou não correta” é feito utilizando algum algoritmoO(nk)

Figura 3

2.1.1 Exemplos de alguns problemas de class P

 Problema da conectividade em grafos


 Problema de encontrar o caminho mais curto ligando dois vértices em um
grafo
 Problema do alinhamento de strings
 Alguns problemas NP-completos
 Problema SAT
 Problema da Mochila (com e sem repetição de objetos)
 Problema do Caixeiro Viajante

3 ALGORITMOS APROXIMADOS
7

Um algoritmo aproximado para um problema Π é um algoritmo que gera soluções


aproximadas para Π. Para ser útil, é importante obter um limite para a razão entre a
solução ótima e a produzida pelo algoritmo aproximado.
O comportamento de algoritmos aproximados quanto a qualidade dos resultados
(não o tempo para obtê-los) tem de ser monitorado.
Um algoritmo aproximado para um problema Π é um algoritmo polinomial que produz
uma solução S(I) para uma instância I de Π, O comportamento do algoritmo A é
descrito pela razão de aproximação RA (I) = S(I) / S∗ (I), que representa um
problema de minimização, no caso de um problema de maximização, a razão é
invertida.
Em ambos os casos, RA (I) ≥ 1.

4 MULTITHREAD

Em um ambiente multithread, não existe a ideia de um programa, mas de threads


(linhas). O processo, neste ambiente, tem pelo menos um thread de execução,
podendo compartilhar o seu espaço de endereçamento com inúmeros threads, que
podem ser executados de forma concorrente e/ou simultânea, no caso de múltiplos
processadores.

4.1.1 Vantagens
 Programas concorrentes que utilizam múltiplos threads são mais rápidos do
que implementados como múltiplos (sub)processos.
8

 Como os threads compartilham os recursos do processo, as operações de


criação, troca de contexto e eliminação dos threads geram um ganho de
desempenho.
 Como todos os threads em um processo compartilham o mesmo espaço de
endereçamento, a comunicação entre os threads pode ser feita utilizando o
compartilhamento de memória (shared memory) de forma rápida e eficiente.
 De forma semelhante ao compartilhamento de memória, os threads dentro do
mesmo processo podem compartilhar facilmente outros recursos, como
descritores de arquivos, temporizadores (timers), sinais, atributos de
segurança etc.
 A utilização dos recursos de hardware, como UCP, discos e periféricos, pode
ser feita de forma concorrente pelos diversos threads, significando uma
melhor utilização dos recursos computacionais disponíveis.
 Em algumas aplicações, a utilização de threads pode melhorar o desempenho
da aplicação apenas executando tarefas secundárias (background), enquanto
operações, como entrada e saída, estão sendo processadas.

Você também pode gostar