Olá, leitores! Estou fazendo um minicurso de LaTeX e vim compartilhar o código da segunda atividade do curso.
Nessa atividade, fiz uma lista de questões sobre Complexidade de Algoritmos, Recursividade e Busca Binária e Sequencial, apresentando também as respectivas soluções. Esses foram assuntos que vi nos semestres anteriores (estou atualmente no 3º semestre).
Utilizei o pacote Minted para adicionar os códigos em Python com formatação.
A maior dificuldade dessa atividade foi colocar os códigos, pois o pacote ExSheets, que serve para configurar as listas de questões, quando combinado com o Minted, sempre dava erro. Tive de criar os códigos Python em arquivos .py e adicionar apenas o nome usando o Minted. Apenas dessa forma funcionou.
\documentclass{article}
\usepackage{amsmath, amssymb,amsfonts}
\usepackage[brazil]{babel}
\usepackage{soul} %Alterar texto
\usepackage{exsheets} %Pacote para criar listas
\usepackage{graphicx} %Para inserir imagens
\usepackage{color}
\usepackage{minted}
\title{Aula 3}
\author{Júlia K}
\date{\today}
%\SetupExSheets[solution]{print=true}
\SetupExSheets{headings=runin}
\SetupExSheets[question]{name = {}}
\SetupExSheets[solution]{name = {}}
\SetupExSheets[solution]{pre-body-hook=\color{blue}}
\begin{document}
\begin{center}
%trim=[esq, baixo, dir, cima]
\includegraphics[height=3cm, trim ={0 45 0 0}, clip=true]{logo_ufrpe.png}\\
Universidade Federal Rural de Pernambuco\\
Departamento de Estatística e Informática\\
Júlia Karolyne\\
Disciplina de Fundamentos de Problemas Computacionais\\
\vspace{0.5cm}
\textbf{{\LARGE Lista de Exercícios}}
\end{center}
%\listoffigures
\section{Complexidade de Algoritmos}
\begin{question}
Observe o programa abaixo que verifica se um número digitado pelo usuário é primo:
\inputminted{python}{q4.py}
\noindent Um matemático observou que não é preciso dividir pelos mesmos números pares maiores que 2 porque o número já terá a sua divisão por 2 testada logo na primeira rodada do for e, se ela retornar falso, significa que o número é ímpar e portanto ele também não seria divisível por nenhum número par. Ele também observou que só é preciso testar até metade do número, já que a partir deste valor o resultado seria menor do que 1 (não teria mais chance de retornar a divisão exata). Modifique o programa (reescreva poucas linhas, indicando sempre o número de linha que está sendo alterada) para reduzir para reduzir a complexidade do loop for, evitando o teste da divisão pelos números pares maiores que 2 e testando somente até a metade do número.
\end{question}
\begin{solution}
\inputminted{python}{s4.py}
\end{solution}
\section{Recursão}
\begin{question}
Crie uma função recursiva em Python chamada "divisivel3" que recebe um parâmetro "numero". Você deverá usar a recursão para verificar se "numero" é divisível por 3, isto é, se ocorre a divisão exata com resto 0. Contudo, você deverá utilizar a seguinte regra recursiva: Para verificar se um número é divisível por 3, basta somar os dígitos do número, com isto você terá um novo número. Se este novo número é divisível por 3, então o número original também é divisível por 3.
\end{question}
\begin{solution}
\inputminted{python}{s1.py}
\end{solution}
\section{Busca Sequencial e Busca Binária}
\begin{question}
Você trabalha em uma empresa de vendas online que mantém um catálogo de produtos ordenado pelo código do produto. Um cliente liga perguntando se um determinado produto está disponível. O catálogo é muito grande. Qual tipo de busca seria mais eficiente para localizar rapidamente o produto no catálogo? Explique por que essa busca é mais adequada.
\end{question}
\begin{solution}
A busca binária seria mais eficiente. Ela é adequada porque o catálogo está ordenado pelo código do produto. Ela reduz o número de comparações pela metade a cada passo, descartando metade da lista de cada vez. Uma busca sequencial precisaria percorrer cada elemento até encontrar o produto, o que seria muito mais lento para um catálogo grande.
\end{solution}
\begin{question}
Ainda relacionado à questão 3, responda: qual é a complexidade de tempo dessa busca no melhor, pior e caso médio?
\end{question}
\begin{solution}
\begin{itemize}
\item Melhor caso: O produto está no meio da lista → O(1)
\item Pior caso: O produto está no início ou no final, ou não existe → O(log n)
\item Caso médio: Em média, cerca de log₂(n) comparações → O(log n)
\end{itemize}
\end{solution}
\begin{question}
Vamos supor agora que você trabalha em uma pequena livraria que mantém um estoque de livros não ordenado. Um cliente liga perguntando se um livro específico está disponível. Qual tipo de busca seria mais adequada para localizar o livro neste caso? Explique por que essa busca é a escolha certa.
\end{question}
\begin{solution}
A busca sequencial (ou linear) é a mais adequada. Como o estoque não está ordenado, não é possível usar busca binária. A busca sequencial percorre os elementos um a um, comparando cada item até encontrar o livro ou terminar a lista. Para listas pequenas ou pouco organizadas, essa é a abordagem mais simples e confiável.
\end{solution}
\section{Soluções}
\printsolutions
\end{document}
Para visualizar o resultado desse código, ou seja, o documento, acesse o link.
0 Comentários