\documentclass[dvips,12pt]{amsart}
%\documentclass[dvips,12pt]{amsart}
\usepackage[portuges]{babel}
\input{deftrees}
\input{deflogic}
\input{defseqs}

\author{Raul H.C. Lopes}
\title{Ordena\c{c}\~ao e \'arvores}
\def\heap{\emph{heap}}
\def\heapsort{\emph{heapsort}}
\def\qsort{\emph{quicksort}}
\newtheorem{qst}{Quest\~ao}
\def\binstree{\tree\ bin\'aria de pesquisa}
\def\splay{\emph{splay}}
\def\splaytree{\emph{splay tree}}
\begin{document}
\maketitle

Este documento apresenta uma lista de exerc\'{\i}cios que devem ser resolvidos e
entregues at\'e o dia da \'ultima prova do semestre. Resolv\^e-los \'e um
dos passos mais importantes na prepara\c{c}\~ao para a prova.

\section{Corre\c{c}\~ao de programas definidos indutivamente}
Nesta se\c{c}\~ao, apresente algorimos de forma axiom\'atica e prove 
sua corre\c{c}\~ao.

\begin{qst}\label{axiomatic}
	Apresente algorimos de forma axiom\'atica e prove 
sua corre\c{c}\~ao para os seguintes problemas:
\begin{enumerate}
	\item Selecionar o m\'{\i}nimo de uma seq\"u\^encia.
	\item Particionar uma seq\"u\^encia em rela\c{c}\~ao ao seu primeiro
		elemento.
	\item Ordenar uma seq\"u\^encia por \qsort.
	\item ordenar uma seq\"u\^encia \heapsort, usando um \heap\
		axiomaticamente definido.
\end{enumerate}

\end{qst}

\begin{qst}
	Qual \'e o m\'{\i}nimo e m\'aimo de compar\c{c}\~oes entre itens usado
	por cada um dos algoritmos da quest\~ao \ref{axiomatic}.
\end{qst}

\section{O conceito de invariante}
O conceito de invariante foi provavelmente um dos fundamentais de todo o curso.
A estutura de uma \'arvore bin\'aria de itens de $A$
pode ser vista como tendo como
propriedade invariante o fato de de que todo n\'o possui:

\begin{itemize}
	\item um item de tipo $A$;
	\item de zero a duas sub\'arvores de itens de tipo $A$.
\end{itemize}

Uma \'arvore bin\'aria \'e, ent\~ao, uma folha (\'arvore vazia), ou um 
n\'o carazcterizado por essa invariante.

Uma \binstree\ respeita essas propriedade, mas adiciona a invariante de que 
os itens dos n\'os est\~ao ordenados. 

\begin{qst}
	Para cada uma das estruturas abaixo, apresente as propriedade
	invariantes da estrutura e defina formalmente essas propreidades:
	\begin{itemize}
		\item \binstree;
		\item \btree;
		\item \tree\ splay;
		\item \tree\ binomial;
		\item heap binomial.
	\end{itemize}
\end{qst}

\begin{qst}
	Pdefina operadores de inser\c{c}\~ao e exclus\~ao em \binstree\ e 
	prove sua corre\c{c}\~ao.
\end{qst}

\begin{qst}
	Define um operador de inser\c{c}\~ao em \btree\ e prove sua
	corre\c{c}\~ao.
\end{qst}

\begin{qst}
	Define o operador de \emph{splay} de uma \splaytree\ e prove que ele 
	mant\'em a ordena\c{c}\~ao da \tree.
\end{qst}

\section{Invariante e deriva\c{c}\~ao de programas}
Nos exerc\'{\i}cios abaixo use a linguagem de comandos guardados de Dijkstra
para derivar programas e provar sua corre\c{c}\~ao.

\begin{qst}
	Que rel\c{c}\~ao exiiste entre  propriedades invariantes 
	e a core\c{c}\~ao parcial de
	programas?
\end{qst}

\begin{qst}
	O que \'e corre\c{c}\~ao total de programas?
\end{qst}

\begin{qst}\label{gcl}
	Derive programas, e prove sua corre\c{c}ao total, para:
	\begin{enumerate}
		\item Selecionar o m\'{\i}nimo de uma seq\"u\^encia.
		\item Particionar uma seq\"u\^encia\ em rela\c{c}\~ao a um
			elemento qualquer da mesma.
		\item Particionar uma seq\"u\^encia de inteiros positivos 
			em rela\c{c}\~ao primeiro bit de cada um deles.
		\item Intercalar duas seq\"u\^encias ordenadas.
		\item Ordenar uma seq\"u\^encia, usando \heapsort.
	\end{enumerate}
\end{qst}

\begin{qst}
	Qual \'e o m\'{\i}nimo e m\'aimo de compar\c{c}\~oes entre itens usado
	por cada um dos algoritmos da quest\~ao \ref{gcl}.
\end{qst}



\bibliographystyle{amsplain}
\bibliography{abbrev,formal,maths}

\end{document}

