50 lines
1.5 KiB
TeX
50 lines
1.5 KiB
TeX
\documentclass[10pt]{article}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage{amsmath,amsthm,amssymb}
|
|
\usepackage{fullpage}
|
|
\usepackage{url}
|
|
\pagenumbering{gobble}
|
|
\usepackage{hyperref}
|
|
\usepackage{graphicx}
|
|
\input{statement/preamble.tex}
|
|
\title{ Tutorial: Inclusão de Subintervalos}
|
|
\author{}
|
|
\date{}
|
|
\begin{document}
|
|
\maketitle
|
|
Nesse problema, devemos ordenar os intervalos $(a_i, b_i)$:
|
|
|
|
\begin{itemize}
|
|
\item Em ordem crescente de $a_i$.
|
|
\item Em caso de empate, em ordem decrescente de $b_i$.
|
|
\end{itemize}
|
|
|
|
Em seguida, devemos iterar sobre os intervalos ordenados, mantendo o maior valor de $b_i$
|
|
visto até o momento. Se encontrarmos um intervalo $(a_i, b_i)$ tal que $b_i$ seja menor ou
|
|
igual ao maior valor de $b_i$ visto até o momento, então esse intervalo é coberto por um
|
|
intervalo anterior e podemos descartá-lo. Caso contrário, atualizamos o maior valor de
|
|
$b_i$ visto até o momento.
|
|
|
|
O algoritmo abaixo implementa essa lógica.
|
|
|
|
\begin{algoritmo}
|
|
\caption{\Call{interval-cover}{$I$}}
|
|
\KwIn{Lista de intervalos $I[0,n-1]$}
|
|
\KwOut{Lista de intervalos $I'$ não cobertos por nenhum outro intervalo}
|
|
$I' \gets \emptyset$\;
|
|
\Call{sort}{$I$} \tcp{Ordena os intervalos com critérios especificados}
|
|
$\max_b \gets -\infty$\;
|
|
\ForEach{$(a_i, b_i) \in I$}{
|
|
\If{$b_i > \max_b$}{
|
|
$I'.\Call{append}{(a_i,b_i)}$\;
|
|
$\max_b \gets b_i$\;
|
|
}
|
|
}
|
|
\Return{$I'$}\;
|
|
\end{algoritmo}
|
|
|
|
|
|
\section*{Análise}
|
|
|
|
O passo de ordenação tem complexidade $\Theta(n \lg n)$ e domina o custo do algoritmo.\end{document}
|