\section{Radix based tree}
Esta se\cao\ da indexa\cao\ de strings via \aa rvores \trie\ e suas variantes.
A caracter\ii stica fundamental dessa organiza\cao\ de dados \ee\ de que a 
indexa\cao\ baseia-se num processo de distribui\cao\ dos strings por buckets 
de forma an\aa loga aos algoritmos de ordena\cao\ por distribui\cao.
Todos os exemplos desta se\cao\ apresentam indexa\cao\ dos sufixos de um texto dados. Nas figuras, os r\oo tulos das folhas definem o sufixo ali encontrado:
por exemplo, por uma folha com r\oo tulo $t_4$ indicam que o sufixo obtido
pela exclus\ao\ dos quatro caracteres iniciais do texto est\aa\ presente na
referida folha. 

\subsection{Trie}

A \aa rvore \trie\ foi a provavelmente a primeira estrutura proposta para 
indexar texto e certamente a primeira baseada em distribui\cao\ do texto 
baseada no alfabeto: ver \cite{dek:taocp:iii} para hist\oo ria e algoritmos
para trie e pesquisa digital em geral.
 
Os n\oo s externos de umna trie s\ao\ strings ou refer\^encias para strings.
Cada n\oo\ interno \ee\ mapeamento de um alfabeto, o alfabeto usado para
construir o texto, para \node s internos ou externos.
A \rffig{fig:trie.0} apresenta uma \trie\ com todos os sufixos de 
\textbf{baaaaz}. Note que, embora apresentada em \cite{dek:taocp:iii} como
estrutura para indexa\cao\ de strings, ela pode ser triviamente aplicada 
\aa\ indexa\cao\ de sufixos. Para tal, basta assegura que nenhum sufixo
de um texto \ee\ prefixo de outro sufixo.

\begin{ex}
	Prove que se o caracter final de um texto \ee\ distinto de todos
	os outros, ent\ao\ nenhum sufixo do texto \ee\ prefixo de outro
	sufixo do texto.
\end{ex}

A trie \ee\ uma estrura extremamente eficiente em termos de pesquisa: 
$O(n)$ passos s\ao\ necess\aa rios para determinar se um string de tamanho
$n$ existe em uma trie. O algoritmo de pesquisa \ee\ trivial: basta manter
a qualquer momento uma \rptr\ $p_s$ para o string e uma 
\rptr\ $p_t$ para a trie. A invariante
estabelecer\aa\ que o caminho percorrido da raiz at\ee\ antes do n\oo\ $p_t$
\ee\ igual ao prefixo que precede a $p_s$ para o string. Assumindo
que ao in\ii cio de uma transi\cao\ $p_s$ designe o caracter $x$, ap\oo s
a mesma $p_s$ ter\aa\ avan\ca do uma posi\cao\ e $p_t$ referenciar\aa\ 
$p_t(x)$. Quando $p_t(x)$ designa um string basta determinar se
esse string \ee\ igual ao string procurado.

Note que:
\begin{itemize}
	\item as folhas da trie fornecem a ordena\cao\ dos strings 
		indexados.
	\item \ee\ trivial realizar uma pesquisa parcial em que se procura
		um prefixo de uma palavra: afinal, o prefixo de
		uma palavra ocorre no texto indexado se ocorrer como prefixo
		de um de seus sufixos.
\end{itemize}
 \begin{figure}
	 \begin{center}
		 %\psfig{figure=trie0.ps}
		 \ingraphics{width=5.5in,height=5in}{trie0.jpg}{scale=0.8}{trie0.ps}
	 \end{center}
	 \caption{Trie para sufixos de \textbf{baaaaz}}
	 \label{fig:trie.0}
 \end{figure}
Embora eficiente, em termos de pesquisa a trie tende a ser
ineficiente em termos de espa\co. Na \rffig{fig:trie.0}, por exemplo, os
\innodes\ apresentam um aproveitamento de no m\aa ximo $20\%$. Uma solu\cao\
trivial para resolver esse problema consiste em representar cada n\oo\ como
lista linear: cada \innode\ da trie agora pode ser representado por um 
\innode\ de \aa rvore bin\aa ria, como na \rffig{fig:lc.trie.0}. A raiz dessa
\aa rvore, por exemplo, que para encontrar strings iniciados com o caracter
$a$, deve-se se seguir a \rptr\ que leva para o n\oo\ abaixo da raiz. 
Para encontrar strings iniciados com outros caracteres, tenta-se o mesmo
procedimento, a partir da \subtree\ \aa\ direita da raiz atual.

\begin{ex}
	Apresente uma defini\cao\ formal da \trie\ com compacta\cao\ de \innode.
\end{ex}

Apesar de mais eficiente em termos de uso de espa\co\ essa representa\cao\ 
ainda apresenta \innodes\ redundantes: os cinco \innodes\ abaixo do \node\
com r\oo tulo $b$ s\ao\ redundantes na medida em que s\ao\ usados como
ponto de distin\cao\ entre strings diferentes. A trie da \rffig{fig:ctrie.0}
apresenta a caracter\ii stica de que qualquer \innode\ tem, ao menos,
dois descendentes. 

\begin{ex}
	Prove que determinar se um string de tamanho $n$ ocorre em uma 
	\trie\ compactada demanda $O(Km)$, onde $K$ \ee\ o n\uu mero de
	caracters do alfabeto.
\end{ex}

 \begin{figure}
	 \begin{center}
		 %\psfig{figure=lctrie0.ps}
		 \ingraphicsfix{lctrie0}
	 \end{center}
	 \caption{Trie com compacta\cao\ de n\ii vel}
	 \label{fig:lc.trie.0}
 \end{figure}



 \begin{figure}
	 \begin{center}
		 %\psfig{figure=ctrie0.ps}
		 \ingraphicsfix{ctrie0}
	 \end{center}
	 \caption{Trie compactada para sufixos de \textbf{baaaaz}}
	 \label{fig:ctrie.0}
 \end{figure}

 A \rffig{fig:ctrie.1} apresenta uma trie compactada para os sufixos 
 de \textbf{baaaabaac}. 

 \begin{ex}
	 Como seria poss\ii vel representar uma trie compactada em usando
	 \node s de \tree\ bin\aa ria.
 \end{ex}
 
 \begin{figure}
	 \begin{center}
		 %\psfig{figure=ctrie1.ps}
		 \ingraphicsfix{ctrie1}
	 \end{center}
	 \caption{Trie compactada para sufixos de \textbf{baaaabaac}}
	 \label{fig:ctrie.1}
 \end{figure}

\subsection{PATRICIA}
Morrisson apresentou em 1968, veja em \cite{dek:taocp:iii}, a id\ee ia de
indexar os sufixos de um texto. Para tal, ele prop\^os uma estrutura chamada
\aa rvore PATRICIA que \ee\ uma trie compactada com as seguintes restri\coes:
\begin{itemize}
	\item o texto \ee\ visto como um string de bits;
	\item todo \innode\ tem exatamente dois descendentes;
	\item um \innode\ apresenta uma inteiro $b$ e particiona as folhas
		abaixo dele em dois grupos: um grupo, cujos strings t\^em bit
		$b$ igual a zero, e o grupo de strings com bit $b$ igual a 1.
\end{itemize}

As figuras \ref{fig:pat.0} a \ref{fig:pat.3} apresentam os est\aa gios 
intermedi\aa rios da constru\cao\ da \tree\ PATRICIA para o texto 
\textbf{baaad}.

 \begin{figure}
	 \begin{center}
		 %\psfig{figure=pat.0.ps}
		 \ingraphics{width=2in,height=2in}{pat0.jpg}{scale=0.8}{pat0.ps}
	 \end{center}
	 \caption{PATRICIA para dois sufixos de \textbf{baaad}}
	 \label{fig:pat.0}
 \end{figure}

 \begin{figure}
	 \begin{center}
		 %\psfig{figure=pat1.ps}
		 \ingraphics{width=2.2in,height=2.4in}{pat1.jpg}{scale=0.8}{pat1.ps}
	 \end{center}
	 \caption{PATRICIA para tr\^es sufixos de \textbf{baaad}}
	 \label{fig:pat.1}
 \end{figure}

 \begin{figure}
	 \begin{center}
		 %\psfig{figure=pat.2.ps}
		 \ingraphicsfix{pat2}
	 \end{center}
	 \caption{PATRICIA para quatro sufixos de \textbf{baaad}}
	 \label{fig:pat.2}
 \end{figure}

 \begin{figure}
	 \begin{center}
		 %\psfig{figure=pat3.ps}
		 \ingraphicsfix{pat3}
	 \end{center}
	 \caption{PATRICIA para os sufixos de \textbf{baaaaz}}
	 \label{fig:pat.3}
 \end{figure}

