\documentclass{beamer}

\usepackage[applemac]{inputenc}
\usepackage[brazil]{babel}
\usepackage{pifont}
\usepackage{xspace}
\usepackage{graphicx}
\usepackage{algorithm}
\usepackage{algorithmic}

\begin{document}

\title{Simulando Fun\c{c}\~{o}es de Alta Ordem via o Padr\~{a}o de Projetos
Template}

\author{Fernando Magno Quint\~{a}o Pereira}

\maketitle

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 1}
Imagine que você trabalhe com mecanismos de busca na web. Seu problema básico
é receber uma palavra, e uma lista de páginas web, e mapear esta lista para
uma outra, de valores booleanos. Esta segunda lista contém \texttt{true}
nas posições que correspondem a páginas que contém a dita palavra, e
\texttt{false} nas posições das páginas onde a palavra não ocorre.

\begin{itemize}
\item Como resolver este problema? Qual é o algoritmo básico?
\item Será que é possível resolvê-lo em paralelo?
\end{itemize}

\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 2}
O que o problema da questão anterior tem a ver com os seguintes problemas:

\begin{itemize}
\item Construir a lista de aniversário dos alunos da sala.
\item Atualizar o salário de todos os funcionários da companhia, de modo que
eles recebam um aumento de 10\%.
\item Encontrar o número de estudantes matriculados em cada uma das disciplinas
oferecidas pela UFMG.
\end{itemize}

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 3}
Imagine um algoritmo de criptografia muito simples, que apenas substitui cada
caractere do texto por um outro, de acordo com uma tabela.

\begin{itemize}
\item Alguém poderia dar um exemplo de uso deste algoritmo?
\item Será que este é um algoritmo seguro?
\item Como quebrar este algoritmo?
\end{itemize}

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 4}
Para encontrar a chave do algoritmo de criptografia da questão anterior,
podemos usar uma tabela de frequência de palavras.

\begin{itemize}
\item Projete um programa que receba como entrada uma lista das palavras
presentes em um texto em Português, e construa um histograma das letras,
isto é, uma tabela que mapeia cada letra para o número de vezes em que esta
letra ocorre no texto.
\item Quão paralelo é este problema?
\end{itemize}

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 5}
O que o problema da questão anterior tem a ver com os problemas abaixo
relacionados?

\begin{itemize}
\item Encontrar o aluno mais velho entre todos os alunos da sala?
\item Encontrar o número total de letras em todas as palavras do
dicionário de Português?
\item Descobrir o total gasto por uma empresa com o pagamento dos
salários de cada funcionário?
\end{itemize}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 6}
Algumas linguagens de programação possuem o conceito de funções de alta
ordem. Estas funções permitem a criação de {\em templates}.

\begin{itemize}
\item O que são funções de alta-ordem?
\item O que são templates?
\item Quais linguagens possuem funções de alta-ordem?
\item {\bf Exemplos}.
\end{itemize}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 7}
Esta questão refere-se ao mapeamento de dados entre listas.

\begin{itemize}
\item Qual a forma geral do algoritmo?
\item Quais os dados envolvidos?
\item Quais as operações envolvidas?
\item Represente as classes envolvidas via um diagrama de classes.
\item Como se dará o reúso de código?
\end{itemize}
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 8}
Implemente um mapa que mapeia uma lista de inteiros para outra lista de
inteiros, onde cada elemento é incrementado em uma unidade.

\begin{itemize}
\item Como testar a sua aplicação?
\item Quais são as condições de contorno?
\end{itemize}
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 9}
Implemente um mapa que mapeia uma lista de Strings para uma lista de
inteiros, onde cada elemento é o tamanho da string correspondente.

\begin{itemize}
\item Como testar a sua aplicação?
\item Como apurar a complexidade de seu algoritmo?
\item Qual o papel das classes anônimas nesta implementação?
\item Qual é a sintaxe das classes anônimas?
\end{itemize}
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 10}
Implemente um mapa que mapeia uma lista de Strings para uma lista de
caracteres, onde cada elemento é o primeiro caracter da string correspondente.

\begin{itemize}
\item Como testar a sua aplicação?
\end{itemize}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 11}
Esta questão refere-se à redução de dados de uma lista.

\begin{itemize}
\item Qual a forma geral do algoritmo?
\item Quais os dados envolvidos?
\item Quais as operações envolvidas?
\item Quais os tipos destas operações?
\item Represente as classes envolvidas via um diagrama de classes.
\item Como se dará o reúso de código?
\end{itemize}
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 12}
Implemente um redutor que some os elementos de uma lista de inteiros.

\begin{itemize}
\item Como testar a sua aplicação?
\item Quais são as situações de contorno?
\end{itemize}
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 13}
Implemente um redutor que produza o histograma de letras usadas em uma
lista de strings.

\begin{itemize}
\item Como testar a sua aplicação?
\item Como medir o comportamento assimptótico deste programa?
\end{itemize}
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 14}
Templates podem ser usados em muitas situações diferentes.

\begin{itemize}
\item Como utilizar templates para aumentar o reúso de um algoritmo de
ordenação?
\item Como diferentes dados podem ser ordenados?
\item Em que funções de comparação diferentes podemos pensar?
\end{itemize}
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 15}
Utilize templates para que possamos implementar uma versão mais reutilizável
do algoritmo de ordenação {\em quicksort}.

\begin{itemize}
\item Represente sua aplicação como um diagrama de classes UML.
\item Como testá-la?
\begin{itemize}
\item Que base de dados utilizar?
\item Quais as condições de contorno que devemos testar?
\item O que seriam bons testes para medir o desempenho da aplicação?
\item Como demonstrar, via um gráfico, o desempenho do algoritmo?
\item Que tipo de ruído pode comprometer a corretude de nosso gráfico?
\end{itemize}
\end{itemize}

\end{frame}

\end{document}
