Este documento resume um seminário sobre o Laboratório de Algoritmos Avançados no ICMC-USP. O laboratório foi criado para dar contato prático com algoritmos e preparar alunos para competições de programação. O plano de curso inclui aulas sobre tópicos como busca binária, programação dinâmica e fluxo em grafos, além de treinamento em plataformas online. A aula apresentada trata da busca ternária, um método para encontrar o máximo de uma função unimodal em tempo logarítmico.
1. Semin´ario: Laborat´orio de Algoritmos Avan¸cados
Grupo 10
Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP
13 de junho de 2013
Bianca Madoka Shimizu Oe,
Denis Moreira dos Reis,
Lucas Schmidt Cavalcante,
Nathan Siegle Hartmann,
Rafael Umino Nakanishi.
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 1/29
2. Laborat´orio de Algoritmos Avan¸cados
Algoritmos Avan¸cados e Laborat´orio de Algoritmos Avan¸cados s˜ao
disciplinas optativas que foram criadas no ICMC-USP para:
prover ao aluno um contato pr´atico com algoritmos sem estar
atrelado a nenhuma ´area;
a partir de 2013 a disciplina Algoritmos Avan¸cados se tornou
obrigat´oria.
formalizar e dar cr´editos aos alunos e professores que est˜ao
envolvidos na prepara¸c˜ao para a ACM-ICPC (Programming
Challenge, que no Brasil recebe o nome de Maratona de
Programa¸c˜ao).
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 2/29
3. Diretrizes Curriculares
Aprovada em 09/03/2002
N˜ao traz restri¸c˜oes/obriga¸c˜oes para a disciplina;
Optativa e agrega conhecimento adicional para a forma¸c˜ao
b´asica do graduando.
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 3/29
4. Maratona de Programa¸c˜ao?
A Maratona de Programa¸c˜ao ´e a vers˜ao universit´aria da Olimp´ıada
Brasileira de Inform´atica (OBI), que tˆem como caracter´ısticas:
times formados por 3 alunos (e 1 coach) com acesso a um
´unico computador;
prova de 5 horas de dura¸c˜ao com cerca de 10 problemas;
avalia¸c˜ao autom´atica das submiss˜oes aos problemas (s˜ao
julgados quanto a corretude e eficiˆencia);
A Maratona de Programa¸c˜ao, que ´e organizada pela Sociedade
Brasileira de Computa¸c˜ao (SBC) e Funda¸c˜ao Carlos Chagas
(FCC), ´e a respons´avel por selecionar os times brasileiros que
competir˜ao na etapa mundial (ACM-ICPC).
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 4/29
5. Maratona de Programa¸c˜ao?
Figura: 2012 ACM-ICPC World Finals em Vars´ovia (Polˆonia).
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 5/29
6. Laborat´orio de Algoritmos Avan¸cados
Uma disciplina dedicada a Maratona de Programa¸c˜ao n˜ao ´e
exclusividade do ICMC-USP:
Stanford:
CS 97SI - Introduction to Competitive Programming Contests;
Universidade Estadual de Campinas:
MC511 - Desafios de Programa¸c˜ao I;
MC611 - Desafios de Programa¸c˜ao II;
MC711 - Desafios de Programa¸c˜ao III;
MC811 - Desafios de Programa¸c˜ao IV;
IME-USP:
MAC0327 - Desafios de Programa¸c˜ao.
Nos baseamos nessas disciplinas para elaborar um novo plano de
curso para Laborat´orio de Algoritmos Avan¸cados.
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 6/29
7. Plano de Curso
Carga hor´aria:
Uma aula semanal de 3 horas (cr´edito aula);
´E prevista uma dedica¸c˜ao extra de 3 horas por semana
(cr´edito trabalho).
Avalia¸c˜ao:
MF = 0.4 × MP + 0.6 × ME, no qual MF ´e ‘M´edia Final’,
MP ´e ‘M´edia das Provas’, e ME ´e a ‘M´edia dos Exerc´ıcios’.
Recursos:
Online Judges (OJ): Universidad de Valladolid OJ (UVa),
Sphere OJ (SPOJ), TopCoder e Codeforces.
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 7/29
8. Online Judge
Figura: Exemplo de um contest no Codeforces.
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 8/29
9. Plano de Curso
Tabela: Ementa da disciplina.
# Descri¸c˜ao da Aula
1 Ad-hoc
2 Union-Find
3 Teoria dos N´umeros (propriedades de n´umeros primos e crivo)
4 Teoria dos Jogos (jogo do NIM e algoritmo ganhador-perdedor)
5 Busca Bin´aria & Tern´aria
6 Convex Hull
7 Fluxo em Grafos (Algoritmos Ford-Fulkerson e Edmonds-Karp)
8 Programa¸c˜ao Dinˆamica (LCS, ED, LIS e MCM)
9 Arvore de Segmentos e BIT (Fenwick Tree)
10 Trie & Suffix Array
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 9/29
10. Plano de Curso
Bibliografia recomendada:
“Competitive Programming 3: The
New Lower Bound of Programming Contests”,
Steven Halim. 3a Edi¸c˜ao (2013), lulu.
“Art of Programming
Contest”, Ahmed Shamsul Arefin. 2006.
“Programming Challenges: The Programming
Contest Training Manual”, Steven
S. Skiena & Miguel A. Revilla. 2003, Springer.
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 10/29
11. Aula
Aula anterior:
Busca Bin´aria
At´e aqui, espera-se que o aluno tenha compreendido os
conceitos b´asicos de busca bin´aria.
Esta aula:
Busca Tern´aria
Apresentaremos uma motiva¸c˜ao com um problema
Introduziremos os conceitos do assunto
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 11/29
12. Motiva¸c˜ao
Descri¸c˜ao do problema:
Part´ıculas com velocidade e dire¸c˜ao constantes em um plano
As part´ıculas se movem com o decorrer do tempo
´E desejado o quadrado de menor ´area que contenha todas as
part´ıculas em algum instante
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 12/29
13. Motiva¸c˜ao
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 13/29
14. Redu¸c˜ao do Problema
Um problema mais simples consiste em uma varia¸c˜ao com uma
dimens˜ao:
Part´ıculas com velocidade e dire¸c˜ao constantes sobre o eixo x
Cada part´ıcula se move apenas em uma dire¸c˜ao: esquerda ou
direita
´E desejado o menor intervalo que contenha todas as part´ıculas
em algum instante
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 14/29
15. Redu¸c˜ao do Problema
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 15/29
Particulas opostas Grafico de distancia
16. Problema Original: Solu¸c˜ao
Deseja-se minimizar
f (t) = max
i,j
( max( xi (t) − xj (t), yi (t) − yj (t) ) ),
que pode ser reescrita como
f (t) = max
i,j
( max( (vxi t+pxi )−(vxj t+pxj ), (vyi t+pyi )−(vyj t+pyj ) ) ),
f (t) = max
i,j
( max( (vxi −vxj )t+(pxi −pxj ), (vyi −vyj )t−(pyi +pyj ) ) ).
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 16/29
17. Problema Original: Solu¸c˜ao
Tem-se que
f (t) = max
i,j
( max( (vxi −vxj )t+(pxi −pxj ), (vyi −vyj )t−(pyi +pyj ) ) )
´e equivalente a
f (t) = max
k
(Akt + Bk),
onde Ak e Bk s˜ao os vetores das diferen¸cas entre, respectivamente,
as velocidades e posi¸c˜oes, componente a componente, de todos os
pares de part´ıculas.
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 17/29
18. Exemplo
4 part´ıculas
Velocidade v = (vxi , vyi ), i = 1 . . . 4
Posi¸c˜ao inicial p = (pxi , pyi ), i = 1 . . . 4
Part´ıcula vx vy px py
1 -5 40 50 -10
2 -10 -10 10 30
3 -15 -1 30 20
4 -5 -50 15 40
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 18/29
19. Exemplo
C´alculo de A
vx -5 -10 -15 -5
-5 – 5 10 0
-10 -5 – 5 -5
-15 -10 -5 – -10
-5 0 5 10 –
vy 40 -10 -1 -50
40 – 50 41 90
-10 -50 – -9 40
-1 -41 9 – 49
-50 -90 -40 -49 –
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 19/29
20. Exemplo
Minimizar
f (t) = max
k
(Akt + Bk),
onde
A = [5, 10, 0, −5, 5, −5, −10, −5, −10, 0, 5, 10, 50,
41, 90, −50, −9, 40, −41, 9, 49, −90, −40, −49]
e
B = [40, 20, 35, −40, −20, −5, −20, 20, 15, −35, 5, −15,
−40, −30, −50, 40, 10, −10, 30, −10, −20, 50, 10, 20]
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 20/29
21. Exemplo
Minimizar f (t):
0.0 0.5 1.0 1.5
4050607080
t
f(t)
q
Figura: Em azul, fun¸c˜ao f (t) a ser minimizada; Cada reta corresponde a
um par (Ai , Bi ); Valor m´ınimo em vermelho.
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 21/29
22. Busca Tern´aria
Quando
Fun¸c˜ao f ´e unimodal e
Um intervalo do dom´ınio que contenha o m´aximo da fun¸c˜ao ´e
conhecido: argmax f (x) ∈ [a, b]
A Busca Tern´aria divide uniformemente o intervalo em trˆes
por¸c˜oes, e elimina aquela para qual h´a impossibilidade de conter o
m´aximo.
Processo iterativo at´e alcan¸car erro desejado
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 22/29
23. Busca Tern´aria: Algoritmo
1. Calcule da = a + (b+a)
3 e db = b − (b+a)
3
2. Calcule ya = f (da) e yb = f (db);
3. se ya > yb ent˜ao atualize o intervalo para [a, db]; caso
contr´ario, atualize o intervalo para [da, b].
se ya > yb ent˜ao com certeza o valor m´aximo n˜ao est´a em
[db, b].
4. se |a − b| < encerre; caso contr´ario volte ao primeiro passo e
repita.
´e o erro especificado pelo usu´ario. Por exemplo, = 10−8.
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 23/29
24. Busca Tern´aria: Exemplo Visual
O m´aximo sempre est´a na dire¸c˜ao do maior dos dois divisores.
M´aximo n˜ao precisa estar entre os dois divisores!
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 24/29
25. Busca Tern´aria: Exemplo Visual
O m´aximo sempre est´a na dire¸c˜ao do maior dos dois divisores.
M´aximo n˜ao precisa estar entre os dois divisores!
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 25/29
26. Busca Tern´aria: Complexidade (caso discreto)
Cada n´ıvel tem processamento O(1): compara¸c˜ao de dois
valores
Busca Tern´aria ´e O(H)
n = 3
2
H
→ H = log3
2
n
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 26/29
27. Busca Tern´aria: Complexidade
Na pr´atica, usamos com o dom´ınio real e limitamos a busca por
um erro m´aximo .
Seja n o tamanho do intervalo inicial, ap´os h itera¸c˜oes
queremos obter um nh ≤
A cada itera¸c˜ao reduzimos o intervalo em 2/3 do tamanho
anterior
= 2
3
h
n → h = log3
2
n
Assim, a complexidade do algoritmo para casos real ´e O(log3
2
n
).
Obs: normalmente ´e menor que 1.
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 27/29
28. Busca Tern´aria: Dificuldades
Problemas resolvidos com Busca Tern´aria tˆem por dificuldades
naturais
Verificar se fun¸c˜ao ´e unimodal
Especificar intervalo inicial
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 28/29
29. Considera¸c˜oes Finais
Exerc´ıcios para treinar
UVa 10385: Duathlon
SPOJ: Hamster flight
TopCoder: Catch The Mice
Conte´udo da pr´oxima aula
Convex Hull
Grupo 10, Instituto de Ciˆencias Matem´aticas e de Computa¸c˜ao — USP Semin´ario: Laborat´orio de Algoritmos Avan¸cados 29/29