Sei sulla pagina 1di 10

Universidade Federal de Minas Gerais UFMG Instituto de Cincias Exatas - ICEx Departamento de Cincia da Computao

Documentao TP 02
Processamento de texto: Pesquisa por rvore binria desbalanceada

MINAS GERAIS Outubro/2013 Saulo Arajo do Nascimento

INTRODUO

Este trabalho tem como inteno reportar a implementao de um processador de texto simples, e que este possa ser usado posteriormente para anlise e tratamento de dados. A partir de tal, possvel obter uma gama de aplicaes em diversas reas como sistemas de procura, ou at em mtodos de compresso de dados. Este ltimo possui extrema importncia quando trabalhamos com o trafego de dados pela rede, onde quantidades cada vez maiores de informao criam as estruturas chamadas de BigData[1]. Esta estrutura, devido quantidade de dados no catalogados e corretamente indexados, dificulta o uso pelos mtodos tradicionais de processamento de dados, especialmente no cenrio nacional onde somente uma pequena parte das empresas de T.I. possui o capital tecnolgico, humano e tcnico para lidar com esse tipo de informao. A estrutura de procura escolhida para tratar o texto foi a BST (Binary search tree) ou rvore de procura binria, que possui um baixo custo para insero de dados e um cdigo simples. A verso desbalanceada foi escolhida como proposta na especificao do trabalho. Esta escolha se deu provavelmente com o intuito didtico, pois o processo de insero e remoo contnuas em uma rvore binria desbalanceada aleatria levaria a perda de eficincia[2]. Este processo acaba por criar ramos internos com grau de assimetria elevado aumentando cada vez mais o caminho para busca dos dados, tornando este tipo de rvore mais ineficaz que uma rvore onde a insero e remoo no so aleatrios[2]. Para contrapor este problema seria necessria a criao de um processo no aleatrio de insero, onde se sabe previamente todos os termos a serem dispostos na rvore, implicando numa pr-anlise do texto o que tornaria o projeto excessivamente trabalhoso. Algo fora do escopo da disciplina.

Figura 1: Estrutura da rvore desbalanceada tpica

IMPLEMENTAO A implementao seguiu o padro j utilizado nos outros TPs da disciplina de AEDs II, onde temos trs arquivos: Cabealho: Estrutura do cabealho: Parte principal: arvore.h arvore.c main.c

Os Tipos abstratos de dados utilizados no cabealho seguem abaixo:

TADs:

Cdigo 1: TADs

A estrutura padro da rvore possui o n bsico desta com seu TAD registrador e os vetores para os prximos ns. Dentro do TAD Registrador temos a chave que servir como contador de recorrncia para um dado valor que ficar presente na string palavra, onde o comprimento mximo escolhido para tal foi de 200 caracteres, levando em considerao a maior palavra tpica para um texto padro.

Funes:

Cdigo 2: Funes em arvore.h

A implementao das funes foi feita no arquivo arvore.c, no apresentando muita dificuldade pois a estrutura padro desta rvore largamente conhecida[3].

Cdigo 3:Funo Busca

Cdigo 4:Funo Insere

Cdigo 5:Funes acha_menor e Remove

Ao contrrio das funes de insero e busca as funes de remoo retornam uma rvore, pois ao liberarmos um n da mesma outra rvore criada em seu lugar.

Figura 2: Remoo de um elemento na rvore - remove(30)

Cdigo 6:Funo Imprime

Programa Principal
O comando freopen ("entrada.txt","r",stdin) foi utilizado para transferir a estrada de dados stdin para os arquivos de teste. As funes minuscula e mudachar tratam os dados antes da insero na rvore

Cdigo 7:Funo main 1 parte

Cdigo 8:Funo main 2 parte

ESTUDO DE COMPLEXIDADE

Ao analisarmos a estrutura da rvore de busca percebemos que a anlise de complexidade do pior e melhor caso elementar[4]: Pior caso: O(h), onde h a altura mxima da rvore. Existe ainda a situao remota onde a rvore est totalmente desbalanceada, levando ao estado com O(n). Este caso muito improvvel considerando a funo de nosso cdigo. Melhor caso: O(1), onde o elemento procurado est na raiz.

Figura 3: Estrutura para procura

O entendimento do caso mdio exige uma anlise mais profunda: Considerando a rvore com profundidade descrita na figura ao lado, onde o comprimento do caminho interno a soma das profundidades de cada n.
Figura 4: Estrutura para anlise de complexidade

Caso o n contenha a raiz, o n de ndice i esquerda e o (n-i-1) n da direita possuem para a procura: T(n) = n - 1 + T(i) + T(n - i - 1) A raiz contribui com o valor de 1 para o comprimento do caminho de cada um dos n-1 ns. Se compararmos com a estrutura do QuickSort temos de forma anloga:

o que leva a: T(n) = O( log(n) ).

TESTES Os testes foram realizados em um Intel i5 com 6GB de memria RAM, e a plataforma utilizada foi o Windows 8. Vrios testes foram realizados no ambiente de execuo do IDE CodeBlocks .

Figura 5: Exemplo de programa de teste - CodeBlocks

Para comparao dos resultados dos textos mais longos a forma mais rpida encontrada foi com o uso do software notepad++.

Figura 6: Exemplo de programa de teste Notepad++

CONCLUSO

Este trabalho apresentou uma situao interessante quanto produo do cdigo. Enquanto a repetio da estrutura padro para a rvore binria foi uma tarefa simples, a acomodao das funes com os pedidos especficos de Busca, Insero e Impresso apresentou um nvel de dificuldade elevado. Apesar disto a experincia da implementao da rvore no foi desperdiada, sendo esta capaz de fornecer uma situao realista sobre a produo de algoritmos e softwares. Em um ambiente empresarial tpico, as ferramentas disponveis para a resoluo dos problemas ser comumente conhecida, mas sua adequao as caractersticas pedidas pelo cliente que elevam a dificuldade do projeto e consequentemente a seleo entre bons e maus profissionais.

BIBLIOGRAFIA [1] White, Tom (10 May 2012). Hadoop: The Definitive Guide. O'Reilly Media. p. 3. ISBN 978-1-1-44933877-0 [2] Jeffery L. Eppinger. An empirical study of insertion and deletion in binary trees. Communications of the ACM vol. 26, September 1983. [3] N. Ziviani. Projeto de Algoritmos: com implementaes em Pascal e C. Cengage Learning (Thomson / Pioneira), So Paulo, 2nd edition, 2004. [4] Knuth, Donald M. (1973), "6.2.2 Binary Tree Searching", The Art of Computer Programming III, Addison-Wesley, pp. 422451

Anexo Lista de programas utilizados: main.c lista.c lista.h

Potrebbero piacerti anche