214
Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias para implementá-los. Nota inicial: no final deste material existem links para acesso a exemplos escritos em linguagem C. Introdução Para introduzir os conceitos de algoritmos recursivos, inicialmente vamos analisar a árvore genealógica da Família Bueno, representada na Figura 1. Os membros da quarta geração, André Bueno e Pedro Bueno Neto, possuem um ancestral direto comum, sendo ele Pedro Bueno Filho. Na geração de Pedro Bueno Filho, Mário Bueno tem o mesmo ancestral direto que Pedro Bueno Filho: Pedro Bueno. Subindo mais uma geração, Pedro Bueno, José Bueno e Julio Bueno descendem direta- mente do patriarca da família, Marcos Bueno, que até o momento não possui ancestrais conhecidos. Partindo de membros da quarta geração que estão pendurados em outros ramos da árvore, situação similar ocorre, até chegarmos ao patriarca. Em outras palavras, partindo da geração mais recente (no exemplo apresentado, a quarta geração), observa-se que um membro da família tem um ancestral direto, o qual tem um ancestral direto, e assim sucessivamente, até que se atinja o nível mais alto da árvore genealógica. A recursão está relacionada com essa ideia de proces- samentos sucessivos e repetitivos, até que uma determinada condição interrompa o processo. Figura 1 Árvore genealógica da Família Bueno.

Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Embed Size (px)

Citation preview

Page 1: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Algoritmos RecursivosProf. Fabiano Cutigi Ferrari

Objetivos desta Unidade:

Aprender o conceito de algoritmos recursivos e as técnicas necessárias para implementá-los.

Nota inicial: no final deste material existem links para acesso a exemplos escritos em linguagem C.

Introdução

Para introduzir os conceitos de algoritmos recursivos, inicialmente vamos analisar a árvore genealógica da Família Bueno, representada na Figura 1. Os membros da quarta geração, André Bueno e Pedro Bueno Neto, possuem um ancestral direto comum, sendo ele Pedro Bueno Filho. Na geração de Pedro Bueno Filho, Mário Bueno tem o mesmo ancestral direto que Pedro Bueno

Filho: Pedro Bueno. Subindo mais uma geração, Pedro Bueno, José Bueno e Julio Bueno descendem direta-mente do patriarca da família, Marcos Bueno, que até o momento não possui ancestrais conhecidos. Partindo de membros da quarta geração que estão pendurados em outros ramos da árvore, situação similar ocorre, até chegarmos ao patriarca.

Em outras palavras, partindo da geração mais recente (no exemplo apresentado, a quarta geração), observa-se que um membro da família tem um ancestral direto, o qual tem um ancestral direto, e assim sucessivamente, até que se atinja o nível mais alto da árvore genealógica. A recursão está relacionada com essa ideia de proces-samentos sucessivos e repetitivos, até que uma determinada condição interrompa o processo.

Figura 1 Árvore genealógica da Família Bueno.

Page 2: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

O exemplo de uma árvore genealógica não foi escolhido por acaso. Na verdade, como veremos mais adiante na disciplina Estruturas de Dados 2, a recursão é um mecanismo bastante conveniente para implementar al-goritmos que manipulam estruturas de dados que representam as árvores. Veremos que algoritmos recursivos implementam soluções enxutas e intuitivas para manipular árvores, principalmente se forem comparados com soluções não recursivas. Mas isso será visto mais adiante na disciplina. Por agora, vamos a alguns conceitos e exemplos básicos de algoritmos recursivos, necessários para o entendimento e posterior aplicação em solu-ções de problemas mais complexos.

Recursão: Conceitos Básicos

Recursão é um conceito fundamental da matemática e da ciência da computação. Na matemática, a recursão aparece em funções que são definidas em termos delas próprias, sempre partindo de casos mais simples das próprias funções. Por exemplo, Tanenbaum, Langsan e Augenstein, em seu clássico livro sobre estruturas de dados, exemplificam a recursão com base na multiplicação de números naturais. Em suma, o resultado de x vezes y (sendo x e y números inteiros positivos) é definido como x somado a si mesmo um número y de vezes. Sendo x = 6 e y = 3, a multiplicação x vezes y pode ser representada pela seguinte expressão:

6 vezes 3 = 6 vezes 2 + 6 = 6 vezes 1 + 6 + 6 = 6 + 6 + 6 = 18

Ou seja, a multiplicação de x por y é decomposta em casos mais simples: 6 vezes 3 é decomposto em 6 vezes 2 + 6, em seguida 6 vezes 2 é decomposto em 6 vezes 1 + 6, e, por fim, chega-se à soma de x um número y de vezes, a qual resulta no produto final.

Em computação, um algoritmo é dito recursivo quando ele chama a si mesmo. A recursão é um poderoso re-curso de desenvolvimento de algoritmos que leva a soluções concisas e elegantes para problemas que também poderiam ser resolvidos de forma iterativa, com o uso de estruturas de repetição convencionais. Como será visto mais adiante nesta unidade, às vezes é mais interessante resolver um problema de forma iterativa do que de forma recursiva. Por outro lado, conforme mencionado anteriormente, a recursão pode levar a soluções concisas que facilitam o entendimento da solução proposta.

Um Exemplo: Calculando o Fatorial de um Número

Nota: o exemplo do cálculo do fatorial de um número será retomado no decorrer da disciplina, na unidade que introduz os conceitos de Árvores Binárias e Árvores Binárias de Busca.

Para exemplificar o processo de um algoritmo recursivo, consideremos o cálculo do fatorial de um número inteiro positivo n, que é definido matematicamente como sendo a multiplicação de n por todos os seus ante-cessores positivos maiores que zero. Simbolicamente, o fatorial de um número n é representado e calculado pela seguinte expressão:

n! = n * (n menos 1) * (n menos 2) * ... * 2 * 1

Ainda, por definição, temos:

0! = 1

1! = 1

Page 3: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Analogamente à multiplicação de números inteiros positivos, podemos definir o fatorial de um número n em função do fatorial dos seus sucessores. Por exemplo, considerando n = 5, temos as seguintes expressões váli-das (Figura 2):

Figura 2 Cálculo do fatorial com definições recursivas.

Ou seja, o fatorial de 5 pode ser calculado com base no fatorial de 4 que pode ser calculado com base no fato-rial de 3, e assim sucessivamente até que cheguemos ao cálculo do fatorial de 1, que por definição é igual a 1.

Computacionalmente, pensemos em uma função que recebe um número inteiro n como parâmetro e a função encarrega-se de calcular o fatorial de n. O cálculo desse fatorial pode ser feito de forma iterativa, utilizando uma estrutura de repetição convencional (por exemplo, uma estrutura para-faça), conforme apresentado na Figura 3.

// n deve ser um número inteiro maior ou igual a zero

1 funcao fact(n: inteiro): inteiro

2 var i, fatorial: inteiro

3 inicio

4 fatorial := 1

5 se (n > 0) entao

6 para i de n ate 1 passo -1 faca

7 fatorial := fatorial * i

8 fimpara

Page 4: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

9 fimse

10 retorne fatorial

11 fimfuncao

Figura 3 Cálculo do fatorial utilizando uma função iterativa.

Considerando que o cálculo do fatorial de um número é uma função matemática recursiva por natureza, pois o cálculo do fatorial de um número é definido a partir dos casos mais simples da mesma função, podemos utilizar uma abordagem recursiva para implementar uma solução equivalente – em termos de funcionalidade – à apresentada na Figura 3. Uma possível implementação recursiva para o cálculo do fatorial é mostrada na Figura 4.

// n deve ser um número inteiro maior ou igual a zero

1 funcao fact(n: inteiro): inteiro

2 inicio

3 se (n > 0) entao

4 retorne ( n * fact(n -1) )

5 senao

6 retorne 1

7 fimse

8 fimfuncao

Figura 4 Cálculo do fatorial utilizando uma função recursiva.

Entendendo a Recursão

Para entender como funciona a ideia de recursão em algoritmos, vamos tomar como exemplo o algoritmo de cálculo de fatorial apresentado na Figura 4.

Inicialmente, faremos uma simulação da execução desse algoritmo para o caso em que a função é chamada para calcular o fatorial de n = 4. Essa simulação é ilustrada na Figura 5, na qual as tabelas representam a execução linha a linha da função fact (listada na Figura 4), incluindo detalhes da atualização da variável n (parâmetro da função) e comentários sobre a execução da função. Notem que as setas azuis representam as chamadas à função fact e as setas verdes representam o retorno após a execução da função.

Page 5: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 5 Simulação da função recursiva que calcula o fatorial de um número.

Na primeira chamada à função fact, a função recebe um parâmetro n = 4. A condição da linha 3 é avaliada como VERDADEIRO, então a linha 4 é executada. Repare que a linha 4 inclui uma multiplicação da variável n pelo resultado de uma nova chamada à função fact, portanto a instrução de retorno fica aguardando para ser executada. Essa é a chamada recursiva da função. Note também que essa nova chamada à função fact é feita com um valor diferente de argumento: n = 3.

Na segunda chamada à função fact, a função agora recebe um parâmetro n = 3. A condição da linha 3 é nova-mente avaliada como VERDADEIRO, então a linha 4 é executada. A instrução de retorno contida na linha 4 novamente fica aguardando para ser executada, até que a execução de uma nova chamada à função fact, agora com argumento n = 2, seja concluída. Esse processo se repete para a chamada recursiva à função fact com argumento n = 1.

Ao chegar a quinta chamada à função fact, algo diferente ocorre. O valor recebido como parâmetro é agora n = 0, o que leva a condição da linha 3 ser avaliada como FALSO. Isso implica no retorno de um valor que

Page 6: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

não depende de uma chamada recursiva (linha 6). A partir desse retorno, todas as chamadas recursivas à fun-ção fact são resolvidas. Ou seja, todos os retornos que estavam aguardando uma execução da função fact são finalmente executados, resultando na saída final da primeira chamada à função, com o valor do fatorial de n = 4, calculado como 24.

Critério de Parada: Um Ponto Fundamental de um Algoritmo Recursivo

Um ponto muito importante em um algoritmo recursivo é garantir que o algoritmo não gere uma sequência infinita de chamadas a si mesmo. Ou seja, deve-se estabelecer uma condição que, quando avaliada, leve ao encerramento das chamadas recursivas do algoritmo. Na verdade, definir um critério de parada é importante para qualquer algoritmo que contém alguma estrutura de repetição.

No exemplo introdutório de cálculo da multiplicação de dois números inteiros positivos, x vezes y, o critério que define a parada da recursão é a identificação do segundo fator da multiplicação como sendo igual a 1. Em outras palavras, a recursão encerrar-se-à quando y = 1, conforme destacado na Figura 6.

Figura 6 Critério de parada da multiplicação de números inteiros positivos utilizando recursão.

No exemplo do algoritmo que calcula o fatorial de um número (listado na Figura 4 e simulado na Figura 5), o critério que define a parada está especificado na linha 3, por meio da condição “se (n > 0)”. Nesse ponto, se essa condição for avaliada como VERDADEIRO, uma nova chamada recursiva é realizada (linha 4 da Figura 4). Entretanto, se a condição for avaliada como FALSO, um retorno independente de chamada recursiva é executado (linha 6 da Figura 4).

Outro Exemplo: A Busca Binária

Vejamos agora um exemplo mais relacionado aos problemas computacionais. Para isso, consideremos um vetor de números inteiros cujos elementos encontram-se organizados em ordem crescente (por exemplos, códigos de ID de usuários recuperados da base de dados de uma biblioteca). Em algum momento, um usuário solicita o empréstimo de um livro e, para isso, deve fornecer seu ID de usuário. Nesse momento, é necessário verificar se esse ID existe no vetor mencionado, para então recuperar os dados do usuário e efetuar o emprés-timo do livro. Note que é possível que esse ID não exista, ou seja, que o usuário não esteja registrado na base de dados.

Há diversas formas de se buscar esse ID no vetor. Uma delas seria percorrer o vetor desde o seu início, até encontrar o ID informado. Entretanto, considerando que o vetor está ordenado, existe uma forma mais eficien-te de fazer a busca pelo ID, a chamada busca binária. A ideia da busca binária é olhar o elemento central do vetor ordenado. Caso esse seja o elemento procurado, encerra-se a busca e retorna-se a posição do elemento no vetor. Caso o elemento central não seja o elemento procurado, divide-se o espaço de busca (ou seja, o vetor) ao meio, e aplica-se novamente a estratégia na metade do vetor que pode conter o elemento procurado.

Para facilitar o entendimento, consideremos o exemplo apresentado na Figura 7. Vamos supor que os oito elementos presentes no vetor sejam IDs de usuários da biblioteca e que desejamos pesquisar se o ID = 88 está registrado no sistema.

Page 7: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 7 Busca binária de um elemento em um vetor ordenado.

De acordo com a ideia da busca binária, inicialmente considera-se todo o vetor como espaço de busca (passo 1). Sendo assim, olha-se o elemento central do vetor (ID = 45) e conclui-se que ele não é igual ao ID procu-rado (passo 2). Em seguida, o espaço de busca é reduzido à metade superior do vetor, pois 88 > 45, ou seja, o ID procurado possivelmente está nessa metade superior (passo 3). No passo 4, olha-se o elemento central da região considerada do vetor (ID = 100), e novamente conclui-se que ele não é igual ao ID procurado. O espaço de busca é novamente reduzido à metade do anterior, porém considerando-se a metade inferior (passo 5), pois 88 > 100. Diferentemente das comparações anteriores, agora olhando o elemento central do espaço de busca (que ficou reduzido a um único elemento), contata-se que se trata do elemento procurado (ID = 88), retornando-se então a posição desse elemento no vetor.

Nesse exemplo da busca binária, o conceito fundamental da recursão está na redução do problema da busca para casos mais simples do mesmo problema por meio da redução do espaço pesquisado. A parada ocorre quando não é mais possível dividir o vetor em duas partes, pois somente um elemento está presente no espaço de busca. Quando isso acontece, duas situações são possíveis: o elemento restante é o elemento procurado, ou o elemento procurado não está presente no vetor.

Na Figura 8 é apresentada uma implementação recursiva do algoritmo de busca binária. As chamadas recur-sivas, com a diminuição do espaço de busca, ocorrem nas linhas 12 (metade inferior) e 14 (metade superior). A parada das chamadas recursivas pode ocorrer em duas situações: quando não há mais espaço para buscar um elemento (condição testada na linha 4) ou quando o elemento foi encontrado (condição testada na linha 8).

// ‘A’ é um vetor de números inteiros

// ‘x’ é o elemento procurado

Page 8: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

// ‘comeco’ e ‘fim’ são os índices inicial e final do vetor, respectivamente

1 funcao binarySearch(x, comeco, fim: inteiro): inteiro

2 var k: inteiro

3 inicio

4 se ( comeco > fim ) entao // condição de parada

5 retorne -1

6 fimse

7 k <- ( comeco + fim ) \ 2

8 se ( x = A[k] ) entao // encontrou o elemento

9 retorne k

10 senao

11 se ( x < A[k] ) entao // reduz o espaco de busca para metade inferior

12 retorne binarySearch( x, comeco, k-1 )

13 senao // reduz o espaco de busca para metade superior

14 retorne binarySearch( x, k+1, fim )

15 fimse

16 fimse

17 fimfuncao

Figura 8. Algoritmo que implementa a busca binária recursiva.

Ser ou não Ser Recursivo?

Conforme destacado por Tanenbaum, Langsan e Augenstein, em muitos casos resolver problemas com algo-ritmos iterativos pode ser mais simples e eficiente. Este pode ser o caso dos dois exemplos apresentados nesta unidade (fatorial e busca binária), pois versões iterativas dos dois algoritmos não são significativamente mais complexas do que as versões recursivas (isso pode ser observado nos exemplos escritos em C fornecidos ao

Page 9: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

final desta unidade).

Além disso, a própria execução de algoritmos iterativos geralmente requer menos uso de memória, tendo em vista que a recursão geralmente requer um espaço de memória independente para cada execução recursiva do algoritmo. Isso pode ser observado na simulação do cálculo do fatorial ilustrada na Figura 5.

Por outro lado, veremos mais adiante na nossa disciplina que o mecanismo de recursão torna as soluções mais “fáceis” quando tratamos de problemas que exigem soluções mais complexas, mesmo em detrimento do de-sempenho do algoritmo devido à sobrecarga de uso de memória durante a execução. Levando-se em conta a tendência de que os recursos computacionais tornem-se cada vez mais fartos, a criação de soluções recursivas tende a trazer vantagem aos programadores, que não terão que projetar complexos algoritmos iterativos para resolver problemas que podem ser naturalmente resolvidos com mecanismos de recursão.

Exemplos Implementados em Linguagem C

Exemplos de implementações recursivas de algoritmos utilizados como exemplos nesta unidade podem ser obtidos no AVA Moodle (Unidade 1, item Recursos), ou diretamente pelos links a seguir:

• Cálculo do Fatorial (3 versões recursivas e uma iterativa)

• Busca Binária (1 versão recursiva e uma iterativa)

Referências

Korsh, J. F. Data Structures, Algorithms, and Program Style. PWD Publishers, 1986.

Tenenbaum, Aaron M.; Langsam, Yedidyah; Augenstein, Moshe J.4 Estruturas de Dados Usando C. Makron Books, 1995.

Page 10: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Estruturas de Dados 2

Segundo Semestre 2012

Bacharelado em Sistemas de Informação (G4)

Prof. Fabiano Ferrari

Especificação do Trabalho Prático - Parte 1

Este trabalho prático requer a elaboração de um aplicativo que disponibiliza as funcionalidades de uma agenda de telefones. Os dados dos contatos da agenda devem ser armazenados em memória utilizando uma árvore binária de busca. As seguintes funcionalidades devem ser disponibilizadas aos usuários da agenda:

• Inserção de novos contatos na agenda. Os dados do contato são: código de assinante, nome, e telefone. Um contato só deverá ser inserido se ele ainda não estiver presente na agenda.

• Consulta de contatos na agenda. A consulta deve ser feita com base no código de assinante do contato. Dessa forma, não haverá mais de um contato para ser recuperado em uma única busca.

• Alteração dos dados de contatos da agenda. A busca do contato a ser alterado deverá ser feita com base no código de assinante do contato. Para simplificar o problema, considere que não é possível alterar o código de assinante de um contato já presente na agenda. Somente o nome e o telefone podem ser alterados.

• Remoção de contatos da agenda. A busca do contato a ser removido deverá ser feita com base no código de assinante do contato.

A agenda deve ser inicialmente carregada com os contatos listados na Tabela 1. Para isso, pode-se utilizar um arquivo de dados auxiliar, que será lido pelo aplicativo quando ele é executado. A utilização do arquivo é opcional. Alternativamente, os dados dos contatos iniciais podem estar internamente definidos em uma função no programa cria-do. Os contatos devem ser inseridos na ordem em que aparecem na tabela, gerando uma árvore como a apresentada na Figura 1.

Também deve ser elaborado um breve manual de usuário da agenda. O manual deve explicar como o usuário deve proceder para executar as funcionalidades implementadas na agenda (inserção, consulta, alteração, remoção). Inclua screenshots para facilitar o entendimento.

Instruções Gerais

• O trabalho deverá ser realizado pelo grupo definido na APA1.1. Exceções devem ser previamente autorizadas pelo professor.

• O trabalho deve ser entregue em arquivo único no AVA Moodle da disciplina. O arquivo deverá conter o pro-grama escrito em linguagem C, compilável no ambiente DevC++. Quaisquer outros arquivos necessários (por exemplo, manual do usuário e arquivo de dados) deverão ser enviados junto com o programa.

Tabela 1 Lista inicial de contatos a serem inseridos na agenda.

Código de Assinante Nome Telefone1035 Pedro Machado 342011651020 Luis Albuquerque 34003344

Page 11: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

1015 Anderson Aquino 221399001030 Maria Ferreira 314422221050 Bento Marcondes 320001011045 Luzia Pedroso 221010001002 Marcos Teixeira 311122001080 Renata Hernandes 22550034

Figura 1: Configuração da árvore binária após a inserção dos contatos da Tabela 1.

Critérios de avaliação

Os seguintes itens serão considerados para a avaliação do trabalho realizado, com seus respectivos pesos na nota final do trabalho:

• Peso 4: Corretude e completude das funcionalidades da agenda (inserção, consulta, alteração e remoção de contatos), todas baseadas nas operações de manipulação de árvores binárias.

• Peso 1: Qualidade da interface de usuário criada. A interface pode ser criada no modo texto, porém com intera-ção clara entre o usuário e a agenda.

• Peso 1: Qualidade da documentação interna do código e do manual de usuário.

Page 12: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Estruturas de Dados 2

Segundo Semestre 2012

Bacharelado em Sistemas de Informação (G4)

Prof. Fabiano Ferrari

Especificação do Trabalho Prático - Parte 2

Este trabalho prático dá continuidade ao trabalho realizado na unidade anterior (Unidade 3). Para realizá-lo com sucesso, deve-se criar uma nova versão do aplicativo que disponibiliza as funcionalidades de uma agenda de telefones. Essa nova versão deverá utilizar uma árvore AVL (árvore binária de busca balanceada) para armazenar os contatos da agenda. O mesmo conjunto de funcionalidades deve ser preservado, sendo elas:

• Inserção de novos contatos na agenda. Os dados do contato são: código de assinante, nome, e telefone. Um contato só deverá ser inserido se ele ainda não estiver presente na agenda.

• Consulta de contatos na agenda. A consulta deve ser feita com base no código de assinante do contato. Dessa forma, não haverá mais de um contato para ser recuperado em uma única busca.

• Alteração dos dados de contatos da agenda. A busca do contato a ser alterado deverá ser feita com base no código de assinante do contato. Para simplificar o problema, considere que não é possível alterar o código de assinante de um contato já presente na agenda. Somente o nome e o telefone podem ser alterados.

• Remoção de contatos da agenda. A busca do contato a ser removido deverá ser feita com base no código de assinante do contato.

Funcionalidade adicional: Para facilitar a verificação do funcionamento dos algoritmos de manipulação de ár-vores AVL, pede-se que seja criada uma função que imprima a configuração atual da árvore na tela, exibindo no mínimo os códigos de assinantes presentes na agenda. Note que há várias formas de se imprimir uma árvore na tela, sendo a de parêntese aninhado uma forma bastante comum.

IMPORTANTE: O aplicativo criado deve oferecer ao usuário a opção de imprimir a árvore corrente na tela. Sendo assim, o manual de usuário da agenda deve ser atualizado para incluir a funcionalidade de impressão da árvore que foi acrescentada.

A agenda deve ser inicialmente carregada com os contatos listados na Tabela 1. Para isso, pode-se utilizar um arquivo de dados auxiliar, que será lido pelo aplicativo quando ele é executado. A utilização do arquivo é opcional. Al-ternativamente, os dados dos contatos iniciais podem estar internamente definidos em uma função no programa criado. Os contatos devem ser inseridos na ordem em que aparecem na tabela, gerando uma árvore como a apresentada na Figu-ra 1. Notem que a árvore mostrada no exemplo já se encontra balanceada, de acordo com as propriedades de uma árvore AVL. Entretanto, a inserção e a remoção de contatos da agenda podem resultar em um desbalanceamento, requerendo então a chamada à função que faz o balanceamento da árvore.

Tabela 1 Lista inicial de contatos a serem inseridos na agenda.

Código de Assinante Nome Telefone1035 Pedro Machado 342011651020 Luis Albuquerque 340033441015 Anderson Aquino 221399001030 Maria Ferreira 31442222

Page 13: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

1050 Bento Marcondes 320001011045 Luzia Pedroso 221010001002 Marcos Teixeira 311122001080 Renata Hernandes 22550034

Figura 1: Configuração da árvore binária após a inserção dos contatos da Tabela 1.

Instruções Gerais

• O trabalho deverá ser realizado pelo grupo definido na APA1.1. Exceções devem ser previamente autorizadas pelo professor.

• O trabalho deve ser entregue em arquivo único no AVA Moodle da disciplina. O arquivo deverá conter o pro-grama escrito em linguagem C, compilável no ambiente DevC++. Quaisquer outros arquivos necessários (por exemplo, manual do usuário e arquivo de dados) deverão ser enviados junto com o programa.

Critérios de avaliação

Os seguintes itens serão considerados para a avaliação do trabalho realizado, com seus respectivos pesos na nota final do trabalho:

• Peso 4: Corretude e completude das funcionalidades da agenda (inserção, consulta, alteração e remoção de contatos), todas baseadas nas operações de manipulação de árvores binárias.

• Peso 1: Qualidade da interface de usuário criada. A interface pode ser criada no modo texto, porém com intera-ção clara entre o usuário e a agenda.

• Peso 1: Qualidade da documentação interna do código e do manual de usuário.

Page 14: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Prof. Fabiano FerrariEstruturas de Dados 22º Semestre 2013Bacharelado em sistemas de informação (G5)

Especificação do Trabalho Prático - Parte 1Este trabalho prático requer a elaboração de um aplicativo que disponibiliza as funcionalidades de uma

agenda de contatos. Os dados dos contatos da agenda devem ser armazenados em memória utilizando uma árvore binária de busca. As seguintes funcionalidades devem ser disponibilizadas aos usuários da agenda:• Inserção de novos contatos na agenda. Os dados do contato são: código de assinante, nome, e-mail e

telefone. Um contato só deverá ser inserido se ele ainda não estiver presente na agenda.• Consulta de contatos na agenda. A consulta deve ser feita com base no código de assinante do contato. Dessa

forma, não haverá mais de um contato para ser recuperado em uma única busca.• Alteração dos dados de contatos da agenda. A busca do contato a ser alterado deverá ser feita com base no

código de assinante do contato. Para simplificar o problema, considere que não é possível alterar o código de assinante de um contato já presente na agenda. Somente o nome, o e-mail e o telefone podem ser alterados.

• Remoção de contatos da agenda. A busca do contato a ser removido deverá ser feita com base no código de assinante do contato.

O programa deve oferecer um menu inicial que terá como opções as funcionalidades implementadas para a agenda.

A agenda deve ser inicialmente carregada com os contatos listados na Tabela.1. Para isso, pode-se utilizar um arquivo de dados auxiliar, que será lido pelo aplicativo quando ele é executado. A utilização do arquivo é opcional. Alternativamente, os dados dos contatos iniciais podem estar internamente definidos em uma função no programa criado. Os contatos devem ser inseridos na ordem em que aparecem na tabela, gerando uma árvore como a apresentada na Figura 1.

Também deve ser elaborado um breve manual de usuário da agenda. O manual deve explicar como o usuário deve proceder para executar as funcionalidades implementadas na agenda (inserção, consulta, alteração, remoção). Inclua screenshots para facilitar o entendimento.

Tabela 1: Lista inicial de contatos a serem inseridos na agendaCódigo de Assinante Nome e-mail Telefone

1035 Pedro Alencar [email protected] 342011651020 Luis Albuquerque [email protected] 340033441015 Anderson Aquino [email protected] 221399001030 Maria Ferreira [email protected] 314422221050 Bento Marcondes [email protected] 320001011045 Luzia Pedroso [email protected] 221010001002 Marcos Teixeira [email protected] 311122001080 Renata Hernandes [email protected] 22550034

Page 15: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 1: Configuração da árvore binária após a inserção dos contatos da Tabela 1.Instruções Gerais

• O trabalho deverá ser realizado pelo grupo definido na APA1.1. Exceções devem ser previamente autorizadas pelo professor.

• O trabalho deve ser entregue em arquivo único no AVA Moodle da disciplina. O arquivo deverá conter o programa escrito em linguagem C, compilável no ambiente DevC++. Quaisquer outros arquivos necessários (por exemplo, manual do usuário e arquivo de dados) deverão ser enviados junto com o programa.Critérios de avaliação

Os seguintes itens serão considerados para a avaliação do trabalho realizado, com seus respectivos pesos na nota final do trabalho:

• (Peso 4): Corretude e completude das funcionalidades da agenda (inserção, consulta, alteração, remoção), todas baseadas nas operações de manipulação de árvores binárias.

• (Peso 1): Qualidade da interface de usuário criada (menu de opções e demais operações solicitadas para a agenda). A interface pode ser criada no modo texto, porém com interação clara entre o usuário e a agenda.

• (Peso 1): Qualidade da documentação interna do código e do manual de usuário.

Page 16: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Prof. Fabiano FerrariEstrutura de dados 22º semestre 2013Bacharelado em sistemas de informação (G5)

Especificação do Trabalho Prático - Parte 2

Este trabalho prático dá continuidade ao trabalho realizado na unidade anterior (Unidade 3). Para realizá-lo com sucesso, deve-se criar uma nova versão do aplicativo que disponibiliza as funcionalidades de uma agenda de telefones. Essa nova versão deverá utilizar uma árvore AVL (árvore binária de busca balanceada) para armazenar os contatos da agenda.

Funcionalidade adicional: Para facilitar a verificação do funcionamento dos algoritmos de manipulação de árvores AVL, pede-se que seja criada uma função que imprima a configuração atual da árvore na tela, exibindo no mínimo os códigos de assinantes presentes na agenda. Note que há várias formas de se imprimir uma árvore na tela, sendo a de parênteses aninhados uma forma bastante comum.IMPORTANTE: O aplicativo a ser criado deve oferecer ao usuário a opção de imprimir a árvore corrente na tela. Sendo assim, o menu de opções e o manual de usuário da agenda devem ser atualizados para incluir a funcionalidade de impressão da árvore que foi acrescentada.

A agenda deve ser inicialmente carregada com os mesmos contatos incluídos na Tabela 1 da Parte 1 do Trabalho Prático. Notem que a árvore mostrada no exemplo da Parte 1 já se encontra balanceada, de acordo com as propriedades de uma árvore AVL. Entretanto, a inserção e a remoção de contatos da agenda podem resultar em um desbalanceamento, requerendo então a chamada da função que faz o balanceamento da árvore.

Instruções Gerais• O trabalho deverá ser realizado pelo grupo definido na APA1.1. Exceções devem ser previamente

autorizadas pelo professor.• O trabalho deve ser entregue em arquivo único no AVA Moodle da disciplina. O arquivo deverá conter

o programa escrito em linguagem C, compilável no ambiente DevC++. Quaisquer outros arquivos necessários (por exemplo, manual do usuário e arquivo de dados) deverão ser enviados junto com o programa.

Critérios de avaliaçãoOs seguintes itens serão considerados para a avaliação do trabalho realizado, com seus respectivos

pesos na nota final do trabalho:

• (Peso 4): Corretude e completude das funcionalidades da agenda (inserção, consulta, alteração, remoção e impressão da árvore), todas baseadas nas operações de manipulação de árvore do tipo AVL.

• (Peso 1): Qualidade da interface de usuário criada (menu de opções e demais operações solicitadas para a agenda). A interface pode ser criada no modo texto, porém com interação clara entre o usuário e a agenda

• (Peso 1): Qualidade da documentação interna do código e do manual de usuário.

Page 17: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Estrutura de dados: algoritmos, análise da complexidade e implementação em Java e C/C++

P. 278 a 281 – Capitulo7

7 – Estruturas de dados do tipo árvore

As estruturas de dados do tipo árvore são não lineares, ou seja, os elementos que as compõem não estão armazena-dos de forma sequencial e também não estão todos encadeados. A Figura 7.1 ilustra duas árvores.

Árvores binaria

Uma árvore binária é um conjunto finito de elementos, onde cada elemento é denominado nó e o primeiro é conhe-cido como raiz da árvore. Esse conjunto pode estar vazio ou ser particionado em três subconjuntos distintos, sendo eles: 1° subconjunto (nó raiz), 2° subconjunto (sub-árvore esquerda), como mostra a Figura 7.2.

Figura 7.2 – Árvore binaria

Page 18: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Árvores binárias podem ser ilustradas de três formas distintas, conforme a Figura 7.3.

Figura 7.3 – Ilustrações distintas a uma árvore binária

Toda árvore binária possui as seguintes propriedades:

a) Todos os nós de uma sub-árvore direita são maiores que o nó da raiz.

b) Todos os nós de uma sub-árvore esquerda são menores que o nó raiz.

c) Cada sub-árvore é também uma árvore binaria.

d) O grau de um nó representa o seu número de sub-árvores. A Figura 7.4 mostra os graus dos nós de uma árvore-binaria.

Figura 7.4 – Graus dos nós de uma árvore binaria.

e) Em uma árvore binária, o grau máximo de um nó é 2.

f) O grau de uma árvore é igual ao máximo dos graus de todos os seus nós.

g) Uma árvore binária tem grau máximo igual a 2.

h) Nó pai, Figura 7.5: nó acima e com ligação direta a outro nó.

i) Nó filho, Figura 7.5: nó abaixo e com ligação direta a outro nó. São os nos raízes das sub-árvores.

j) Nós irmãos, Figura 7.5: são os nós que possuem o mesmo pai.

k) Nó folha ou terminal, Figura 7.5: nó que não possui filhos.

Page 19: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 7.5 –Nós raiz, pai, filho, irmão e folha

l) Nó ancestral, Figura 7.6: são os nós que estão acima de um nó e possuem ligações diretas ou indiretas.

Figura 7.6 – Nós ancestrais

m) Nó descendente, Figura 7.7: são os nós que estãoque estão abaixo de um nó e possuem ligação direta ou indireta.

Page 20: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 7.7 – Nós descendentes

n) Nós descendentes direito, Figura 7.8: são os nós que estão abaixo de um nó, possuem ligação direta ou indi-reta e fazem parte de uma sub-árvore direita.

Figura 7.8 – Nós descendentes direito

o) Nós descendentes esquerdo, Figura 7.8: são os nós que estão abaixo de um nó, possuem ligação direta ou indireta e fazem parte de uma sub-árvore esquerda.

Page 21: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

7.9 - Nós descendentes esquerdo

p) Nível de um nó, Figura 7.10: é a sua distancia do nó raiz. Logo, o nível do nó raiz é sempre zero.

q) Altura ou profundidade de um a árvore, Figura 7.10: é o nível do nó mais distante da raiz.

7.10 – Nível e altura

r) Expressão que representa o número máximo de nós em um nível da árvore binária = 2n, onde n é o nível em questão , Figura 7.11.

Page 22: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 7.11 – Número máximo de nós em um nível

s) Árvore estritamente binária, Figura 7.12: árvore em que todos os nós tem 0 ou 2 filhos.

t) Expressão que representa o número de nós de uma árvore estritamente binária = 2n – 1, onde n é o número de nós folha, Figura 7.12.

Figura 7.12 - Árvore estritamente binária

u) Árvore completa, Figura 7.13: árvore em que todos os nós com menos de dois filhos,ficam no ultimo e no penúltimo nível.

Figura 7.13 - Árvore completa

Page 23: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

v) Árvore Cheia, Figura 7.14: árvore estritamente binária e completa.

Figura 7.14 - Árvore Cheia

Neste tipo de estrutura serão abordadas as seguintes operações: inserir um nó na árvore, removê-lo, consul-tar os nós das árvores em ordem, consultar em pré-ordem, consultar em pós-ordem e esvaziar a árvore.

Na operação de inserção, as propriedades de uma árvore devem ser obedecidas e todo novo nó é sempre uma folha. Na operação de remoção, o filho da direita, que é o filho mais velho, assume o lugar do nó pai.

Nas operações de consulta, em ordem, pré-ordem e pós-ordem, todos os nós da árvore são listados, alte-rando-se apenas a sua ordem. Na consulta em ordem, cada árvore é mostrada com o ramo da esquerda, a raiz e posteriormente o ramo da direita. Na consulta pré-ordem, cada árvore é mostrada com a raiz, o ramo da esquerda e posteriormente o ramo da direita. Na consulta pós-ordem, cada árvore é mostrada com o ramo da esquerda, o ramo da direita e posteriormente a raiz.

A Figura 7.15 ilustra as consultas dos nós de uma árvore binária, em pré-ordem e em pós-ordem.

Figura 7.15 – Consultas em uma árvore binária

Page 24: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

1° operação

A árvore binária está vazia

2° operação

Inserção do n°37

3° operação

Inserção do n°20

Page 25: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

4° operação

Inserção do n°10

5° operação

Inserção do n°30

6° operação

Inserção do n°80

Page 26: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

7° operação

Inserção do n°100

8° operação

Inserção do n°5

Page 27: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

9° operação

Inserção do n°180

10° operação

Inserção do n°90

Page 28: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

A árvore acima é estritamente binária?

Não. Para ser estritamente binária, todos os nós devem ter 0 ou 2 filhos. Os nós 10 e 80 não obedecem essa propriedade.

A árvore acima é completa?

Não. Para ser completa, todos os nós com menos de 2 filhos devem estar no último e no penúltimo nível. O nó 80 não obedece essa propriedade.

A árvore acima é cheia?

Não. Para ser cheia, a árvore deve ser binária e completa.

11° operação

Remoção do n°180(nó folha, sem filhos)

12° operação

Page 29: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Remoção do n°80(nó com filho apenas para a direita)

13° operação

Remoção do n°10(nó com filho apenas para a esquerda)

14° operação

Remoção do n°20(nó filhos para a direita e para a esquerda)

Page 30: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

15° operação

Remoção do n°37(nó raiz)

Page 31: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Estrutura de dados: algoritmos, análise da complexidade e implementação em Java e C/C++

P. 329 a 348 – Capitulo 7

Árvore AVL

A árvore AVL, criada em 1962 por Adelson-Velsky e Landis, é uma árvore binária balanceada, ou seja, é uma árvore que obedece a todas as propriedades da árvore binária e em cada nó apresenta diferença de altura entre as sub-árvores direita e esquerda de 1, 0 ou -1, como ilustra a Figura 7.16.

Figura 7.16 – Árvore AVL

Se a diferença de altura entre as sub-árvores de um nó é maior que 1 ou menor que -1, a árvore está desbalanceada e haverá uma rotação. As possíveis rotações estão descritas e ilustradas no Quadro 7.1 e nas figuras 7.17 a 7.22.

Quadro 7.1 – Descrição de rotações

Diferença de altura de um nó

Diferença de altura do nó filho do nó desba-lanceado

Tipo de rotação Figura

2 1 Simples à esquerda 7.170 Simples à esquerda 7.18-1 Dupla com filho para

a direita e pai para a esquerda

7.19

-2 1 Dupla com filho para a esquerda e pai para a direita

7.20

0 Simples à direita 7.21-1 Simples à direita 7.22

Page 32: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 7.17 – Rotação simples para a esquerda

Page 33: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 7.18 – Rotação simples para a esquerda

Page 34: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 7.19 – Rotação dupla com filho para a direita e pai para a esquerda

Page 35: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 7.20 – Rotação dupla com filho para a esquerda e pai para a direita

Page 36: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 7.21 – Rotação simples para a direita

Page 37: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 7.22 – Rotação simples para a direita

Page 38: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

1° operação

A árvore AVL está vazia

2° operação

Inserção do n°30

3° operação

Inserção do n°50

Page 39: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

4° operação

Inserção do n°80

Page 40: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

5° operação

Inserção do n°20

6° operação

Inserção do n°10

Page 41: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

7° operação

Inserção do n°25

Page 42: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias
Page 43: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

8° operação

Inserção do n°70

Page 44: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

9° operação

Remoção do n°30

Page 45: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias
Page 46: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

10° operação

Remoção do n°20

Page 47: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

11° operação

Remoção do n°20

12° operação

Remoção do n°25

Page 48: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

13° operação

Remoção do n°75

Page 49: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

14° operação

Remoção do n°50

Page 50: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias
Page 51: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Lógica de programação: A construção de algoritmos e estruturas de dados - Capítulo 7 : Estrutura de dados avançados (página 169 a 174)

ÁRVORES É uma lista na qual cada elemento possui dois ou maus sucessores, porém todos os elementos possuem apenas um antecessor, como ilustra a Figura 7.2.

Figura 7.2 Exemplo de árvoreInício da audiodescrição da figura 7.2 A figura ilustra um exemplo de árvore, cujos nós são constituídos por letras do alfabeto. A árvore está organizada da esquerda para a direita, possuindo quatro níveis. Cada nó é representado por um círculo contendo alguma informação e os ramos por meio de linhas verticalmente inclinadas. Na parte mais à esquerda está o primeiro nível, cujo nó raiz contém o valor A. No segundo nível, estão o filho esquerdo de A, cujo valor é C e o filho direito de B cujo valor é B. No terceiro nível, estão o filho esquerdo de C cujo valor é G; o filho direito de C cujo valor é F; o filho esquerdo de B cujo valor é E e o filho direito de B cujo valor é D. No quarto nível, estão: um nó atrelado a G cujo valor é M; o filho esquerdo de E com o valor L; o filho central de E com o valor J; o filho direito de E com o valor I e há também um nó com o valor H atrelado ao nó D. Fim da audiodescrição da figura 7.2

A terminologia utilizada para discutir árvores é um clássico caso de metáforas misturando vegetais com árvores genealógicas e alguns termos específicos. O primeiro elemento, que dá origem aos demais, é chamado de raiz da árvore; qualquer elemento é chamado de nó; a quantidade de níveis a partir do nó raiz até o nó mais distante é dita altura da árvore; assim como o número máximo de ramificações a partir de um nó é denominado grau. Em uma estrutura de árvore, os sucessores de um determinado nó são chamados de filhos ou descendentes; o único antecessor de um dado elemento é chamado de pai ou ancestral; e cada elemento final (sem descendentes) é conhecido como folha. Assim, no exemplo anterior, F e G são descendentes (filhos) de C, assim como G é o ancestral (pai) de M. A árvore possui raiz em A, altura 4, grau 3 e folhas F, H, I, J, L e M. DECLARAÇÃO O vetor de registros que foi utilizado sem problemas até aqui precisará sofrer modificações, visto que cada elemento da árvore pode possuir diversos sucessores. Utilizaremos, portanto, a seguinte estrutura: tipo vetFilho - vetor [1..4] de inteiros; tipo nó = registro caracter: info; vetFilho: filho; fimregistro; tipo VET = vetor [1..1000] de nó;VET: árvore; Lembramos que o vetor de sucessores (filhos) deve sempre ser inicializado com zero e que, quando um filho vale zero, isso significa que não possui descendentes. Ressaltamos, também, que uma árvore se apresenta sob o formato linear em seu vetor:

Mas, para facilitar a visualização, ilustraremos as árvores como na Figura 7.3.

Figura 7.3 Representação convencionada de árvore

Page 52: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Existem ainda outras formas de representação para essa estrutura de dados, tal como usada na Figura 7.4.

Figura 7.4 Outra representação de árvores

MANIPULAÇÃO Imaginemos um labirinto composto de várias cavernas e túneis que as interligam. Em cada caverna existe um baú, porém apenas uma delas contém um baú repleto de moedas de ouro; as outras possuem baús vazios.

Figura 7.5 Mapa do labirinto

Se prestarmos atenção, poderemos perceber que esse labirinto possui a estrutura de uma árvore, como mostra a Figura 7.6.

Figura 7.6 Labirinto em árvore

Page 53: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Para entrar na “caça ao tesouro”, precisamos percorrer todos os túneis e cavernas e verificar se o conteúdo dos baús até encontrar aquele que contém as moedas de ouro, sem, porém nos perdemos no labirinto. Não podemos utilizar um novelo de lã, porém podemos usar uma pilha, que cumpre exatamente o mesmo objetivo, ou seja, permite registrar a ordem em que as cavernas serão visitadas. Explicando melhor, entraríamos sempre na caverna (nó) indicada no topo da pilha, desempilhando-a e empilhando as cavernas subsequentes (filhos). Repetindo esse processo, percorremos todas as cavernas (nós) do labirinto (árvore), como ilustramos a seguir. A esse procedimento é dado o nome de Busca em Profundidade, porque se vasculham (visitam) todos os nós de um ramo até atingir os nós terminais (folhas), repetindo o processo em todos os ramos.

Figura 7.7 – Busca em profundidade

Logo a seguir descrevemos o algoritmo capaz de percorrer o labirinto (árvore) e descobrir a localização do baú com o tesouro, caso exista.ALGORITIMO 7.9 Busca em profundidade na árvore1. início 2. tipo vetFilho = vetor [1..4] de inteiro;3. tipo rNó = registro4. caracter: info;5. vetFilho: filho;

Page 54: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

6. fimregistro;7. tipo VET = vetor [1..1000] de rNó;8. VET: árvore;9. tipo reg = registro10. caracter: local;11. inteiro: prox;12. fimregistro;13. tipo VTP = vetor [1..100] de reg;14. VTP: pilha;15.16. inteiro: nó, topo, i;17.18. Seta para esquerda entre topo e 0, que indica que a variável topo aponta para a posição 0 do vetor 19. Seta para esquerda entre nó e 1, que indica que a variável nó aponta para a posição 1 do vetor 20. enquanto árvore [n[o]. info <> “moedas” faça21. para i de 4 até 1 passo -1 faça22. se árvore [nó]. filho [i] <> 023. então Empilha (árvore[nó]. filho [i]); // Utilizando Empilha24. fimse;25. fimpara;26. Seta para esquerda entre nó e pilha[comeco].local; Isso indica que a variável nó aponta para a posição começo do vetor pilha que possui dentre seus atributos o valor local do tipo caracter. 27. desempilha;28. fimenquanto;29. se árvore [nó]. info = “moedas”30. então escreva (“0 tesouro está na caverna”, nó);31. senão escreva (“Tesouro não encontrado”);32. fimse;33. fim. Observemos que o algoritmo utiliza os módulos Empilha e Desempilha definidos nos algoritmos 7.7 e 7.8, respectivamente. Poderíamos percorrer a árvore de outra maneira, ou seja, visitando todos os filhos de mesmo nível dos diversos ramos, como ilustra a Figura 7.8.

Figura 7.8 – Busca em amplitude

A esta estratégia dá-se o nome de Busca em Amplitude, que pode ser facilmente implementada se, em vez de utilizarmos uma pilha para registrar os próximos nós a serem visitados, usamos uma fila, visitando primeiro o elemento que é retirado da fila e enfileirando seus filhos no final da mesma.

Page 55: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Descrevemos a seguir o algoritmo que, utilizando a busca em amplitude, descobre a localização do baú com o tesouro, caso exista.ALGORITIMO 7.10 Busca em amplitude na árvore1.início 2. tipo vetFilho = vetor [1..4] de inteiro;3. tipo rNó = registro4. caracter: info;5. vetFilho: filho;6. fimregistro;7. tipo VET = vetor [1..1000] de rNó;8. VET: árvore;9. tipo reg = registro10. caracter: local;11. inteiro: prox;12. fimregistro;13 tipo VTP = vetor [1..100] de reg;14. VTP: fila;15.16. inteiro: nó, começo, final;17.18. Seta para esquerda entre começo e zero, que indica que a variável começo aponta para a posição zero do vetor

19. Seta para esquerda entre final e zero, que indica que a variável final aponta para a posição zero do vetor

20. Seta para esquerda entre nó e zero, que indica que a variável nó aponta para a posição um do vetor

21. enquanto árvore [n[o]. info <> “moedas” faça22. para i de 4 até 1 faça23. se árvore [nó]. filho [i] <> 024. então Entra (árvore[nó]. filho [i]); // Utilizando Entra25. fimse;26. fimpara;27. Seta para esquerda entre nó e fila[comeco].local; Isso indica que a variável nó aponta para a posição começo do vetor fila que possui dentre seus atributos o valor local do tipo caracter.

28. sai;29. fimenquanto;30. se árvore [nó]. info = “moedas”31. então escreva (“0 tesouro está na caverna”, nó);32. senão escreva (“Tesouro não encontrado”);

Page 56: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

33. fimse;34. fim.

Observemos que o algoritmo utiliza os módulos Entra e Sai, definidos nos algoritmos 7.5 e 7.6, respectivamente. Ao desenvolver o estudo de árvores, abordamos apenas alguns entre os muitos métodos de busca, assim como não nos preocupamos em especificar técnicas de inserção e remoção, pois estas dependem da concepção da estrutura (grau, ordenação, balanceamento etc.)OUTRAS ESTRUTURAS Vimos que pilhas e filas são disciplinas de acesso a uma lista convencional. Também pudemos aprender que uma árvore é um caso particular de lista. Entretanto, existem outras variações de listas, cada qual com suas técnicas de manipulação específicas.LISTAS DUPLAMENTE ENCADEADAS São listas que, além de casa elemento indicar o elemento seguinte, também indicam aquele que o antecede, ou melhor, cada elemento é ligado ao seu sucessor e ao seu predecessor, possibilitando um trajeto no sentido começo-final ou no sentido oposto (final-começo).

Page 57: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

COLEÇÃO UAB-UFSCAR

SISTEMAS DE INFORMAÇÃO

Helena Caseli

METODOLOGIA CIENTÍFICA

Page 58: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

APRESENTAÇÃO

Metodologia Científica é uma disciplina essencial para a formação acadêmica e profissional de estudantes dos mais variados cursos de graduação e pós-graduação. Sua essência pode ser verificada por meio da análise da origem grega do termo “metodologia”, o qual, segundo Barros e Lehfeld (2007), pode ser dividido em três partes que são meta (ao largo), odos (cami-

nho) e logos (estudo). Enquanto a ciência representa o conhecimento racional e sistemático

que pode ser validado e verificado, a metodologia apresenta, por meio do método (sequên-

cia de passos), a forma de percorrer o caminho que leva a essa validação e verificação na

busca do conhecimento.

Trata-se, portanto, da disciplina que oferece ao aluno a capacidade de aprender a formar

conhecimento de modo organizado, ou seja, seguindo uma metodologia amparada na ciên-

cia. Com o objetivo de auxiliar o aluno nesse processo, ao ler este livro, ele será estimulado

a, entre outros: (i) estudar os métodos disponíveis para resolução do problema que tem em

mãos; (ii) analisar criticamente suas características, vantagens e limitações; (iii) propor solu-

ções que, se inovadoras, poderão avançar o estado da arte e, principalmente; (iv) sintetizar,

a partir de todo o conteúdo estudado, o conhecimento que será adquirido e armazenado

pelo resto de sua vida. Desse modo, por meio da aplicação do método, o aprendizado é legi-

timado pela ciência uma vez que tem como base conhecimento derivado dela.

Vale ressaltar que dada a essência prática do curso no qual este livro se insere, ele se con-

centra mais na aplicação prática da metodologia científica do que em seu embasamento

teórico. Assim, não faz parte de seu conteúdo, por exemplo, discussões elaboradas sobre

as raízes históricas dos métodos de se fazer ciência. O foco deste material está na aplicação

prática dos conhecimentos de metodologia científica na vida acadêmica e profissional do

aluno de um curso da área de computação (Sistemas de Informação, Ciência da Computa-

ção e Engenharia da Computação, entre outros). Neste livro, o aluno encontrará o material

necessário para se familiarizar com os principais conceitos e aprender as etapas de desen-

volvimento de um trabalho seguindo a metodologia científica.

Desse modo, ao final deste livro, espera-se que o aluno seja capaz de identificar um proble-

ma, formular hipóteses a seu respeito, estudar e analisar criticamente propostas para sua

solução bem como desenvolver e avaliar uma ou várias dessas propostas, tudo isso seguindo

etapas que poderão ser reproduzidas por outros obedecendo, assim, as exigências de tra-

balhos científicos. Dessa maneira, o objetivo maior deste livro é oferecer meios para que o

Page 59: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

aluno desenvolva um compromisso científico frente às constatações empíricas.

Como a pesquisa científica é uma atividade que requer paixão por parte dos que a desen-

volvem e amor pelo aprendizado constante, este livro está organizado em unidades que

lembram as etapas de uma “história de amor”. Sempre que nos apaixonamos por algo ou

alguém, o gatilho para esse processo é o despertar de um interesse (Unidade 1). O ser ou a

coisa amada, então, começa a ganhar forma na fase de paquera (Unidade 2). O idealismo da

fase platônica se torna algo concreto com o desenrolar da história (Unidade 3). Porém, como

todo processo sério, certas cautelas devem ser tomadas (Unidade 4). Quando a linda história

de amor se desenvolve como o previsto, alcançando todas expectativas, surge o desejo de

relatar todos os acontecimentos (Unidade 5) e gritar aos quatro cantos do mundo a sua gló-

ria (Unidade 6)! O leitor é, agora, convidado a entrar nesse clima de romance pelo aprendi-

zado e, com este livro, aprender que se der à metodologia científica o valor que ela merece,

ela lhe retribuirá tornando sua vida de aprendizado muito mais gratificante e prazerosa.

Page 60: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

UNIDADE 1

O despertar do interesse

1.1 Primeiras palavras

Ao ingressar em um curso da área de computação como Sistemas de Informação, Ciência

da Computação ou Engenharia da Computação, o aluno espera cursar apenas aquelas dis-

ciplinas que considera pertinentes e indispensáveis para sua formação profissional. Essa expectativa, contudo, é equivocadamente dissipada ao se deparar com disciplinas como

Metodologia Científica, as quais julga, em um primeiro momento, serem completamente

desnecessárias para sua formação profissional. É aí que o aluno se engana.

A Metodologia Científica é a disciplina que oferece ao aluno a capacidade de aprender a for-

mar conhecimento de modo organizado, ou seja, seguindo uma metodologia amparada na

ciência. Para tentar convencê-lo de sua relevância, esta unidade faz uma apresentação ini-

cial dessa disciplina e de sua aplicação na vida de estudantes de graduação e pós-graduação.

Espera-se que ao finalizar esta unidade o aluno esteja disposto a aprender algo que foge um

pouco das disciplinas práticas e de base matemática existentes no restante do curso mas

que, pode apostar, será extremamente útil para sua vida. Vamos encarar esse desafio?

1.2 Problematizando o tema

Alguma vez você já gastou horas estudando e ao final percebeu que não conseguiu apren-

der nada? Ou então tem conhecimento de um determinado assunto porém não consegue explicá-lo a outra pessoa? Essas situações são exemplos de deficiências que a Metodologia

Científica pode suprir uma vez que, em ambas, a falha está no método utilizado para adqui-

rir ou expressar o conhecimento.

A Metodologia Científica mune o aluno de instrumentos para a formação do conhecimen-

to por meio da pesquisa, ou seja, o aprendizado do método científico acontece ao mesmo

tempo em que o aluno o desenvolve. Especificamente neste livro, voltado para iniciantes

em Metodologia Científica, a ênfase está no aprendizado e na aplicação do método e não no

resultado em si.

1.3 O que é pesquisa?

Page 61: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Entre as várias definições disponíveis para o termo “pesquisa”, das mais filosóficas até as

mais diretas, alguns autores resumem sua essência como

A pesquisa é um processo reflexivo, sistemático, controlado e crítico que nos conduz à descoberta de novos fatos e das relações entre as leis que

regem o aparecimento ou a ausência deles (BARROS; LEHFELD, 2007, p.

83).

Pesquisa é simplesmente reunir informações necessárias para encontrar

resposta para uma pergunta e assim chegar à solução de um problema

(BOOTH et al., 2000, p. 7).

A segunda definição é mais específica e dela decorrem alguns conceitos que serão mais bem

explicados na Unidade 2. Por ora, basta saber que as informações são obtidas por meio da

revisão bibliográfica e da realização de experimentos, e a pergunta que se pretende respon-

der é investigada por meio de uma hipótese formulada para a resolução do problema cuja

solução só será obtida por meio do desenvolvimento do trabalho.

Por fim, o que diferencia a pesquisa não científica, como a que fazemos na internet em bus-

ca do melhor preço para a compra de algum item, da pesquisa denominada “científica” é a aplicação da metodologia científica para seu desenvolvimento. Em outras palavras, para ser

científica, a pesquisa deve se basear em etapas logicamente definidas e conectadas, realiza-

das com rigor científico em busca da solução de um problema.

1.4 Por que fazer pesquisa?

Existem várias respostas para essa pergunta, desde as mais individualistas como pelo prazer

de resolver um enigma – até as mais genéricas – como o enriquecimento do conhecimento

humano. Na prática, das razões para desenvolver uma pesquisa, três se enquadram muito

bem no contexto deste livro:

• Compreender melhor um assunto estudado;

• Assimilar as técnicas de desenvolvimento e comunicação (redação) do trabalho;

• Desenvolver o espírito crítico.

A primeira delas é a motivação primordial para qualquer trabalho de pesquisa: pesquisamos

o que nos interessa e o que é necessário para nossa vida profissional ou pessoal. O domí-nio das técnicas de pesquisa, segunda razão, é a motivação de tantos pesquisadores para

Page 62: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

o aprendizado constante com o desenvolvimento de suas pesquisas. A pesquisa científica é

um processo constante e incremental que se fortalece com a prática: pesquisa se aprende

fazendo. Assim, saber onde e como coletar informações para organizá-las coerentemente e

apresentá-las de modo confiável e convincente, entre outras, são habilidades indispensáveis

na “era da informação”. Por fim, o espírito crítico, indispensável para qualquer bom profis-

sional, nasce do processo incerto e geralmente confuso de desenvolvimento de sua própria

pesquisa. É do estudo que surgem as dúvidas, da formalização do problema que emanam as

possíveis soluções e limitações, da tentativa de explicar suas ideias que surgem as lacunas

de fundamentos e evidências. Examinar uma pesquisa, fazer suas próprias indagações e en-

contrar as respostas são características desenvolvidas com o espírito crítico.

Além dessas razões ligadas ao aprendizado dos métodos científicos (objeti-

vo deste livro), há outras que justificam a pesquisa propriamente dita, como

a busca pelo “novo”, ou seja, a necessidade de avançar no estado da arte

e, dessa maneira, fazer com que novas ideias, técnicas, estratégias, procedimentos e recur-

sos surjam para avançar e melhorar em todos os setores da vida dos seres humanos.

A realização de uma pesquisa científica traz ao aluno um conhecimento novo e, ainda mais

importante do que esse novo conhecimento é o fato de ele ter sido obtido por meio de um

processo que garante sua verificação com base na teoria estudada e nos dados observados,

ou seja, que não deixa dúvida de sua validade. Novamente, enfatiza-se que este livro tem o

propósito prático de munir o estudante com conhecimentos, hábitos, consciência e espírito

que o levarão à solução de problemas. Assim, tão importante quanto o resultado de uma

pesquisa é o modo como ela foi feita e, em especial para este livro, o segundo tem maior

peso do que o primeiro.

1.5 Como fazer pesquisa?

A curiosidade de descobrir e explicar os fenômenos observados é uma característica inata

do ser humano e, portanto, desenvolvida desde os primórdios da humanidade. Contudo, o

que era feito de maneira bastante desorganizada e sem rigor científico no princípio, ganhou

ares de ciência com a especificação de etapas e procedimentos organizados e bem funda-

mentados. Nesse processo de amadurecimento da pesquisa, várias formas de argumenta-

ção foram propostas com o intuito de tentar explicar os fenômenos como a indução e a

dedução. Enquanto a primeira possibilita o desenvolvimento de enunciados gerais sobre as

observações de casos específicos ou proposições com validade universal, a segunda procura

transformar enunciados complexos e universais em casos particulares. Assim como a sínte-

se e a análise, ou as generalizações e as abstrações, a indução e a dedução se completam.

A conclusão obtida por meio de uma indução pode servir de princípio para a dedução, ao

Page 63: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

mesmo tempo que a conclusão da dedução pode ser usada como princípio da indução. Por

exemplo, a partir dos enunciados gerais “o homem é animal” e “o homem é racional”, por in-

dução conclui-se que “o homem é animal racional”. Ao mesmo tempo, sabendo que “todos

os homens são mortais” e que “José é homem” deduz-se que “José é mortal”.

Como já mencionado, este livro não tem a intenção de cobrir todos os aspectos Históricos

e teóricos do método científico, mas sim apresentar sua aplicação na prática. Para tanto, as

próximas subseções apresentam os tipos de pesquisa geralmente encontrados nos traba-

lhos em computação, os níveis nos quais a pesquisa pode ser desenvolvida e algumas dicas

para iniciantes na pesquisa científica como você.

1.5.1 Tipos de pesquisa em computação

As pesquisas em computação, de acordo com Wazlawick (2009), basicamente, enquadram-

-se em um de três estilos: exploratórias, empíricas e formais.

A pesquisa exploratória é aplicada em áreas novas da computação nas quais a resolução do

problema é apresentada por meio de argumentação e não de provas formais. Devido a essa

característica, muitos acreditam que é o estilo mais fácil de pesquisa, porém está sujeita ao

insucesso se não for utilizada uma boa teoria e um bom conjunto de teste.

A pesquisa empírica, por sua vez, baseia-se em testes reconhecidos pela comunidade e usa

a estatística para dar subsídios às suas conclusões. Porém, da mesma forma que a pesquisa

exploratória, a empírica precisa de uma boa base teórica para ser aceita.

Por fim, o estilo menos sujeito a críticas quando bem desenvolvido é a pesquisa formal na

qual o pesquisador propõe uma teoria e apresenta uma prova formal da mesma.

De acordo com Wazlawick, as pesquisas na área de computação podem ser divididas em

cinco tipos apresentados a seguir em ordem crescente de força (das pesquisas exploratórias e empíricas para as pesquisas formais):

1. Apresentação de um produto – esse tipo de pesquisa visa apenas apresentar algo novo

e é frequentemente encontrada nas áreas emergentes dentro da computação. Nesse caso,

a pesquisa é exploratória, sendo difícil compará-la com trabalhos anteriores, uma vez que

estes não existem. Mesmo que o objetivo do trabalho (apresentar algo novo) fuja do rigor

científico, para ser considerada uma pesquisa de qualidade, o trabalho deve tratar um pro-

blema relevante e deixar claro o aprendizado do aluno no uso dos conhecimentos adquiridos

com o curso.

2. Apresentação de algo diferente – esse tipo de pesquisa tem o propósito de apresentar

Page 64: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

um modo diferente de solucionar um problema e também ocorre em áreas novas da compu-

tação. Basicamente, um trabalho desse tipo apresenta uma comparação entre técnicas (es-

tudo de caso) na qual os resultados não são apresentados por meio de uma prova científica

rigorosa, mas sim de argumentos na tentativa de convencimento do leitor. Para ser conside-

rada uma boa pesquisa, o trabalho deve se basear em boas hipóteses e teorias e apresentar

uma boa argumentação para convencer o leitor. Uma estratégia interessante adotada nesse

tipo de pesquisa é apresentar uma tabela comparativa com as característica, vantagens e

desvantagens da nova técnica sendo proposta e as já existentes.

3. Apresentação de algo supostamente melhor – esse tipo de pesquisa

propõe algo novo e o compara quantitativamente com as abordagens já existentes para

demonstrar que ele é supostamente melhor. Trabalhos desse tipo são frequentes em áreas

mais maduras da computação e demandam bastante tempo e esforço uma vez que o pes-

quisador terá de implementar e avaliar não apenas sua nova proposta, mas também as já existentes para que a comparação seja aceita. Nesse processo o pesquisador deverá tomar

muito cuidado para não cometer erros, isolando os fatores que podem comprometer os ex-

perimentos, comparando sua proposta com o estado da arte, especificando exatamente

como a avaliação foi feita e deixando muito claro em quê sua proposta é melhor.

4. Apresentação de algo reconhecidamente melhor – esse tipo de pesquisa, diferente do

anterior, usa métricas e dados padronizados e reconhecidos internacionalmente para com-

provar que uma proposta nova é melhor do que o estado da arte. Nesse tipo de pesquisa,

como as métricas e dados utilizados na avaliação já são conhecidos pela comunidade cientí-

fica e foram usados na avaliação das abordagens já existentes, incluindo o estado da arte, o

pesquisador não precisa reimplementar e reavaliar essas abordagens. Trabalhos desse tipo

são relativamente fáceis de serem realizados, mas só terão impacto desejado se a hipótese

de pesquisa for cuidadosamente determinada.

5. Apresentação de uma prova – esse tipo de pesquisa é o mais maduro e formal de todos.

Trabalhos desse tipo demonstram a resolução do problema por meio de provas matemáti-

cas e regras da lógica. Nesse processo, o pesquisador deve construir uma teoria munida de

conceitos bem definidos aplicados para a resolução lógica do problema.

Pesquisas em computação podem, portanto, serem exploratórias (tipos 1 e 2), empíricas

(tipos 3 e 4) ou formais (tipo 5) dependendo da hipótese e do nível de pesquisa em questão.

1.5.2 Níveis de pesquisa

Entre os diversos níveis de trabalho de pesquisa podem ser citados, em ordem cres-

Page 65: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

cente do grau de escolaridade do aluno: iniciação científica (desenvolvida durante a

graduação),trabalho de conclusão de curso (desenvolvido nos últimos meses da graduação ou de uma especialização como parte dos requisitos para a obtenção do título), mestrado

(desenvolvido após a conclusão do curso de graduação) e doutorado (desenvolvido após a

conclusão do mestrado ou, em casos excepcionais, após a conclusão apenas da graduação).

A Iniciação Científica, ou IC, é desenvolvida por um aluno graduando, geralmente a partir

do segundo ano de seu curso, e se dá por meio de sua

Participação em projeto de pesquisa científica desenvolvido por docente e sob sua orien-

tação. Para tanto, o aluno deve buscar ou sugerir propostas de pesquisa nas áreas que tem

maior interesse a docentes que trabalham nessas áreas. A aplicação do método científico

a uma área de interesse incentiva o aluno a desenvolver sua formação científica ao mes-

mo tempo em que fortalece os conhecimentos teóricos aprendidos no estudo da discipli-

na de metodologia científica. O espírito científico é alimentado gradativamente conforme

a pesquisa se desenvolve e o aluno amadurece. Portanto, os alunos iniciantes na pesquisa

científica devem focar mais na aplicação dos métodos científicos do que nos resultados da

pesquisa propriamente dita. Uma vez que não existe uma forma única e irrefutável de de-

senvolver pesquisa em todas as esferas do conhecimento, a idéia é “aprender fazendo”. As

universidades possuem programas que incentivam esse tipo de pesquisa como o Programa

Institucional de Bolsas de Iniciação Científica (PIBIC).

O Trabalho de Conclusão de Curso, ou TCC, pode ser desenvolvido como requisito para a

obtenção de um título, seja ele de graduado ou de especialista. O TCC desenvolvido durante

a graduação em cursos de computação geralmente se realiza na forma de um trabalho tec-

nológico, no qual o aluno demonstra que sabe aplicar as técnicas e os conhecimentos que

aprendeu durante o curso, ou científico, no qual o aluno segue as diretrizes da metodologia

científica para se aprofundar em um determinado tópico de pesquisa. Na especialização (ou

pós-graduação lato sensu), que tem o propósito de complementar ou atualizar a formação

profissional do aluno, geralmente, não se exige hipótese ou contribuição científica relevan-

te. Em ambos os casos, o trabalho deve demonstrar claramente a capacidade de pesquisa

do aluno com um bom estudo bibliográfico, apresentação das ideias aprendidas e contribui-

ção pessoal que denote o espírito crítico do aluno. Via de regra, esse tipo de trabalho é inicia-

do com um projeto de pesquisa e finalizado com um relatório final (monografia, artigo) que

pode ser apresentado a uma banca examinadora para sua avaliação (CERVO et al., 2007).

O Mestrado e o Doutorado são os níveis de pesquisa de uma pós-graduação stricto sensu.

Trabalhos nesses níveis são realizados após a conclusão da graduação e devem, necessaria-

mente, conter contribuição científica relevante para a área de pesquisa. A grande diferença

Page 66: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

entre o mestrado e o doutorado é que no segundo a contribuição deve ter um impacto muito

maior, modificando o estado da arte. Embora tradicionalmente o doutorado seja realizado

após a conclusão do mestrado, em casos excepcionais de excelente desempenho acadêmico

e potencial científico do aluno, este pode ser aceito em um doutorado-direto. O doutorado-

-direto é uma modalidade na qual um graduado não mestre é aceito como aluno de douto-

rado, com as mesmas exigências (ou até mais rigorosas) de um doutorado tradicional. Tanto

no mestrado quanto no doutorado, o trabalho de pesquisa deve ser realizado seguindo a

metodologia científica, contendo: levantamento bibliográfico completo e coerente, análi-se crítica de trabalhos correlatos e comparação com a proposta, hipótese de pesquisa bem

elaborada e justificada com base na teoria e desenvolvimento do trabalho (experimentos,

estudo de caso, dados estatísticos) que comprove, ao final, a hipótese de trabalho.

Para todos os níveis citados existem opções de financiamento de órgãos públicos por meio

de bolsas de estudo. A obtenção de uma bolsa de estudo para realizar pesquisa em qualquer

dos níveis citados pressupõe bom desempenho acadêmico e potencial científico do aluno-

-candidato, bem como um projeto de pesquisa bem elaborado, factível e amarrado à área

de pesquisa do orientador. Entre os principais órgãos públicos que financiam as pesquisas

no Brasil podem ser citados: o Conselho Nacional de Desenvolvimento Científico (CNPq), a

Coordenação de Aperfeiçoamento de Pessoal de Nível Superior (Capes) e as Fundações de

Amparo à Pesquisa dos Estados (Fapes) como a FAPESP.

1.5.3 Como iniciar sua pesquisa?

Hoje em dia, com a Web a nosso dispor, pesquisar e descobrir mais sobre um determinado

assunto é algo relativamente simples e factível com apenas alguns cliques. Porém, exa-

tamente porque é possível encontrar informações sobre praticamente tudo na Internet,

essa busca precisa ser guiada pelo assunto de interesse. Além dos sites genéricos de busca

como o Google, o Yahoo e o Alta Vista, existem opções específicas para pesquisa sobre te-

mas acadêmicos como o Google Acadêmico e o CiteSeerX e as bases de dados de publica-

ções científicas como o Scielo, o portal de periódicos da CAPES e o Web of Science. Sites

específicos de revistas científicas (journals) e eventos (congressos, workshops, simpósios)

podem ser consultados em busca de artigos como, por exemplo, as revistas e eventos bra-

sileiros: Revista Brasileira de Informática na Educação (RBIE), Revista de Informática Teó-

rica e Aplicada (RITA), e a Biblioteca Digital da Sociedade Brasileira de Computação, entre

outros. Utilizando-se desses recursos o aluno inicia o processo de coleta de informações a

respeito de um determinado tema. Por exemplo, suponha que o aluno tenha interesse de

realizar uma pesquisa sobre computação em nuvem (do inglês, cloud computing). Para ob-

ter informações a respeito do tema, o aluno opta por realizar uma busca pelo termo “com-

Page 67: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

putação em nuvem” em um site especializado, por exemplo, o Google Acadêmico. Como

resultado dessa busca, diversos trabalhos científicos são retornados, desde artigos científi-

cos produzidos por estudantes de graduação e pós-graduação até partes de livros sobre o

assunto, todos disponíveis online.

Em seguida, o aluno seleciona alguns desses documentos para uma leitura superficial com

o intuito de esclarecer/delimitar o assunto de interesse, ou seja, saber do que se trata e se

é realmente interessante. Nesse ponto é muito importante que os primeiros documentos

a serem lidos sejam confiáveis, uma vez que os conceitos aprendidos erroneamente nesse

primeiro momento podem significar problemas no futuro. Assim, selecione livros ou artigos

publicados em eventos e revistas conceituados. Sempre que possível, opte por ler as ver-

sões originais (não as versões traduzidas) das obras e, como estamos em uma área nova e

em constante modificação, obras recentes (dos últimos 5 ou 10 anos). A leitura deve, então,

acontecer com dois propósitos: obter informações básicas e procurar informações especí-ficas. Essa primeira leitura rápida é essencial, uma vez que vem para suprir as deficiências

de conhecimento que o aluno enfrenta sem que tenha que observar ou experimentar para

conhecer ou aprender.

Existem vários tipos de leitura classificados de acordo com o que se pretende coletar (HAR-

LOW; COMPTON, 1980 apud MARCONI; LAKATOS, 2001):

1. Um termo – é o que chamamos de “escaneamento” (do inglês, scanning). Nessa leitura,

o objetivo é pontual: encontrar um determinado termo (ou uma frase ou palavra-chave) e,

para tanto, não é necessário mais do que uma passada de olhos em alguns parágrafos sem

ter de compreender o que está escrito.

2. A ideia geral – é o que chamamos de “esquematização” (do inglês, skimming), na qual o

objetivo é captar a ideia geral sem entrar em detalhes de como todo o trabalho foi desen-

volvido. Para tanto, a leitura é focada em partes específicas do trabalho como seu título, o

resumo, a introdução e as conclusões. Se a obra consultada for um livro, a sugestão é con-

sultar os capítulos inicial e final e, para ter uma ideia do que tratam os demais, visualizar os

primeiros e últimos parágrafos.

3. O significado – essa é necessariamente uma leitura de todo o texto, do

começo ao fim, para entender o conteúdo tratado.

4. O conhecimento – esse é o tipo de leitura mais profunda, na qual o leitor deve ler e reler

o texto sempre que sentir necessidade, navegar pelas partes do documento a fim de estabe-

lecer ligações e solucionar dúvidas, fazer resumos e sintetizar o conhecimento aprendido.

Page 68: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

5. Uma análise crítica – essa leitura ultrapassa os limites do texto e deve

ser realizada com base na comparação do conteúdo lido com conhecimentos prévios. Nesse

momento, o leitor deve formar sua opinião a respeito do texto em termos de: robustez, ar-

gumentação, atualização, corretude e completude.

Todos os tipos de leitura são realizados em um processo de pesquisa científica. Nesse mo-

mento inicial de “despertar do interesse” pelo tema, os dois primeiros tipos serão realizados,

uma vez que se pretende encontrar “quais” documentos falam sobre um determinado tema

e “o quê” eles falam (uma visão global do assunto focalizado). Se dessa pré-leitura, realizada

com o intuito de localizar o termo de interesse e informações úteis a respeito dele, surgir

uma “paixão”, então as outras leituras serão realizadas a seu tempo, conforme descrito na

Unidade 3.

1.6 Considerações finais

Após essa breve apresentação do que vem a ser a metodologia científica, como ela é apli-

cada e sua importância na realização de pesquisas científicas nos mais diversos níveis, em

especial em cursos de computação, o aluno tem, neste momento, uma noção do que vem a

ser a disciplina da qual este livro trata.

Ao final dessa leitura, o aluno deverá saber distinguir uma pesquisa científica de uma pesqui-

sa não científica. O que as difere? Além disso, quais são os estilos e tipos de pesquisa realiza-

dos na computação? Em quais níveis essas pesquisas se desenvolvem? Como proceder para

iniciar um trabalho de pesquisa? Aliás, o que é pesquisa?

Page 69: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

UNIDADE 2

O início de uma paquera

2.1 Primeiras palavras

Como já visto no capítulo anterior, o método científico é um processo organizado de eta-

pas desenvolvidas com o intuito de se alcançar um objetivo. Portanto, é o objetivo que nor-

teia todo o trabalho de pesquisa. A partir de um tema escolhido de acordo com o interesse

do aluno, define-se o problema que se pretende tratar. Para tanto é necessário um estudo

abrangente e guiado sobre o que já foi publicado a esse respeito, ou seja, é necessária uma

revisão bibliográfica. Dessa revisão e do senso crítico do aluno surgem as hipóteses para a

solução do problema. Tanto o tema quanto as hipóteses devem ser acompanhados de justi-

ficativas que deixem claras a relevância e a base teórica para o estudo em questão. O desen-

volvimento do trabalho é guiado por um método que descreve passo a passo o que precisa

ser feito, por meio do uso de técnicas, para se alcançar o objetivo. Nesse processo também

é importante dizer o que será alterado no mundo quando o objetivo do trabalho for atingi-

do (resultados esperados) e quais são as limitações do trabalho e os trabalhos futuros que

surgirão como decorrência do mesmo. Todos esses conceitos são cruciais na metodologia

científica e serão apresentados, um a um, nesta unidade.

2.2 Problematizando o tema

Quando o aluno se depara com um problema corriqueiro ele consegue descrevê-lo? Aliás, o

que é um problema? Ao que tudo indica, um problema está sempre relacionado a um tema

e diretamente ligado a um objetivo. Para alcançar esse objetivo o aluno faz suposições a respeito de sua solução, ou seja, formula hipóteses e traça estratégias (define um método).

Além disso, ele também sente a necessidade, ou é cobrado pelos outros, de justificar suas

decisões com base em fatos e no conhecimento (estudo) tendo em mente quais resultados

pretende obter e as limitações que deverão ser consideradas, certo? Se o aluno não sabe

exatamente do que se trata um ou mais dos termos mencionados, esta unidade tem como

objetivo esclarecer esses termos expandindo seu entendimento do que é a metodologia

científica.

2.3 O que é o quê na Metodologia Científica

Como já dizia São Tomás de Aquino “ninguém ama aquilo que não conhece”. Assim, para

amar a metodologia científica, é preciso conhecê-la e, para tanto, saber do que se trata cada

um de seus conceitos é primordial. As seções a seguir apresentam os principais conceitos da

Page 70: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

metodologia científica e a interligação entre eles.

2.3.1 Tema-problema

O que será investigado?

Por que é relevante investigar esse tema?

O tema de pesquisa é “a área de conhecimento na qual se vai trabalhar” (WAZLAWICK,

2009, p. 20). Enquanto Cervo et al. (2007, p. 73) diz que “o tema e uma pesquisa é qualquer

assunto que necessite melhores definições melhor precisão e clareza do que já existe sobre

ele”. Sua especificação deve ser clara e precisa, ou seja, sem ambiguidades. Para tanto, po-

dem ser usadas classificações e divisões de áreas de conhecimento já bem conhecidas, para

facilitar o entendimento do leitor da delimitação de tema selecionada.

Por exemplo, suponha que o tema a ser investigado no trabalho de pesquisa é a origem da

espécie Gallus gallus domesticus, mais popularmente conhecida como galinha. Esse tema

pode ser contextualizado com a especificação das áreas de pesquisa biologia, zoologia, or-

nitologia e assim por diante. Dentro desse grande tema, o trabalho irá tratar um problema

específico que é saber quem veio primeiro: o ovo ou a galinha.

Desse modo, enquanto o tema é uma área mais abrangente do conhecimento, o problema

especifica uma questão em aberto para a qual pesquisas ainda precisam ser desenvolvidas

para que a solução seja alcançada. O problema, segundo Wazlawick (2009), delimita a pes-

quisa e, portanto, facilita a investigação. Veja que o problema não precisa ser algo comple-

tamente inovador e que nunca tenha sido explorado, mas sim algo que ainda não tenha sido

exaustivamente ou devidamente explicado ou que ainda apresente algumas lacunas caren-

tes de explicação.

O tema-problema deve ser justificado, demonstrando com base em fatos, estudos prévios,

trabalhos relacionados, a relevância de estudá -lo. Em geral, a apresentação do tema e sua

respectiva justificativa aparecem na contextualização (seção introdutória) do trabalho.

2.3.2 Objetivo

Para quê a investigação será realizada?

Por que é importante atingir esse objetivo?

Page 71: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Como será visto na Unidade 2, a definição do objetivo de um trabalho de pesquisa é um

processo que passa por várias etapas de refinamento do tema-problema com base nos do-

cumentos lidos num primeiro momento (revisão bibliográfica inicial). Desse processo cíclico

nascerá o refinamento do problema e dos objetivos do trabalho.

O objetivo, portanto, norteia o trabalho de pesquisa e é o centro que conecta os demais

conceitos da Metodologia Científica. É imprescindível que o objetivo seja comprovado ao

final do trabalho. Assim, a especificação do objetivo, que geralmente aparece na introdução

do trabalho, deverá ser retomada na seção de conclusão demonstrando claramente que o

que se propôs alcançar foi, de fato, alcançado. Conforme Wazlawick (2009), um bom objeti-

vo provavelmente demonstrará a veracidade ou a falsidade de uma hipótese. Por exemplo,

se o problema a ser tratado é descobrir se quem veio primeiro foi o ovo ou a galinha, ao final

do trabalho uma ou outra hip hipótese precisa ser apresentada como válida.

De modo semelhante ao realizado para o tema-problema, deve-se deixar clara a importân-

cia (justificativa) de se alcançar o objetivo proposto para o trabalho, na área de pesquisa na

qual ele se desenvolve. Essa justificativa, por exemplo, pode se basear em dados que com-

provem que as alternativas existentes atualmente não satisfazem algum critério de qualida-

de perseguido com a proposição do objetivo.

2.3.3 Revisão bibliográfica

Com base em quê a investigação será realizada?

A revisão bibliográfica nada mais é do que a busca por obras (documentos) que falem so-

bre o tema-problema investigado, seguida por uma leitura ordenada, focada e organizada

dessas obras. A revisão bibliográfica é um estudo direcionado realizado para suprir as defici-

ências de conhecimento do aluno. Como apontado por Cervo et al. (2007, p. 79), “a pesquisa

bibliográfica tem como objetivo encontrar respostas aos problemas formulados, e o recurso

utilizado para isso é a consulta dos documentos bibliográficos”.

A revisão pode, então, ser dividida em duas etapas: busca por documentos e leitura das

obras selecionadas com anotação dos pontos importantes. Para a busca por documentos

relevantes, sugere-se aplicar os passos mencionados na Unidade 1, seção 1.5.3, que envolve

a busca de obras pela Internet (em sites especializados ou não) seguida de uma leitura que

passa pelos cinco níveis mencionados. Primeiro, uma pré-leitura deve ser realizada para es-

caneamento e esquematização da obra. Se após essa pré-leitura a obra se mostrar relevan-

te, então a leitura de todo o documento deve ter efeito com o intuito de entender e assimilar

o conhecimento que ele contém. Por fim, o aluno deve exercitar seu senso crítico analisando

a obra e comparando-a com conhecimentos prévios. Outra dica interessante para a revisão

Page 72: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

bibliográfica é iniciar a leitura por documentos mais abrangentes, que dão uma boa vis ˜ao

geral do tema, e ir se especializando em documentos que tratem especificamente do pro-

blema de interesse.

Todas as obras selecionadas para consulta devem ser catalogadas e o processo de leitura

deve ser acompanhado de anotações dos principais fatos, bem como dados e ideias presen-

tes na obra (os quais serão usados como citações na escrita do documento final) ou deriva-

dos dela (os quais indicam conclusões do próprio aluno e devem ser identificados como tal).

De modo geral, para suprir sua carência de conhecimento sobre a aplicação de uma técnica

para a resolução de um problema, o aluno deve pesquisar sobre a técnica, a área de aplicação

e, principalmente, sobre a aplicação dessa técnica (ou semelhantes) nessa área ou similares.

Por exemplo, para suprir toda a carência de conhecimento para tratar o tema-problema do

“ovo X galinha”, nosso aluno-exemplo deveria pesquisar sobre a reprodução (técnica) na

ornitologia ( área de aplicação) e, principalmente, sobre como a reprodução (ou “técnicas”

semelhantes) ocorre nessa “ área” ou similares. Por fim, é importante deixar claro que a re-

visão bibliográfica é uma etapa da pesquisa e não deve ser confundida com o capítulo (ou

seção) de nome similar (“trabalhos relacionados” ou “levantamento bibliográfico”) presente

no trabalho escrito final. Detalhes sobre a etapa de revisão bibliográfica são apresentados

na Unidade 3.

2.3.4 Hipótese

Qual é a provável solução do problema?

O que embasa essa hipótese?

Enquanto o objetivo norteia o trabalho de pesquisa, a hipótese dá subisídios (indícios) para

seu desenvolvimento. Uma hipótese é, portanto, uma suposição para a qual a veracidade ou

falsidade deve ser comprovada com o desenvolvimento do trabalho; uma teoria provável

mas ainda não demonstrada. Em outras palavras, a comprovação da (in)validade de uma

hipótese coincide com o alcance do objetivo proposto (WAZLAWICK, 2009).

Segundo Marconi e Lakatos (2007, p. 28), uma hipótese “é uma suposição que antecede a

constatação dos fatos e tem como característica uma formulação provisória; deve ser tes-

tada para determinar sua validade”. Desse modo, a hipótese de pesquisa desempenha dois

papéis: tenta explicar certos fatos e, ao mesmo tempo, guia a busca por informações.

As hipóteses de pesquisa têm papel fundamental em um trabalho científico, uma vez que

Page 73: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

orientam o aluno indicando a causa ou a solução provável para o que se deseja demonstrar.

Essa característica fica clara em definições como as de Cervo et al. (2007, p. 77), que afirmam

que “a hipótese consiste em supor conhecida a verdade ou explicação que se busca” e acres-

centam, ainda, “a hipótese pode ser a suposição de uma causa ou de uma lei destinada a

explicar provisoriamente um fenômeno até que os fatos a venham contradizer ou ratificar”.

Além desse papel prático, uma hipótese também pode ser usada como complemento te-

órico, facilitando o entendimento e a organização do trabalho como um todo. Cervo et al.

(2007) apresentam algumas características importantes de uma hipótese definida para um

trabalho de pesquisa:

• não pode contradizer verdades já conhecidas e aceitas;

• deve ser simples de se explicar e de se entender;

• deve ser justificada pelos fatos.

Especialmente em relação a esse último ponto, a justificativa para uma hipótese é algo pri-

mordial em um bom trabalho científico. Nesse sentido, fatos, resultados de experimentos

e trabalhos prévios devem ser utilizados para embasar uma hipótese. Uma boa justificativa

deve apresentar evidências derivadas de trabalhos prévios de outros (revisão bibliográfica)

ou do próprio autor (estudo de caso, experimentos) de que vale a pena acreditar na hipótese.

A justificativa é relevante não apenas para uma hipótese que é comprovada ao final do tra-

balho, mas, principalmente, para aquela que é invalidada (falsa). Neste caso, uma hipótese

bem fundamentada e justificada que é invalidada ao final do trabalho traz conhecimento

novo tão interessante, ou até mais, do que uma hipótese que não surpreende ao ser com-

provadamente verdadeira.

Com o respaldo de uma boa justificativa, o trabalho tem maior probabilidade de ser realiza-

do com êxito. Isso porque boas justificativas dão indícios da veracidade da hipótese, que é

realmente validada ao final, ou fortalecem o mérito do trabalho que comprova a falsidade

de uma hipótese supostamente verdadeira. Marconi e Lakatos (2007) lembram, ainda, que

se os resultados da pesquisa rejeitarem as hipóteses de trabalho, novos testes precisarão ser

realizados para garantir sua comprovação.

Por exemplo, de acordo com artigo publicado na revista Superinteressante, há indícios de

que a galinha surgiu primeiro, ou seja, a hipótese de que a galinha veio antes do ovo. Fatos

que embasam (justificam) essa hipótese são: (i) acredita-se que a galinha é descendente de

outra espécie e (ii) apenas um organismo desenvolvido pode se reproduzir, ou seja, pode

produzir seu próprio ovo.

Page 74: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

2.3.5 Método e Técnica

Como o objetivo será/foi alcançado?

O método é a sequência de passos realizados para se atingir o objetivo proposto para o tra-

balho de pesquisa. Em outras palavras, para se comprovar que a hipótese é verdadeira. Des-

se modo, a seleção do método adequado só pode ser realizada após a definição do objetivo

(e, consequentemente, das hipóteses de trabalho).

Segundo Oliveira (2001, p. 57), o método é um “conjunto de processos pelos quais se torna

possível conhecer uma determinada realidade, produzir determinado objeto ou desenvolver

certos procedimentos ou comportamentos”. Embora essa descrição pareça algo bastante

fixo e rigoroso, Barros e Lehfeld (2007) enfatiza que o método deve ser considerado apenas

como uma “orientação” de passos a serem seguidos estando, portanto, sujeito a alterações

durante o percurso contanto que o objetivo mantenha-se o mesmo. Assim, mesmo que a

solução para o problema de pesquisa não seja obtida de modo completamente sistemático,

uma vez solucionado, as etapas realizadas nesse processo podem ser explicadas por meio

do método científico, de modo ordenado e organizado.

Enquanto o método mostra a direção a ser seguida, ou seja, especifica “o que fazer”, a téc-

nica mais específica e estabelece o “como fazer” (BARROS; LEHFELD, 2007). A técnica, por-

tanto, dá o suporte físico especificado por meio dos instrumentos aplicados para auxiliar o

método a alcançar o objetivo proposto. Por exemplo, o método aplicado para solucionar o

problema do “ovo X galinha” poderia incluir experimentos (passos do método) na tentativa

de gerar um ovo de galinha, sem utilizar uma galinha, por meio da combinação de material

genético (técnica) de outras espécies.

2.3.6 Resultados esperados

O que muda no mundo após o objetivo ser alcançado?

Os resultados esperados preveem o impacto do trabalho de pesquisa quando este for fi-

nalizado com sucesso. Diferentemente dos objetivos, que devem ser atingidos no final do

trabalho, os resultados esperados fogem do escopo do trabalho e são apenas previsões de

um alcance maior do trabalho a médio e longo prazo (WAZLAWICK, 2009).

Por exemplo, retomando o problema da origem da galinha, poder-se-ia prever que ao com-

provar que o ovo vem da galinha, o mundo passasse a tratar de modo diferenciado a galinha,

evitando sua extinção, uma vez que não haveria forma de se obter um ovo de galinha sem

ter, previamente, uma galinha.

Page 75: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

2.3.7 Limitações do trabalho

O que meu trabalho não trata?

Todo trabalho de pesquisa, inclusive os muito bons, deixam de lado partes do tema-proble-

ma que não podem ser tratadas por limitações intrínsecas ou extrínsecas. As limitações do

trabalho existem e não devem, de modo algum, serem escondidas ou “camufladas”. Muito

pelo contrário, o aluno deve deixar claro que tem consciência dos aspectos que foram dei-

xados de fora de seu trabalho, reconhece sua importância, mas não pode tratá-los dadas as

condições que dispõe para o desenvolvimento do mesmo (WAZLAWICK, 2009).

Veja que a especificação das limitações do trabalho não desmerece, de jeito nenhum, os

resultados alcançados, apenas delimita claramente a influência de tais resultados enrique-

cendo ainda mais o mérito científico do trabalho desenvolvido.

Uma possível limitação da pesquisa com ovos e galinhas seria, por exemplo, a de que apenas

as galinhas de uma determinada região do mundo foram investigadas devido às limitações geográficas.

2.3.8 Trabalhos futuros

Quais são os trabalhos decorrentes do meu?

Todo trabalho de pesquisa tem prazo para ser finalizado, ou seja, uma deadline

que coloca um ponto final no seu desenvolvimento. Porém, as ideias de novos experimentos

e soluções raramente expiram no mesmo momento. Nesse contexto, os trabalhos futuros

surgem como um espaço para especificação de ideias que não puderam ser testadas por li-

mitações de tempo. A explicitação dessas ideias permite que outros pesquisadores possam

testá-las aumentando a abrangência do trabalho e fazendo com o que o mesmo seja citado

por outros. Quanto maior o número de citações de um trabalho, maior o impacto que ele

tem na comunidade científica e mais valorizado ele será.

Finalizando o exemplo da origem da galinha e seu ovo, um trabalho futuro poderia indicar a

aplicabilidade do estudo para outras espécies que põem ovos, com o intuito de se verificar

se o resultado obtido também se aplica a elas.

2.4 Considerações finais

Ao finalizar a leitura do conteúdo desta unidade, espera-se que o aluno tenha em mente o

que é e qual o papel de cada um dos conceitos apresentados, bem como a relação entre

eles. As perguntas inseridas logo abaixo do título de cada seção são dicas para se identificar

cada um dos conceitos. Essas perguntas devem ser feitas em cada trabalho científico sele-

Page 76: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

cionado para a revisão bibliográfica e, principalmente, na definição do trabalho do próprio

aluno.

A Figura 2.1 apresenta um esquema no qual é possível notar as relações entre esses concei-tos.

Início da audiodescrição da figura 2.1

Temos uma grande elipse. Dentro dela há

três seções também elípticas cada vez

mais internas. A primeira mais externa

representa o tema escolhido para a

pesquisa, a partir dela tem-se o surgimento

da camada intermediária a do problema a

ser tratado da qual por sua vez decorre a

camada mais interna central a do objetivo

da pesquisa, é dessa camada que se ligam os

demais conceito, hipóteses, revisão

bibliográfica, trabalhos futuros, método ou

técnica, resultados esperados e limitações

do trabalho.

Final da audiodescrição da figura 2.1

Figura 2.1 Conceitos de Metodologia Científica e a relação entre eles.

Conforme apresentado nesta unidade, o problema está inserido no tema selecionado para a

pesquisa, e do processo de refinamento de tema-problema surge o conceito principal do tra-

balho: o objetivo. A partir da especificação do objetivo, todos os demais conceitos giram a

seu redor. A revisão bibliográfica será realizada para suprir a necessidade de conhecimento

para a compreensão do objetivo, bem como os trabalhos desenvolvidos anteriormente com

propósito igual ou semelhante. A hipótese norteia a busca pela solução do problema dado o

objetivo especificado, enquanto o método (e as técnicas por ele aplicadas) informa os pas-

sos para se alcançar o objetivo proposto. Os resultados esperados são uma previsão para o

que mudará no mundo quando o objetivo for atingido (futuro), ao passo que as limitações

do trabalho falam abertamente das restrições existentes hoje (presente) para se alcançar o

objetivo proposto. Por fim, os trabalhos futuros apresentam o que pode ser realizado para

complementar ou dar continuidade ao trabalho desenvolvido.

2.5 Atividades de aplicação, prática e avaliação

Com o intuito de fixar os conceitos apresentados nesta unidade e também de exercitar o

senso crítico do aluno, esta seção apresenta alguns trechos de trabalhos científicos publi-

cados na Revista Brasileira de Informática na Educação (RBIE). Cada trecho deve ser lido

em busca do(s) conceito(s) que ele contém. Em cada caso, o conceito presente no trecho só

será revelado no final da seção, permitindo, assim, que o aluno tente identificá-los antes de

visualizar a resposta dada.

Page 77: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Tabela 2.1 Trechos de Lapolli et al. (2010).

a. “O desenvolvimento de objetos de aprendizagem exige modelos instrucionais e de

desenvolvimento flexíveis, por se tratar de uma categoria de software com um con-

junto de requisitos bastante específicos e demandas tecnológicas singulares.”

b. “O uso de metodologias ágeis para o desenvolvimento de objetos de aprendizagem

pode facilitar esse processo permitindo a modelagem das funcionalidades baseados

nos requisitos de comportamento do aluno.”

c. “O presente artigo tem como objetivo discorrer sobre uma experiência no desenvol-

vimento de objetos de aprendizagem, baseado em metodologias ágeis e interface

baseada em scaffoldings.”

d. “No âmbito educacional, o que se pretende com tal prática é aumentar o número de

cenários que possam contribuir com a formação profissional, possibilitando ao aluno

interiorizar o conhecimento de tal forma que seja possível a sua abstração e aplicação

em diferentes situações, inclusive, as não previstas durante o seu treinamento.”

Tabela 2.2 Trechos de Ferreira e Queiroz (2010).

e. “Atualmente são muitos os países que utilizam as Tecnologias de Informação e Comu-

nicação (TICs) aplicadas à educação”

f. “Em contraponto, são ainda escassos os estudos sobre a aplicação de AVAs no ensino

de química, especialmente no âmbito nacional, no qual destacamos os trabalhos de

Ribeiro e colaboradores [3] e Giordan [4]. No primeiro trabalho,...”

Tabela 2.3 Trechos de Behar e Torrezzan (2009).

g. “Frente a expansão da internet e das tecnologias digitais em várias áreas da socieda-

de atual, verifica-se a crescente aplicação de recursos digitais na educação.”

h. “Porém, a maioria desses Materiais Educacionais Digitais (MEDs) é desenvolvida a

partir da simples digitalização de materiais educacionais analógicos, normalmente

ocorrendo um desequilíbrio entre fatores técnicos, gráficos e pedagógicos.”

i. “Portanto, torna-se necessário a construção de novas práticas pedagógicas que se re-

lacionem harmonicamente com esses novos recursos e, principalmente, que sejam

centradas na aprendizagem do aluno.”

j. “Primeiramente, este artigo organiza e relaciona as metas do design pedagógico.

Após, relata o processo de aplicação e validação dessas metas, através da construção

Page 78: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

e aplicação do OA PEDESIGN. Por fim, aborda a aplicação das referidas metas na ela-

boração da tabela de parâmetros para a construção de materiais educacionais digitais

baseadas no DP.”

k. “O objetivo é gerar uma reflexão sobre a importância da aplicação do design peda-

gógico em materiais educacionais digitais, assim como investigar os parâmetros res-

ponsáveis pela elaboração de MEDs que possibilitem a ação crítica do aluno sobre o

objeto de estudo.”

l. “Segundo [7] os elementos de uma interação simples em interface são: Feedback de

causa e efeito observável, em que o usuário consegue perceber que algo aconteceu;

Coerência de efeito, de modo que a mesma ação acontece cada vez que o usuário

repete o evento e Intuição razoável, em que o usuário consegue prever o que pode

acontecer antes de iniciar um determinado evento.”

Tabela 2.4 Trechos de Monteiro et al. (2010).

m. “Neste sentido, o presente trabalho descreve o processo de concepção e desenvolvi-

mento do Amadeus TV, uma extensão do Sistema de Gestão de Aprendizagem Ama-

deus (Amadeus LMS) direcionada ao contexto da TV Digital (TVD).”

n. “A metodologia proposta e adotada neste trabalho baseia-se nas quatro principais

atividades do Processo de Design Iterativo [11].”

o. “Assim, a falta de parcerias com emissoras ou produtoras de conteúdo restringiu os

testes das aplicações ao uso de softwares simuladores.”

p. “Portanto, em versões futuras, o estabelecimento de parcerias com organizações que

veiculam conteúdo televisivo digital deverá permitir a identificação de pontos de me-

lhoria que não são facilmente visíveis em ambientes de simulação.”

Tabela 2.5 Conceitos identificados nos trechos apresentados anteriormente.

a. Tema (desenvolvimento de objetos de aprendizagem), Problema (necessidade de

modelos instrucionais e de desenvolvimento flexíveis) e Justificativa para o problema

(que se trata de uma categoria de software com um conjunto de requisitos e deman-

das especiais).

b. Hipótese

c. Objetivo (relatar a experiência de criação de objetos de aprendizagem) e Técnicas

(metodologias ágeis e interface baseada em scaffoldings).

Page 79: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

d. Resultados esperados

e. Tema

f. Trabalhos relacionados

g. Tema

h. Problema

i. Hipótese

j. Método

k. Objetivo

l. Trabalhos relacionados

m. Tema e Objetivo

n. Método

o. Limitações do trabalho

p. Trabalhos futuros

Page 80: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

UNIDADE 3

O desenrolar da história

3.1 Primeiras palavras

Agora que o aluno já está familiarizado com os principais conceitos da Metodologia Científica é hora de “colocar a mão na massa” ou, mais adequadamente para nosso contexto: “enfiar a cara nos livros”. Até esse momento, a metodologia científica é apenas um emaranhado de conceitos na sua cabeça, como ilustrado na Figura 2.1 da Unidade 2. É hora, então, de deixar que a teoria dê lugar à prática.

Nesta unidade o aluno verá como a pesquisa é desenvolvida, quais são as etapas que a constituem e o que vem a ser cada uma delas. Ao final da unidade será, ainda, instigado a criar um Projeto de Pesquisa muito útil para organizar e guiar as tarefas a serem realizadas.

3.2 Problematizando o tema

O aluno de sistemas de informação acorda num belo dia decidido a fazer pesquisa. Procura um de seus professores que trabalha em alguma área que lhe parece inte-ressante para conversar a respeito desse seu desejo. O professor, muito alegremen-te lhe recebe, discute algumas possibilidades de assuntos de pesquisa (temas) com o aluno e ambos optam por uma opção. Ele sai da sala de seu “agora” orientador todo contente com a empolgante tarefa de vascular a internet e a biblioteca em busca de documentos que tratem sobre o tema. Mas, por onde começar? O que fazer com os documentos encontrados? Como saber se eles são, de fato, interessantes? Por onde começar a leitura? O que buscar nessa leitura? Como armazenar e documentar as informações coletadas? Como definir um objetivo para seu trabalho? O que fazer para alcançar esse objetivo? Como relatar o que aprendeu? Há como traçar um pla-no para guiar essa pesquisa?

Calma! Nesta unidade o aluno começará a responder essas e outras perguntas que passaram por sua cabeça a respeito de como desenvolver uma pesquisa. Aliás, a partir desse momento ele deixa de ser simplesmente um aluno e começa a ganhar a forma de aluno-pesquisador.

3.3 Etapas de uma pesquisa científica

A preparação de um trabalho científico pressupõe alguns passos que serão descritos,

Page 81: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

em detalhes, nas próximas subseções: determinação do tema-problema de trabalho (3.3.1), levantamento da bibliografia referente a esse tema-problema, seleção, leitura e documentação dessa bibliografia (3.3.2), construção lógica do trabalho (3.3.3) e redação do texto (3.3.4) (SEVERINO, 2002).

3.3.1 Determinação do tema-problema de trabalho

Todo trabalho de pesquisa inicia-se pela determinação do tema. Para tanto, entre to-das as opções de tema existentes, o aluno-pesquisador precisa selecionar uma com base em critérios. Entre esses critérios devem, necessariamente, estar presentes aqueles relacionados ao aluno-pesquisador como: seu interesse, seu grau de escola-ridade ou conhecimento e a adequação do tema à sua área de formação. A aderência à área de pesquisa de seu orientador também é um critério que deve, fundamental-mente, ser satisfeito. Outros critérios externos também devem ser considerados na escolha do tema como: a viabilidade de desenvolvimento do trabalho em termos de recursos (tempo, equipe de trabalho e suporte financeiro) disponíveis, a novidade e a relevância do tema escolhido uma vez que não há como justificar uma pesquisa sobre um tema que já foi exaustivamente pesquisado nem que não gerará benefício algum com seu estudo.

Após a escolha de um tema que satisfaça os critérios preestabelecidos pelo aluno, seu orientador e as exigências do nível de pesquisa em questão, o próximo passo é delimitar o tema escolhido, ou seja, especificar a parte (tópico) que será investigada (focalizada). Nesse processo de delimitação do tema, o aluno-pesquisador deve tam-bém deixar claro sob qual ponto de vista (ênfase) o tema será investigado: histórico, financeiro, sociológico, político, etc. (CERVO et al., 2007).

Juntamente com a definição e delimitação do tema surgirá o problema a ser tratado. Afinal de contas, toda a argumentação e todo o raciocínio presentes em um trabalho científico visam apresentar a solução para um determinado problema (SEVERINO, 2002). Porém, para que o problema venha à tona é necessário que o aluno-pesquisa-dor tenha conhecimento suficiente sobre o tema em questão para que possa, munido de informações a seu respeito, formular questões pertinentes e interessantes para a pesquisa. Dessas perguntas surgirão problemas passíveis de tratamento. Como já mencionado na Unidade 2, o conhecimento a respeito do tema só é conquistado por meio da revisão bibliográfica (apresentada na seção 3.3.2). Desse modo, dado o conhecimento e o senso crítico do aluno, o tema será refinado em um processo cícli-co de leitura e reflexão pessoal até que se alcance uma estabilidade para a definição desejada.

Page 82: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Esse processo é ilustrado na Figura 3.1.Início da audiodescrição da figura 3.1

Depois de escolher o tema, inicia-se um processo cíclico composto

pelas etapas de revisão bibliográfica e de definição do problema e do

objetivo. Este ciclo se repete várias vezes, até que o problema e o objetivo

da pesquisa estejam bem definidos e possibilitem prosseguir para a

realização das demais etapas da pesquisa.

Final da audiodescrição da figura 3.1

Figura 3.1 Ciclo de definição do tema-problema e objetivo de pesquisa. Fonte: Adap-tada de Wazlawick (2009, p. 21).

A partir do conhecimento sobre o tema derivado da revisão bibliográfica e dos ques-tionamentos e reflexões do aluno-pesquisador, surgirá um problema que tenha a possibilidade de ser respondido por meio de um trabalho de pesquisa. Uma nova rodada do ciclo tem efeito então com a busca por novos documentos que já tenham abordado o problema identificado pelo aluno-pesquisador. Esse ciclo deve e precisa ser respeitado uma vez que é desse processo iterativo de refinamento que nascerá a capacidade do aluno-pesquisador de delimitar e aprofundar o tema-problema e os objetivos do trabalho. É desse processo cíclico de formulação de perguntas que sur-girão as linhas mestras que guiarão todo o trabalho em busca das respostas para tais questionamentos. Adicionalmente, é da definição clara do problema que surgirão as hipóteses a serem comprovadas (SEVERINO, 2002). Segundo Cervo et al. (2007, p. 76), “desde Einstein, acredita-se que é mais importante para o desenvolvimento da ciência saber formular problemas do que encontrar soluções”.

De acordo com Oliveira (2001), antes de finalizar o ciclo de definição do tema-proble-ma, alguns aspectos devem ser considerados na avaliação da escolha:

• Viabilidade – deve ser possível resolver o problema de modo eficaz por meio da pesquisa;

• Relevância – a resolução do problema deve trazer conhecimentos novos para a área de pesquisa;

• Novidade – o problema deve ser adequado ao estágio científico na área;

• Exequibilidade – o problema deve ser exequível, ou seja, deve ser possível solucioná-lo;

• Oportunidade – o problema deve atender a interesses particulares (do aluno, do orientador) e gerais (da área, do programa de pós-graduação, etc.).

Page 83: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Severino (2002) lembra, ainda, que a opção por determinado tema-problema e suas hipóteses de trabalho deve ser tomada apenas após a discussão e análise de pos-síveis alternativas. Isso porque o trabalho deve ser planejado de modo a apresentar uma única ideia, argumentar a respeito de um único problema e demonstrar uma úni-ca hipótese. Assim, esse autor distingue três fases no processo de amadurecimento de um trabalho: invenção, pesquisa e desenvolvimento. O momento da invenção é aquele no qual o aluno-pesquisador dá margem à sua imaginação e se permite seguir sua intuição no intuito de formular hipóteses a partir do conhecimento prévio e espírito provocador. A pesquisa fornece, ao aluno-pesquisador, os dados, fatos, resultados e ideias de outros autores, que lhe permitem confrontar com suas supo-sições iniciais. Desse confronto nasce uma posição amadurecida. A última fase é a de desenvolvimento do trabalho propriamente dito, realizado de forma guiada e com o único propósito de confirmar a posição amadurecida definida nas fases anteriores.

O processo de refinamento do tema-problema ocorre em paralelo com a definição dos objetivos do trabalho. Tais objetivos podem ser intrínsecos ou extrínsecos, ge-rais ou específicos. Os objetivos intrínsecos se referem a “o que” o trabalho propria-mente dito pretende resolver, quais problemas ele irá tratar. Os objetivos extrínsecos, por sua vez, estão relacionados a fatores externos ao trabalho, como a necessidade de desenvolver o trabalho final de curso para a obtenção de um título de bacharel, por exemplo. Já a classificação de um objetivo como geral ou específico está rela-cionada ao grau de profundidade adotado para descrever tal objetivo; um objetivo específico pode ser visto como um detalhamento ou subproduto de um objetivo geral. Por exemplo, em uma pesquisa bibliográfica em nível de graduação, o objetivo geral do trabalho será mapear, identificar, levantar características sobre um determinado assunto enquanto os objetivos específicos definem o propósito dos objetivos gerais, ou seja, por que o aluno-pesquisador quer mapear, identificar e levantar característi-cas sobre o assunto em questão? (CERVO et al., 2007).

É imprescindível que o objetivo de pesquisa seja apresentado de forma clara e direta, por meio de termos, conceitos e fatos indispensáveis para a explicação do objetivo. Detalhes que especifiquem, por exemplo, como o objetivo será alcançado, devem ser omitidos no momento da definição do mesmo uma vez que se referem ao método utilizado para alcançá-lo, como apresentado na Unidade 2.

A definição do objetivo da pesquisa como sendo os passos do método usado para alcançá-lo é um erro comum cometido por pesquisadores iniciantes e seniores. Por exemplo, não é adequado dizer que o objetivo do trabalho é a implementação e a

Page 84: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

avaliação de um sistema de tomada de decisão. Essas são, na realidade, etapas do método aplicado para alcançar um objetivo de pesquisa que, nesse caso, poderia ser, por exemplo, “melhorar o desempenho da tomada de decisão no mercado finan-ceiro”.

Outro cuidado que se deve tomar ao definir os objetivos intrínsecos da pesquisa é que eles não sejam triviais nem exageradamente complexos. Objetivos não triviais são aqueles que demandam esforço necessário e suficiente para serem alcançados, justificando, assim, a titulação que eles representam. Objetivos muito complexos, por outro lado, correm o risco de não serem alcançados considerando-se o tempo disponível para o desenvolvimento do trabalho. Para escapar da armadilha de definir um objetivo trivial, Wazlawick (2009) aconselha fugir de verbos como “propor”, “estu-dar” e “apresentar”, que não trazem estudo ou apresentação de novo conhecimento, e usar verbos como “demonstrar”, “provar” e “melhorar” que deixam claro que algo novo está sendo buscado.

Wazlawick vai além e lembra que, no momento da avaliação do trabalho final, a “qua-lidade” do objetivo poderá ser analisada por meio das seguintes perguntas (CHINNE-CK, 1988 apud WAZLAWICK, 2009):

• Qual questão de pesquisa foi proposta?

• Qual é a relevância dessa questão (Já foi investigada anteriormente? Vale a pena investigá-la?)

• Há argumentos suficientes para convencer que a questão foi respondida?

• Há contribuição adequada ao conhecimento?

Antes que a ausência de resposta para qualquer uma dessas perguntas coloque todo o trabalho a perder, o aluno-pesquisador deve fazê-las a si mesmo a fim de encontrar as respostas adequadas e deixá-las claras no texto a ser apresentado como docu-mento final.

3.3.2 Revisão bibliográfica

A revisão (ou pesquisa) bibliográfica é parte imprescindível de qualquer trabalho de pesquisa. Em especial nas pesquisas realizadas na graduação ou pós-graduação lato sensu, ela é praticamente todo o trabalho desenvolvido, uma vez que limitações de tempo e outros recursos muitas vezes impedem a implementação e avaliação da solução proposta.

Page 85: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Como já mencionado anteriormente, essa etapa tem início com a definição e a deli-mitação do tema-problema e dos objetivos da pesquisa. Contudo, ela não para por aí, é estendida e, em alguns casos, realizada durante toda a pesquisa. Seu desenvol-vimento deve ser focado e organizado para permitir que o máximo de conhecimento seja adquirido com o mínimo de esforço despendido na busca ou na leitura de docu-mentos que fogem ao escopo da pesquisa. É importante ter em mente que a revisão bibliográfica não traz conhecimento novo, sendo realizada apenas para adquirir o conhecimento necessário para formar a base e traçar as diretrizes do trabalho de pesquisa (WAZLAWICK, 2009).

Para dar início à pesquisa, o aluno deve, portanto, coletar documentos que sejam pertinentes ao tema pesquisado. Essa busca, como já mencionado na Unidade 1, seção 1.5.3, pode ser realizada utilizando-se de sites específicos para busca por pu-blicações científicas, ou mesmo os genéricos e, ainda, diretamente nas bibliotecas. A seleção das obras é feita por meio de uma leitura prévia e superficial para conhecer o assunto tratado (veja Unidade 1, seção 1.5.3). Nesse processo de busca por do-cumentos relevantes, o aluno deve manter o foco e priorizar sempre os documentos mais abrangentes e recentes, num primeiro momento. Nesse sentido, os surveys são uma boa opção uma vez que trazem uma coletânea com os principais trabalhos sobre um determinado tema. Com uma visão do todo, o aluno-pesquisador se sentirá mais apto a afunilar cada vez mais em trabalhos específicos que tenham a ver com o tema-problema escolhido. Com o passar de algumas primeiras leituras, o aluno já será capaz de identificar os trabalhos “clássicos” na área, ou seja, aqueles que são bastante citados por outros trabalhos dada sua relevância para a área de pesquisa. Tanto os trabalhos clássicos, como os recentes, devem ser consultados para que o aluno-pesquisador se familiarize tanto com as “bases” como com o estado da arte na área. Resumindo, a leitura deve iniciar-se pelos documentos mais recentes e gerais, em direção aos mais particulares e antigos (SEVERINO, 2002).

Deve-se, também, utilizar sempre fontes confiáveis para estudo e coleta de infor-mações que servirão de base para a pesquisa. Essas fontes confiáveis são: livros, artigos publicados em revistas científicas (periódicos ou journals) ou eventos cien-tíficos conceituados, monografias de conclusão de cursos de graduação (TCC) ou pós-graduação (dissertações e teses) e outras publicações produzidas com revisão e rigor (relatórios técnicos, manuais, etc.). Cada uma dessas obras apresenta vanta-gens. Enquanto os livros trazem informação mais amadurecida, os artigos apresen-tam informações mais recentes e apontam lacunas que trazem ideias de pesquisa. A confiabilidade dessas publicações está diretamente relacionada ao processo de

Page 86: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

revisão ao qual são submetidas. Os livros, os artigos de periódicos e eventos cien-tíficos e as monografias escritas para obtenção de títulos passam, todos, por uma ou mais rodadas de revisão por especialistas da área. Deve-se, portanto, evitar refe-rências a fontes não tão confiáveis, como os sites da Internet, dada a volatilidade da informação que disponibilizam e, principalmente, a ausência de revisão do conteúdo publicado. Contudo, se um site for a única fonte de referência disponível para uma determinada informação, o aluno-pesquisador deve priorizar sites com conhecida “qualidade” e aceitação pela comunidade.

Os critérios para seleção e organização das obras a serem lidas devem eliminar o que for dispensável para que seja possível atender ao que realmente importa, no tempo disponível para essa etapa. Segundo Cervo et al. (2007), os critérios para essa leitura seletiva derivam dos objetivos definidos no trabalho em busca de res-postas para as questões formuladas com o intuito de resolver o problema. Seguindo esses critérios, um conjunto inicial de obras deve ser selecionado para dar início à lei-tura crítica ou reflexiva. Sugere-se que as obras sejam ainda, na medida do possível, ordenadas por grau de relevância para que as mais relevantes sejam lidas primeiro.

A leitura dessas obras selecionadas deve ser realizada com o intuito de responder às dúvidas e aos questionamentos a respeito do tema-problema, ou seja, a leitura deve ser guiada pela busca de respostas. Uma combinação de habilidades é, então, importante nesse processo (CERVO et al., 2007):

• Aprendizagem – envolve a reflexão a respeito do que é lido;

• Apreensão – envolve a percepção do significado do que é lido bem como a análise e comparação dos fatos, diferenciação de ideias e abordagens finali-zando com a síntese e o julgamento do conteúdo;

• Assimilação – envolve a apropriação dos dados.

Além dessas habilidades, não se deve deixar de mencionar o espírito crítico que deve ser almejado e praticado pelo aluno-pesquisador em todo seu processo de pesquisa. Deve-se, portanto, questionar a validade das informações consultadas e não aceitar passivamente sua veracidade. Como já mencionado, na pesquisa, saber formular perguntas é tão importante quanto encontrar as soluções. Wazlawick (2009) apresenta algumas perguntas que podem ajudar o aluno-pesquisador a treinar seu senso crítico e obter, da obra consultada, a riqueza de conhecimento que se espera:

• De onde o autor tira suas ideias?

Page 87: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Ao responder a essa pergunta, o aluno-pesquisador saberá quais são as bases teóricas do autor para o desenvolvimento do trabalho. Se a resposta não puder ser alcançada, a veracidade dos resultados e afirmações dessa obra poderá ser questionada.

• Qual é o resultado do trabalho?

Uma resposta curta e direta para essa pergunta indica que o trabalho está claro e bem organizado, caso contrário, apresenta, ao menos, falhas de organização e escrita.

• Qual a relação desse trabalho com os demais da mesma área?

Essa relação deve estar clara na obra consultada, porém o aluno-pesquisador também pode e deve formular suas próprias conclusões em relação a essa e outras obras já lidas sobre o mesmo assunto.

• Como se poderia continuar essa pesquisa?

Dessa resposta pode surgir uma boa ideia de problema a ser investigado. Para tanto, o aluno-pesquisador deve ficar atento às limitações do trabalho e propos-tas de trabalhos futuros mencionadas pelos autores.

• Quais ideias de áreas correlatas poderiam ser aproveitadas nessa pesquisa?

A resposta a essa pergunta requer a criatividade do aluno-pesquisador, o que, apesar de ser uma tarefa difícil, pode acabar gerando uma boa hipótese de pesquisa se bem fundamentada e justificada.

Uma boa revisão bibliográfica impedirá que o aluno-pesquisador cometa o erro fatal de usar, em seu trabalho escrito, afirmações do tipo “eu não encontrei nada pareci-do” (também conhecida como síndrome da intersecção esquecida). Deve-se ter em mente que por menos semelhante que um trabalho pareça em relação ao seu, algo em comum ele com certeza tem, afinal de contas ele trata do mesmo tema e foi sele-cionado para a leitura criteriosa que você realizou. Assim, tome cuidado, pois só há duas interpretações possíveis para a síndrome da intersecção esquecida: o aluno--pesquisador não realizou o levantamento bibliográfico como deveria ou o tema não é relevante (interessante) para ser pesquisado (WAZLAWICK, 2009).

Todas as obras coletadas devem ser catalogadas e armazenadas com o apontamen-to das principais ideias, fatos e informações derivados de cada documento. Dessas anotações é que surgirão os embasamentos teóricos, as justificativas, o conhecimen-

Page 88: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

to das técnicas e, consequentemente, as citações que preencherão, principalmente, a seção de levantamento bibliográfico (ou trabalhos relacionados) do documento es-crito (como será apresentado na Unidade 5).

Esse processo de catalogação e organização das obras consultadas que, por muitos anos foi feito em papel, atualmente pode ser realizado com o auxílio de ferramentas computacionais. Nesse caso, as mesmas informações antes anotadas nas chama-das “fichas de leitura” (ou “fichas de documentação”) são transcritas em fichas virtuais disponíveis em ferramentas como o JabRef1, o EndNote2 e o BiblioExpress3. Existem, ainda, ferramentas como a StArt (State of the Art through Systematic Review)4 que combinam as tarefas de busca por artigos e catálogo de obras e anotações, entre ou-tras funcionalidades. A Figura 3.2 a seguir apresenta uma tela da ferramenta JabRef ilustrando uma coleção de documentos catalogados e como as informações sobre o mesmo são armazenadas.Início da audiodescrição da figura 3.2

A figura exemplifica as funcionalidades da ferramenta

de gerenciamento de referências bibliográficas.

Com o layout todo em inglês está em destaque

a primeira aba, Required Field, campos obrigatórios.

Nela estão as informações de um arquivo selecionado

discriminadas nos campos, Author, autor da publicação,

Title, título da publicação, Journal, periódico no qual o

artigo foi publicado, Year, ano da publicação, Volume,

volume do periódico que contém o artigo publicado,

Pages, páginas.

Final da audiodescrição da figura 3.2

Figura 3.2 Tela do JabRef com anotações. Fonte: JABREF Reference manager, 2008.

Nessa figura é possível notar que cada obra é identificada pelas informações obriga-tórias (Required fields) inseridas na primeira aba. São essas informações que identifi-cam unicamente a obra e serão usadas para gerar as citações e referências bibliográ-ficas (assuntos tratados na Unidade 5). As anotações a respeito das ideias, dados e

1 http://jabref.sourceforge.net

2 2www.software.com.br/EndNote

3 http://www.biblioscape.com/biblioexpress.htm4 http://lapes.dc.ufscar.br/ferramentas/start

Page 89: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

fatos mencionados nessa obra podem ser inseridas na aba de revisão (Review). Por meio dessa ferramenta é possível, ainda, agrupar as obras selecionadas, de acordo com grupos criados pelo usuário, que indiquem, por exemplo, sua relevância ou apli-cação, como os subgrupos apresentados na janela superior esquerda (Groups).

Nesse processo de fazer anotações a respeito do que é lido é preciso ter muito cuida-do para manter sempre entre aspas o trecho que é copiado literalmente da obra con-sultada e sem aspas o que é fruto do entendimento e reflexão do próprio aluno. Isso porque a cópia literal de trecho de obra de outro autor sem o uso das aspas duplas é considerada plágio, como veremos na Unidade 4. Para evitar esse tipo de problema, o aluno-pesquisador deve manter o padrão de usar sempre aspas duplas quando fizer a cópia literal de trechos de obras de outros autores. Outro ponto crucial é sem-pre indicar a referência completa de onde foi retirado o trecho copiado literalmente entre aspas ou o fato que deu origem à ideia/reflexão de autoria própria do aluno--pesquisador (nesse caso sem as aspas). Ferramentas de catálogo de documentos, como as citadas anteriormente, nas quais é possível inserir as anotações (na aba de revisões da Figura 3.2) para cada obra, já faz esse link automático entre a referência da obra e as anotações a seu respeito.

Por exemplo, se o aluno-pesquisador quiser citar literalmente o trecho deste livro apresentado na Unidade 1, deverá fazê-lo usando as aspas duplas e citando a fon-te (referência completa da obra) da qual foi retirado. Essa citação ficaria assim: “A Metodologia Científica é a disciplina que oferece ao aluno a capacidade de aprender a formar conhecimento de modo organizado, ou seja, seguindo uma metodologia amparada na ciência.” (CASELI, 2011, p. 13). Esse tipo de citação é denominada citação direta. Há, ainda, a opção de reescrever, com suas próprias palavras, o conteúdo consultado, o que é denominado citação indireta. Desse modo, reescre-vendo o trecho da citação direta apresentado acima para gerar uma citação indireta, temos: por meio da Metodologia Científica o aluno estará apto a aprender, de forma organizada e com base científica, como adquirir conhecimento (CASELI, 2011). Per-cebe-se, portanto, que tanto a citação direta quanto a citação indireta sempre devem vir acompanhadas da fonte de onde foram retiradas: (CASELI, 2011) nos exemplos anteriores. Esses tipos de citações, bem como o formalismo usado para escrevê-las serão apresentados na Unidade 5.

As anotações podem ser realizadas durante a leitura, interrompendo-a sempre que algum fato novo ou interessante for encontrado, ou após uma leitura completa da obra (SEVERINO, 2002). A primeira estratégia provavelmente é a mais direta e me-

Page 90: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

nos sujeita a esquecimentos. Vale ressaltar que a qualidade das anotações está diretamente relacionada à efetiva reutilização no momento da dissolução de alguma dúvida, tomada de alguma decisão ou produção do material escrito. Assim, com-pletude e corretude são critérios que devem ser satisfeitos durante toda a revisão bibliográfica. Entende-se que uma anotação de qualidade não deve deixar em aberto termos e conceitos relevantes para seu entendimento, nem dificultar a recuperação de detalhes não transcritos (como fórmulas e figuras) no documento original. Da mesma maneira que a anotação não deve pecar por falta de detalhes, também não deve fazê-lo por excesso. Para isso, tenha sempre em mente que deve ser anotado aquilo que for efetivamente útil para o trabalho. Se seu objetivo de pesquisa é focar o tema em relação a seu aspecto filosófico, fatos geográficos ou econômicos podem não ser aproveitáveis e, portanto, não precisam ser retidos nas anotações. Como sa-biamente mencionado por Cervo et al. (2007, p. 82): “o importante é saber distinguir o essencial do acessório”.

Por fim, vale ressaltar que a revisão bibliográfica não é o mesmo que o capítulo (ou seção) de mesmo nome (ou similar) produzido no documento escrito final. Enquanto, aqui, na etapa de revisão bibliográfica, as anotações das fichas de leitura são orga-nizadas por obras, na escrita do documento final essas fichas serão usadas apenas para a consulta. O texto final deverá ser coeso e coerente, focado no objetivo da pesquisa e com o intuito de apresentar fatos e dados que justifiquem as escolhas realizadas no desenvolvimento do trabalho e não a transcrição das fichas de leitura produzidas na etapa de revisão bibliográfica.

3.3.3 Construção lógica do trabalho

Após a delimitação do tema-problema com objetivos e hipóteses do trabalho e a lei-tura das obras (revisão bibliográfica) para suprir a necessidade de conhecimentos, o aluno-pesquisador tem plenas condições de sintetizar o conhecimento adquirido montando a estrutura lógica do trabalho. Severino (2002, p. 82) descreve muito bem que “a construção lógica do trabalho é o arranjo encadeado dos raciocínios utilizados para a demonstração da hipótese formulada no início”.

É importante que o trabalho escrito não apenas tenha conteúdo que garanta sua qualidade, mas também que esse conteúdo faça sentido, ou seja, que as partes do documento final estejam conectadas e sejam apresentadas seguindo um fluxo lógico de raciocínio. Para tanto, todos os dados necessários para “convencer” o leitor de que o objetivo do trabalho foi alcançado devem ser apresentados em uma ordem que o faça raciocinar e concluir o que se espera. O leitor deve ser guiado, pela constru-

Page 91: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

ção lógica do trabalho, a concluir o mesmo que o autor: que a hipótese inicialmente proposta foi verificada ao final do trabalho.

De modo geral, o trabalho científico pode ser dividido em três partes fundamentais: introdução, desenvolvimento e conclusão.

A introdução é o capítulo (ou seção) inicial do documento escrito, porém prova-velmente será a última a ser escrita dada a abrangência de seu conteúdo. É na introdução que serão apresentados os principais conceitos vistos na Unidade 2: o tema-problema do trabalho e seus objetivos, alguns trabalhos lidos na revisão biblio-gráfica úteis para contextualizar o tema-problema, as hipóteses de trabalho e uma ideia sobre o método utilizado para comprová-las. Todo esse conteúdo deve, ainda, ser acompanhado de justificativas sempre que possível.

Em outras palavras, a introdução deve contextualizar o trabalho deixando claro para o leitor o que foi feito. Contudo, uma descrição detalhada de como os resultados foram obtidos e quais conclusões foram tiradas deve ser adiada para as partes sub-sequentes do documento. O conteúdo da introdução deve ser muito bem planejado para que garanta a clareza e a completude, sem excessos, necessárias para cumprir seu papel de introduzir o trabalho. Por isso ela, via de regra, é a última parte do do-cumento a ser escrita.

Enquanto a introdução geralmente ocupa um capítulo (ou uma seção, no caso dos artigos), o desenvolvimento pode ser dividido em quantos capítulos (ou seções) o autor julgar necessários para apresentar todos os detalhes do trabalho. É no de-senvolvimento que o autor discute os trabalhos relacionados estudados na revisão bibliográfica, usando para isso suas próprias palavras e entendimento, consultando as anotações das fichas de leitura sempre que necessário. O método (sequência de passos) usado para se atingir o objetivo proposto e os resultados obtidos com experimentos de avaliação e análise também são descritos no desenvolvimento do trabalho.

Barros e Lehfeld (2007) complementam dizendo que o desenvolvimento deve cumprir três estágios: explicação, discussão e demonstração. Em outras palavras, o conteúdo em questão deve explicitar, descrever e esclarecer os fatos (explicação); comparar as várias abordagens e estratégias (discussão) e argumentar de modo adequado para se chegar à conclusão que se quer (demonstração).

Por fim, o capítulo (ou seção) de conclusão finaliza o documento retomando objeti-vos e hipóteses descritos na introdução e concluindo, com base no conteúdo apre-

Page 92: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

sentado no desenvolvimento, que os mesmos foram atingidos e são verdadeiros, respectivamente. É na conclusão que o autor pode expressar seu ponto de vista a respeito dos resultados obtidos, indicar direções para continuação ou extensão do trabalho (trabalhos futuros) e divagar sobre o impacto de sua pesquisa (resultados esperados).

Resumidamente, podemos dizer que o papel da introdução é contextualizar o traba-lho, o do desenvolvimento é fornecer dados para que o leitor entenda o que foi feito e o da conclusão é sintetizar o trabalho desenvolvido.

3.3.4 Redação do texto

A última etapa de uma pesquisa científica é a produção de um documento escrito que relate as demais etapas. Em muitos casos, esse documento é a única forma de com-provação e avaliação do trabalho desenvolvido. A Unidade 5 trata especificamente desse assunto, em detalhes.

3.4 Projeto de Pesquisa

Um Projeto de Pesquisa é um documento criado pelo aluno-pesquisador, em con-junto com seu orientador, para delimitar a pesquisa e especificar/organizar as tarefas a serem desenvolvidas. Seu papel, para o aluno-pesquisador, é definir e planejar o caminho a ser seguido explicitando as tarefas que devem ser realizadas com os instrumentos e técnicas mais adequados. Para o orientador, o projeto traz um en-tendimento geral do trabalho e é uma ótima oportunidade de diálogo com o aluno--pesquisador para definir, desde cedo: perspectivas, alternativas e possíveis desvios no trabalho. Para ambos, o projeto significa disciplina e organização, deixando clara a lógica de desenvolvimento dentro dos prazos a serem cumpridos.

Além de guiar o trabalho de pesquisa para aluno-pesquisador e orientador, o projeto de pesquisa muitas vezes é criado para ser submetido a uma agência de fomento (CAPES, CNPq, FAPESP, etc.) para o pedido de uma bolsa. Nesse caso, deve-se verificar qual o formato específico adotado pela agência. Em vários cursos de douto-rado, também, o projeto de pesquisa é um dos documentos requisitados no processo de seleção. Geralmente, o projeto de pesquisa é composto pelo seguinte conteúdo, variando, apenas, na sua forma de organização e apresentação (SEVERINO, 2002):

• Título

O título deve indicar, de modo claro e direto, o assunto (tema) do trabalho. Quanto mais específico, sem exageros, for o título, melhor será sua represen-

Page 93: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

tatividade do tema abordado.

• Delimitação do tema-problema

O tema deve ser contextualizado brevemente com sua relevância claramente apresentada com base nas informações coletadas nos trabalhos relacionados ou experimentos prévios do próprio autor. Após a breve delimitação do tema, o problema deve ser apresentado. Para isso o autor deve deixar claro como o problema surgiu, ou seja, quais fatos e questionamentos deram origem à pro-blemática adotada para investigação. Em seguida, para demonstrar a relevân-cia do problema e o conhecimento do aluno-pesquisador sobre essa problemá-tica, alguns trabalhos que já foram lidos na revisão bibliográfica inicial devem ser discutidos com o intuito de estabelecer o cenário da pesquisa. Essa parte é finalizada com a especificação dos objetivos e, se possível, indicação das contribuições pretendidas para o trabalho.

• Apresentação das hipóteses

Dessa exposição de tema-problema e bibliografia relevante surgem as hipó-teses de trabalho. Nesse ponto é importante ter em mente que hipóteses são as suposições que se pretende demonstrar ao final do trabalho. Como esse documento é apenas um plano de desenvolvimento e, portanto, nenhum expe-rimento foi realizado, não há como fundamentar as hipóteses com base no que ainda será feito. As hipóteses devem, portanto, ser fundamentadas com base nos indícios coletados de trabalhos relacionados e estudos prévios do próprio autor.

• Explicitação do quadro teórico

O quadro teórico é o conjunto de termos, conceitos, estratégias, princípios e conhecimentos que formam a lógica sobre a qual o trabalho está alicerçado. O quadro teórico é, portanto, o ponto de partida do trabalho e, para tanto, deve ser consistente e coerente com o mesmo. Contudo, a base teórica não deve, de modo algum, limitar ou restringir o trabalho, uma vez que algum conhecimento novo deverá ser gerado com base em alguma criatividade de seu desenvolve-dor.

• Indicação dos procedimentos metodológicos e técnicos

Essa parte descreve apenas ideias para desenvolvimento do trabalho, uma vez que a especificação do que realmente foi utilizado só será possível quan-

Page 94: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

do o trabalho já estiver finalizado. Assim, essa parte traz apenas indicativos dos procedimentos mais amplos (método) e dos instrumentos mais específicos (técnicas) a serem aplicados para se alcançar os objetivos propostos. Embora sejam apenas indicativos, a escolha por esse método ou essas técnicas, como sempre, devem ser embasadas e justificadas.

• Definição do cronograma de desenvolvimento

Essa talvez seja a parte mais importante do projeto de pesquisa. O cronograma deve ser organizado em períodos de tempo (dias, semanas, meses ou anos) mais adequados para o nível da pesquisa almejada e, principalmente, tendo em mente os prazos estabelecidos pelas instituições e agências de fomento. É nesse momento que o aluno-pesquisador e seu orientador terão de delimitar as tarefas a serem realizadas durante toda a pesquisa e a distribuí-las nos inter-valos de tempo preestabelecidos. Com isso, ambos terão a noção exata do que precisa ser feito e quanto tempo será necessário para realizar cada atividade.

• Referências bibliográficas básicas

A última parte do projeto contém as referências aos trabalhos já investigados na revisão bibliográfica inicial que deu origem ao próprio projeto de pesquisa. Com o decorrer da pesquisa, novas referências serão consultadas e, provavel-mente, farão parte do documento produzido ao final do trabalho.

Por fim, é importante ter em mente que, embora seja bastante útil, o projeto de pes-quisa é apenas um guia inicial estabelecido entre aluno-pesquisador e seu orientador (e uma agência de fomento se a pesquisa for financiada por alguma bolsa de pes-quisa) e, como tal, poderá sofrer alterações no decorrer da pesquisa. Ele tem papel fundamental para especificação, delimitação e organização da pesquisa, mas não deve gerar pânico se nem tudo sair como previsto em seu conteúdo. Para o aluno--pesquisador, a elaboração do projeto de pesquisa deve deixar claro: o objetivo do trabalho e o caminho (estratégias, instrumentos, etapas e prazos) a ser percorrido para alcançá-lo.

3.5 Considerações finais

A partir de todo o conteúdo exposto nesta unidade, o aluno-pesquisador é, agora, capaz de iniciar seu trabalho de pesquisa. Para tanto, deverá seguir as etapas aqui especificadas: delimitar o tema-problema, realizar a revisão bibliográfica, construir a organização lógica do trabalho e, ao final de todo o desenvolvimento, redigir o texto.

Page 95: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

A propósito, em nenhum momento desta unidade mencionou-se o conteúdo do “de-senvolvimento”. Nada foi dito a esse respeito porque o desenvolvimento varia de tra-balho para trabalho sendo impossível especificar, de modo genérico, o que ele deve conter. Diferentemente das demais etapas da pesquisa, que seguem uma estrutura comum e puderam, portanto, serem explicadas genericamente nesta unidade; o de-senvolvimento é único para cada trabalho e será composto pelo relato dos passos do método e a aplicação das técnicas definidos para cada pesquisa.

Page 96: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

UNIDADE 4

A responsabilidade e a seriedade

4.1 Primeiras palavras

O desenvolvimento de um trabalho de pesquisa requer um ingrediente fundamental, além das etapas bem-definidas apresentadas na Unidade 3: conduta ética. Todo o processo de pesquisa deve ser regido pela ciência e pela ética para que os resulta-dos alcançados mereçam crédito e levem o aluno-pesquisador à obtenção do reco-nhecimento almejado. Uma conduta ética é, portanto, tão relevante quanto a aplica-ção do método científico. Apenas para exemplificar essa relevância: de que adianta o aluno produzir um trabalho muito bem elaborado e desenvolvido de acordo com a metodologia científica se ele for fruto de plágio total ou parcial? Nesta unidade serão apresentados os pontos referentes a uma conduta ética esperada de um pesquisador responsável.

4.2 Problematizando o tema

O que é ética? Por que ela é tão importante na pesquisa científica? Até que ponto o conteúdo de um trabalho de autoria de outra pessoa pode ser utilizado para embasar o seu? O que é considerado plágio e o que é citação a trabalho relacionado? Como ser um pesquisador ético e responsável? Quais são os prejuízos de uma má conduta ética? Esses são questionamentos válidos e importantíssimos que devem ser consi-derados e respondidos desde já, no início de sua carreira de pesquisador, antes que erros éticos se tornem rotina.

4.3 Ética na pesquisa científica

Em seu sentido mais amplo, ética, segundo Pinto (2008, p. 6), é a “ciência do com-portamento moral que busca explicar, compreender, justificar e criticar a moral de uma sociedade”. Nesse sentido, alguns princípios são apontados por Câmara (2009) para a ética na pesquisa científica:

• Primazia – o primeiro autor a publicar algo sobre o tema leva o crédito pela invenção;

• Avanço do conhecimento – todo artigo científico precisa, necessariamente, apresentar conteúdo novo e relevante para a ciência;

Page 97: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

• Reprodutibilidade – os experimentos descritos em uma publicação científica devem ser replicáveis.

Além de princípios básicos que regem a ética na pesquisa científica, alguns pecados capitais apontados por vários estudiosos são:

• Fabricação – criação artificial de dados, registro, relatos e resultados;

• Falsificação – manipulação de materiais, processos de pesquisa ou equipa-mentos, bem como a alteração ou omissão de dados;

• Plágio – apropriação indevida de ideias, palavras, processos ou resultados de outro autor sem a devida citação à fonte.

Desses pecados, talvez o mais conhecido seja o plágio. A cópia parcial ou integral de trabalho de autoria de outra pessoa é considerada crime, pois viola o direito à propriedade especificado no primeiro princípio da ética, a primazia. Atualmente, com a Internet, é tão fácil copiar um trabalho quanto se detectar essa cópia, sendo ne-cessário, em ambos os casos, apenas um motor de busca e algumas palavras-chave sobre o tema-problema a ser pesquisado.

Em especial, o plágio no meio acadêmico traz consequências desastrosas para a qualidade e evolução da pesquisa, uma vez que o mérito pelo desenvolvimento de um trabalho acaba indo parar nas mãos de uma pessoa que não o merece. Nesse caso, tanto o infrator quanto a vítima do plágio são prejudicados. O primeiro, porque não possui o conhecimento que afirma, em sua falsa publicação, ter adquirido com o desenvolvimento do trabalho (que não é seu). O segundo, porque não recebe o reconhecimento merecido por horas e mais horas de trabalho árduo de pesquisa re-alizado para se obter os resultados relatados em sua publicação, que foi surrupiada. Há, ainda, um terceiro prejuízo maior e mais abrangente que afeta a ciência como um todo uma vez que o conhecimento (da vítima) está dissociado da publicação (do plagiador), o que impede sua propagação da maneira adequada.

Há, basicamente, dois tipos de plágio: a cópia literal e a cópia de ideias. Na primeira, trechos do texto de outra pessoa são copiados literalmente sem estarem entre aspas e sem a devida citação da fonte. Na segunda, embora o plagiador não se utilize das mesmas palavras do autor sendo copiado, toma como suas as ideias dele sem dar o merecido crédito por meio da citação à fonte (WAZLAWICK, 2009).

Deve-se, portanto, transformar a cópia em citações à fonte usando, para isso, cita-ções diretas (nas quais o texto original é reproduzido na íntegra, entre aspas) ou in-

Page 98: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

diretas (nas quais o texto original é reescrito). A segunda forma de citação, a indireta, deve ser preferida, sendo a primeira reservada para os casos em que a explicação de um conceito, técnica ou teoria ou a reprodução de uma expressão são mais bem descritos nas palavras de seu inventor (o autor da fonte) (PLAGIO.NET, 2010). Con-tudo, ao mesmo tempo que as citações aumentam o mérito científico do trabalho, demonstrando que o autor realizou uma pesquisa bibliográfica sólida e robusta, elas devem ser usadas com cautela e apenas quando necessário, uma vez que cabe ao autor inserir sua contribuição original ao trabalho.

Se a cópia for transformada em citação, não há plágio, como bem esclarecido por Wazlawick (2009, p. 141): “Não é considerado plágio o uso de ideias de terceiros, desde que a fonte apareça claramente identificada. No caso de cópias literais, devem aparecer entre aspas”.

Para fugir do problema do plágio, então, a dica essencial é reescrever o texto original com suas próprias palavras e citar a fonte. Para a reescrita, o PlaGiO.net (2010) traz algumas dicas elaboradas pelo MIT (2007), que devem ser aplicadas em conjunto: usar sinônimos para substituir palavras do texto original, modificar a estrutura da sen-tença que se deseja referenciar ou alterá-la de voz ativa para passiva e vice-versa, dividir o conteúdo em partes menores ou sumarizá-lo e citar a fonte. O PlaGiO.net (2010) frisa, ainda, que apenas a substituição de palavras por seus sinônimos não basta para não configurar plágio, mesmo que a fonte seja citada!

Veja que o exemplo já apresentado na seção 3.3.2 da Unidade 3, reproduzido na Ta-bela 4.1, mostra como transformar uma citação direta em uma citação indireta. Nesse caso, o texto produzido como citação indireta não é considerado plágio porque ao mesmo tempo que mantém alguns termos do original (Metodologia Científica, aluno, conhecimento), outras palavras foram substituídas por sinônimos (capacidade X es-tar apto, modo X forma, formar X adquirir) e a estrutura da sentença foi alterada de voz ativa para passiva.

O padrão usado para citações diretas e indiretas será apresentado na Unidade 5.

Tabela 4.1 Exemplo de reescrita do texto original (na citação direta) para usá-lo como uma citação indireta.

Page 99: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Citação direta Citação indireta“A Metodologia Científica é a disciplina que

oferece ao aluno a capacidade de aprender

a formar conhecimento de modo organi-

zado, ou seja, seguindo uma metodologia

amparada na ciência.”

(CASELI, 2011, p. 13)

Por meio da Metodologia Científica o aluno

estará apto a aprender, de forma organiza-

da e com base científica, como adquirir co-

nhecimento (CASELI, 2011).

A legislação brasileira traz algumas leis sobre essa temática das quais algumas serão citadas a seguir, dada sua relevância na área de computação e suas pesquisas. A lei no 9.610 de 19 de fevereiro de 1998 fala, no artigo 6o, sobre direito autoral de projeto subvencionado: “Não serão de domínio da União, dos Estados, do Distrito Federal ou dos Municípios as obras por eles simplesmente subvencionadas”. O artigo 7o da mesma lei cita as obras protegidas, entre elas: “os textos de obras literárias, artísticas ou científicas.” e “os programas de computador.”. No caso destes últimos, há uma lei específica (§1º “Os programas de computador são objeto de legislação específica, observadas as disposições desta Lei que lhes sejam aplicáveis”).

O artigo 8º da mesma lei cita que não são objeto de proteção como direitos autorais: “as ideias, procedimentos normativos, sistemas, métodos, projetos ou conceitos ma-temáticos como tais”, “os esquemas, planos ou regras para realizar atos mentais, jogos ou negócios”, “o aproveitamento industrial ou comercial das ideias contidas nas obras” entre outros.

Por fim, o artigo 46 da mesma lei trata das reproduções que não ofendem os direitos autores, entre elas: “a reprodução, em um só exemplar de pequenos trechos, para uso privado do copista, desde que feita por este, sem intuito de lucro” e “o apanhado de lições em estabelecimentos de ensino por aqueles a quem elas se dirigem, veda-da sua publicação, integral ou parcial, sem autorização prévia e expressa de quem as ministrou”.

Wazlawick (2009) complementa, ainda, que “segundo a lei, o autor de uma obra será sempre a pessoa física que a gerou, não a pessoa jurídica. A proteção à pessoa ju-rídica poderá, porém, também ser concedida em casos previstos em lei”. A proteção tem efeito por 70 anos a partir do primeiro dia do ano subsequente ao falecimento do autor e é passada como herança.

Apenas para não deixar dúvidas da gravidade desse assunto: o plágio é considerado crime no Brasil e, sendo assim, a pena para casos de plágio é de multa e prisão.

Page 100: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Academicamente, é uma falta ética gravíssima que acarreta no mínimo a reprova do plagiador (WAZLAWICK, 2009).

Booth et al. (2000) acrescentam, ainda, que pesquisadores responsáveis são aque-les que:

• não apresentam dados cuja exatidão têm motivos para questionar;

• não encobrem objeções que não podem refutar;

• não ridicularizam os pesquisadores que têm pontos de vista contrários aos seus;

• não redigem seus relatórios de modo a dificultar propositalmente a compreen-são dos leitores;

• não simplificam demais o que é legitimamente complexo.

Resumindo, um pesquisador responsável apresenta sua pesquisa da maneira como ela é, sem maquiagem ou desvios, com o intuito de promover o desenvolvimento da ciência e compartilhar com outros pesquisadores suas descobertas e relatos. Pes-quisadores responsáveis sabem que a pesquisa é uma via de mão dupla e, portanto, ao pesquisar pensando no interesse do outro está, também, beneficiando-se a si próprio.

Pinto (2008) traz algumas atitudes questionáveis em uma pesquisa ética como os critérios de autoria. A autoria de um trabalho deve limitar-se aos pesquisadores que realmente contribuíram com a produção do mesmo, seja na definição da ideia, na elaboração do projeto, no desenvolvimento ou mesmo na análise dos resultados. Não é ético adotar o “rodízio de autores” pois isso fere a definição de “autoria” que está diretamente relacionada ao agente participante do processo. Outra atitude ques-tionável é a duplicidade de publicação, ou seja, o mesmo trabalho publicado em veí-culos (congressos ou periódicos) distintos. Várias conferências e periódicos realizam um controle interno para evitar a dupla submissão, porém, essa conduta deve partir do próprio autor.

Há, ainda, pontos relacionados à conduta do pesquisador, perante a comunidade científica, como revisor e parecerista de artigos e projetos, respectivamente. Nesse caso, é importante que os conflitos de interesse sejam respeitados, ou seja, que um pesquisador não seja revisor (parecerista) de um trabalho (projeto) de algum colega, amigo ou aluno. O mesmo vale para os inimigos, desafetos e membros de grupos

Page 101: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

rivais. Em outras palavras, fatores externos não devem influenciar o julgamento do pesquisador a respeito do trabalho de outro. Nesse processo de julgamento, o sigilo também deve ser respeitado por parte do revisor para que nenhum detalhe da publi-cação sendo avaliada venha à tona.

Alguns impactos da má conduta do pesquisador, apresentados em Pinto

(2008), são:

• diminuição da confiabilidade dos resultados e relatos científicos;

• enfraquecimento da confiança do público nos pesquisadores e entre os pesqui-sadores;

• desperdício de recursos públicos;

• influência em decisões que podem causar mal ao público (no caso de resulta-dos publicados erroneamente por falha ou negligência).

4.4 Considerações finais

Vimos, nesta unidade, que uma conduta ética é tão importante quanto a aplicação do método científico, e que ela vai além da ação básica de se evitar o plágio. Ser ético e agir eticamente na pesquisa é uma atitude que deve ser cultivada desde os primeiros passos da vida de um pesquisador responsável. Esta caminhada deve, portanto, ser realizada seguindo o princípio fundamental de que a pesquisa é feita em benefício de todos. Assim sendo, o pesquisador ético deve ser fiel ao trabalho produzido por ele e pelos outros, dando o crédito e o respeito merecido a cada um deles. Só assim produziremos pesquisas e pesquisadores cada vez melhores.

Page 102: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

UNIDADE 5

O romance escrito

5.1 Primeiras palavras

A escrita científica é a etapa que visa a consagração do trabalho de pesquisa fina-lizado. Assim como as demais etapas do método científico, ela deve ser realizada com rigor para resultar em uma produção de qualidade. Nesta unidade o aluno-pes-quisador será apresentado às principais diretrizes para desenvolvimento da escrita científica, bem como as partes fundamentais de um trabalho científico (monografia) e os tipos mais comuns de publicações. Espera-se que, ao final desta unidade, o aluno-pesquisador se sinta mais seguro para romper o bloqueio inicial presente em todo o ser humano no momento em que se depara com uma folha (ou, mais adequa-damente, uma tela) em branco.

5.2 Problematizando o tema

De que adianta uma pessoa deter todo o conhecimento do mundo se ela não for ca-paz de comunicá-lo aos demais? É com esse dilema que o aluno-pesquisador se de-para no momento de passar para o papel, ou mais precisamente para o computador, todo o conhecimento adquirido nas etapas anteriores. Mas o que escrever? O que é relevante? Por onde começar? Qual o formato de uma publicação científica? Qual o procedimento que devo seguir para conseguir publicar meu trabalho? Esta unidade tentará munir o aluno-pesquisador com respostas a essas e outras perguntas com o intuito de completar sua formação na base científica e transformá-lo, de uma vez por todas, em aluno-pesquisador-autor.

5.3 Escrita científica

Agora que todo o trabalho foi desenvolvido e os resultados foram alcançados como o planejado (veja Unidade 3), é hora de relatar o que foi feito e o que foi descoberto. Para tanto, esse relato normalmente é feito por meio de uma monografia. Porém, antes de apresentar as dicas para a elaboração de seu conteúdo, algumas conside-rações sobre a estrutura das monografias são expostas na seção 5.3.1 e diretrizes gerais na 5.3.2. Em seguida, dicas pontuais sobre a escrita científica das principais partes do trabalho são encontradas nas demais subseções (5.3.3 a 5.3.10).

5.3.1 Estrutura

Page 103: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Segundo Cervo et al. (2007), um trabalho acadêmico, de acordo com a norma 14724 de 2005 da ABNT (Associacão Brasileira de Normas Técnicas), é composto por: ele-mentos pré-textuais, elementos textuais e elementos pós-textuais organizados na ordem da Figura 5.1 (CERVO et al., 2007).Início da audiodescrição da Figura 5.1

Elementos de um trabalho acadêmico de acordo com a ordem de ocorrência.

Retirada da obra Metodologia Científica de Amado Luiz Cervo,

Pedro Alcino Bervian e Roberto da Silva. Dois mil e sete.

Essa figura lista cada um dos elementos presentes em um

trabalho acadêmico agrupados em Três grupos: elementos

pré-textuais, elementos textuais e elementos pós-textuais.

Elementos pré-textuais, Capa, Obrigatório, Folha de rosto e ficha

catalográfica no verso, Obrigatório, Folha de aprovação,

Obrigatório, Folha de dedicatória, Opcional, Folha de

agradecimentos, Opcional, Epígrafe, Opcional, Resumo em português,

Obrigatório, Resumo em língua estrangeira, Obrigatório, Lista de

ilustrações, Opcional, Lista de tabelas, Opcional,

Lista de abreviaturas e siglas, Opcional, Sumário, Obrigatório.

Elementos textuais, Introdução, Obrigatório, Desenvolvimento,

Obrigatório, Conclusão, Obrigatório. Elementos pós-textuais,

Apêndices, Opcional, Referências bibliográficas, Obrigatório,

Anexos, Opcional, Índices, Opcional, Glossários, Opcional.

Final da audiodescrição da figura 5.1

Figura 5.1 Elementos de um trabalho acadêmico de acordo com a ordem de ocor-rência.

Os elementos pré-textuais, como o próprio nome já diz, vêm antes do conteúdo do trabalho e são usados, principalmente, para identificação e organização desse con-teúdo e do trabalho como um todo. Esses elementos são encontrados na seguinte ordem: capa, folha de rosto, ficha catalográfica, folha de aprovação, folha de dedica-tória (opcional), folha de agradecimentos (opcional), epígrafe (opcional), resumo em língua portuguesa, resumo em língua estrangeira, lista de figuras (opcional), lista de tabelas (opcional), lista de abreviaturas e siglas (opcional) e sumário.

As Figuras 5.2 e 5.3 trazem modelos desses elementos pré-textuais (NILC, 2011).

Page 104: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Início da audiodescrição da figura 5.2

Figura cinco ponto dois. Modelos de capa,

folhas de rosto, de aprovação, de dedicatória,

de agradecimentos e epígrafe.

Retirada do documento NATA, Normas de Apresentação

de Trabalhos Acadêmicos, publicado pelo NILC-USP,

o Núcleo Interinstitucional de Linguística Computacional

da Universidade de São Paulo, Dois mil e doze.

Final da audiodescrição da figura 5.2

Figura 5.2 Modelos, da esquerda para a direita, de cima para baixo, para: capa, fo-lhas de rosto, de aprovação, de dedicatória, de agradecimentos e epígrafe. Fonte: NILC, 2011.

Segundo as diretrizes que acompanham o modelo, a capa contém: o nome da ins-tituição (opcional), o nome do autor, o título e subtítulo (se houver), o local (cidade) onde o trabalho será apresentado e o ano de depósito (entrega). A folha de rosto segue a capa e deve conter os mesmos itens dela acompanhados das seguintes informações: natureza do trabalho (TCC, dissertação, tese, relatório, entre outros), o grau pretendido ou finalidade, o nome da instituição a que é submetido com a respec-tiva área de concentração e o nome do orientador e do co-orientador (se houver). No verso da folha de rosto deve constar a ficha catalográfica composta por um retângulo de 6 cm por 13 cm, centralizado na página contendo: nome do autor (iniciado pelo sobrenome), título do trabalho, local e ano de conclusão, número de páginas, sua natureza e finalidade (CERVO et al., 2007).

A folha de aprovação deve conter: o nome do autor, o título e o subtítulo (se houver), o número do volume (caso haja mais de um), a natureza e objetivo do trabalho, o nome da instituição a que é submetido, sua área de concentração, a data de apro-vação e os nomes e espaço para assinaturas dos membros da banca examinadora,

Page 105: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

acompanhados de suas respectivas instituições (NILC, 2011). Cervo et al. (2007) distinguem a folha de dedicatória, que tem caráter afetivo, da folha de agradecimen-tos, na qual o caráter é acadêmico e profissional. Além disso, complementam com a informação de que os nomes apresentados na dedicatória podem ser substituídos por uma frase, oração ou citação e que a folha de agradecimentos é usada para dar crédito às pessoas que efetivamente contribuíram para a realização do trabalho. A epígrafe contém uma citação relacionada ao trabalho, ou seja, sintetiza ou motiva o conteúdo do documento. Como toda citação, essa também deve vir acompanhada da fonte de onde foi extraída (NILC, 2011).

O resumo, descrito em detalhes a seguir, tem no máximo 500 palavras organizadas em um único parágrafo. Palavras-chave que identificam o conteúdo tratado no traba-lho são indicadas logo após o texto do resumo. As mesmas diretrizes se aplicam ao resumo em língua estrangeira (geralmente o inglês: abstract). Detalhes a respeito do que deve estar presente no resumo (e abstract) são apresentados na seção 5.3.4.

Várias listas podem ser criadas para enumerar os elementos acessórios do trabalho. A lista de ilustrações é composta pelos elementos gráficos (desenhos, imagens, fo-tografias, diagramas, esquemas, mapas, etc.) presentes no corpo do texto. Algo se-melhante se aplica à lista de tabelas. A ordem da listagem é a mesma de ocorrência no corpo do documento e cada item deve vir acompanhado do número da página na qual se encontra. Na lista de abreviaturas e siglas, o número da página é substituído pelo texto que a define e a ordem de listagem adotada é a alfabética. Para cada uma dessas listas, sua criação só tem sentido quando há número significativo de itens.

O último elemento pré-textual é o sumário: enumeração das partes que constituem o corpo do documento, ou seja, as subdivisões adotadas para os elementos textuais em capítulos, seções e subseções, e suas respectivas páginas iniciais.

Os elementos textuais, por sua vez, dividem-se em três partes principais: introdu-ção, desenvolvimento e conclusão. Além dessas, elementos de apoio como figuras, tabelas, citações e notas de rodapé também estão presentes para fornecer dados de apoio ao conteúdo das três partes citadas. Vários aspectos importantes na elabo-ração dos elementos textuais e alguns elementos de apoio serão comentados nas próximas seções.

Page 106: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Início da audiodescrição da figura 5.3

Figura cinco ponto três. Modelos de resumo e abstract, listas de ilustrações, lista de tabelas, lista de abreviaturas e siglas, e por fim, sumário. Retirada do documento NATA, Normas de Apresentação de Trabalhos Acadêmicos, publicado pelo NILC USP, o Núcleo Interinstitucional de Linguística Computacional da Universidade de São Paulo, Dois mil e doze.

Final da audiodescrição da figura 5.3

Figura 5.3 Modelos, da esquerda para a direita, de cima para baixo, para: resumo e abstract, listas de ilustrações, tabelas e abreviaturas e siglas e, por fim, o sumário. Fonte: NILC, 2011.

Os elementos pós-textuais, por fim, são aqueles que complementam o trabalho com informações obrigatórias, como as referências bibliográficas às obras citadas no corpo do documento, ou opcionais como anexos, apêndices, glossários e índices (CERVO et al., 2007). Os anexos e os apêndices são, ambos, documentos que apre-sentam conteúdo necessário para complementar o texto do trabalho e que são remo-vidos do corpo para não prejudicar a coesão. A diferença entre eles é que o apêndice deve, necessariamente, ser de mesma autoria que o trabalho enquanto os anexos não têm essa restrição podendo englobar, também, obras de outras pessoas (SEVE-RINO, 2002).

Os índices são listas de palavras ou expressões citadas no corpo do texto seguidas do número da página na qual ocorrem. É possível, também, criar um índice para os autores citados. Os glossários apresentam as palavras (geralmente termos técnicos) utilizadas no texto e suas respectivas definições. A ordem adotada para os glossários é a alfabética. As referências bibliográficas são descritas em detalhes na seção 5.3.9.

5.3.2 Diretrizes gerais

Page 107: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

A escrita científica é, basicamente, informativa (usada para transmitir ideias, conhe-cimentos e informações) e técnica. Ela, portanto, não possui as características de outros tipos de documentos nos quais a expressão de sentimentos ou a persuasão são constantes, nem apresenta caráter coloquial ou literário. A escrita científica se baseia em argumentos e dados para transmitir com objetividade o conhecimento, sendo, deste modo, muito diferente da escrita literária que tende a impressionar por seus valores estéticos e uso de subjetividade (CERVO et al., 2007).

Marconi e Lakatos (2001) trazem alguns cuidados básicos que devem ser tomados na escrita científica relacionados tanto à estrutura quanto ao conteúdo. A estrutura do documento deve ser pensada de tal modo que as partes satisfaçam uma relação lógica entre elas e com o todo. O conteúdo, por sua vez, deve apresentar ideias coe-rentes e adequadas ao tema sob investigação (correção) utilizando-se do formalismo exigido em documentos científicos (forma).

Especificamente a respeito da forma, Marconi e Lakatos (2001, p. 175) complemen-tam que uma boa redação possui qualidades como:

• Simplicidade – “a simplicidade no escrever significa clareza de pensamento” (MARCONI; LAKATOS, 2001, p. 175). Nesse sentido, Cervo et al. (2007) suge-re que cada frase expresse uma única e ideia e o faça de modo completo;

• Clareza – e, segundo esses autores, a clareza do pensamento deve ser refleti-da na escrita. Cervo et al. (2007, p. 111) também fazem a ligação entre simpli-cidade e clareza dizendo que “Pensamento e expressão são interdependentes: ninguém pode exprimir em termos claros uma ideia ainda confusa em sua men-te”. Por isso a redação só é realizada com qualidade quando as ideias já estão claramente definidas na mente do redator;

• Precisão – as ideias devem ser apresentadas por meio das palavras e termos adequados. Deve-se, portanto, deixar claro o sentido (sempre o concreto e objetivo e nunca o figurado) das palavras e termos no contexto do trabalho (CERVO et al., 2007);

• Concisão – é uma das qualidades mais importantes de um trabalho científico: expressar, em poucas palavras e com exatidão, o que se deseja;

• Imparcialidade – o trabalho deve transmitir os conhecimentos sobre um deter-minado tema sem fazer juízo de valores;

• Originalidade – o “novo” pode esta presente tanto na forma de apresentação

Page 108: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

quando no conteúdo apresentado;

• Objetividade – “aborda o que é válido, prático, estritamente adequado às cir-cunstâncias, evitando divagações” (MARCONI; LAKATOS, 2001, p. 176). Vol-pato (2007), com base nos métodos lógicos de dedução e indução, conclui que todas as premissas necessárias, e apenas elas, devem estar presentes na argumentação. Enquanto Cervo et al. (2007) acrescentam que as expressões subjetivas como eu penso ou parece ser, as quais não se fundamentam em dados e fatos concretos, devem ser evitadas;

• Ordem – o conteúdo deve ser estruturado em uma ordem lógica que facilite o entendimento do leitor;

• Harmonia – da mesma maneira que o conteúdo de capítulos e seções é orga-nizado logicamente, as partes da monografia também devem estabelecer uma ordem harmônica de apresentação;

• Acuidade – as observações devem ser cautelosas em termos de forma e con-teúdo.

As monografias também se diferenciam quanto ao foco. As monografias produzidas para obtenção de um título (TCC, dissertação e tese, por exemplo) têm um foco di-ferenciado dos artigos científicos publicados em congressos e periódicos. As primei-ras visam a apresentação detalhada e completa de toda uma pesquisa elaborada em meses e até mesmo anos. É preciso, portanto, relatar trabalhos correlatos em profundidade, descrever premissas e hipóteses com todas as justificativas possíveis e dissertar sobre todos os experimentos realizados e resultados obtidos. Um artigo científico, por outro lado, é uma produção bibliográfica mais focada e direcionada para a comprovação de uma única hipótese, restrita a limites de espaço de algumas poucas páginas (de 4 a 20), e deadlines de submissão a eventos e periódicos.

Outro ponto importante a se considerar no momento da redação de uma monografia é o público alvo. É necessário ter em mente para qual tipo de leitor seu trabalho é escrito e com qual objetivo. As monografias escritas como requisito para obtenção de um título de graduação ou pós-graduação têm, geralmente, dois públicos: um es-pecializado que também desenvolve pesquisas (provavelmente na mesma área do trabalho) e outro, possivelmente leigo, que não possui conhecimento técnico apro-fundado sobre o tema apresentado.

Quanto ao estilo da escrita científica, deve-se adotar sempre a impessoalidade

Page 109: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

(CERVO et al., 2007). No português é usual utilizar a terceira pessoa evitando-se pronomes como “eu” (desenvolvi, testei, concluí), “meu” (trabalho, método, objetivo), “minha” (pesquisa, ideia, abordagem) ou suas equivalentes ou similares no plural. Algumas dicas para tornar o texto impessoal são: usar palavras genéricas, como “presente” (trabalho, estudo) ou “esta” (tese, dissertação, pesquisa); fazer do objeto o sujeito da oração (por exemplo, “o sistema alcançou 100% de precisão”); ou ocultar o sujeito (por exemplo, “a partir do exposto, conclui-se que...”). O uso da voz passiva (por exemplo, “o trabalho foi desenvolvido”) também é adotado, porém alguns auto-res recomendam seu uso com parcimônia uma vez que dificultam o entendimento do texto. Essas considerações se aplicam, principalmente, ao português, já que no inglês, por exemplo, a primeira pessoa e a voz ativa são encontradas com mais fre-quência nas publicações científicas.

Outra conduta de valor que o aluno-pesquisador-autor deve seguir é a da modéstia e cortesia (CERVO et al., 2007). Um bom trabalho de pesquisa é capaz de defender sozinho o valor que possui e não precisa, portanto, de propagandas exageradas de seus resultados e suas contribuições. Como muito bem dito por Cervo et al. (2007, p. 110): a finalidade de um bom trabalho de pesquisa é “expressar, e não impressionar”. Assim, tanto a supervalorização do próprio trabalho como o rebaixamento de obras alheias são vistos com maus olhos, ou seja, deve-se dar o devido valor que cada trabalho (seu ou de outros) possui; nem mais, nem menos.

Para Wazlawick (2009), a escrita científica deve moderar no uso de advérbios e não usar piadas, ironias e brincadeiras para expressar as ideias. Também não é reco-mendável usar expressões de tempo como “hoje em dia”, uma vez que o documento escrito é atemporal. Deve-se ter cuidado com o uso de palavras que expressem uma abrangência que não se pode comprovar como “todos” ou “nenhum”. Se essa abran-gência for desejada, então a afirmação forte que a contém deve ser respaldada por uma citação a estudo próprio ou de outro autor. Por fim, o autor acrescenta que se deve evitar o uso de palavras em língua estrangeira e maiúsculas desnecessárias, bem como colocar as negações no início da frase e dar prioridade às afirmações em detrimento das negações.

Marconi e Lakatos (2001) apontam alguns pecados na escrita científica, como: usar períodos muito longos ou muito curtos (atenção para a estrutura sujeito-verbo-obje-to), repetir palavras, escrever frases desconexas, usar gírias, expressões vulgares e chavões. A esses pode-se acrescentar o maior de todos os pecados, que é o uso incorreto da língua (português, inglês ou outra). Deve-se atentar para a concordância

Page 110: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

(“os resultados foram demonstrado”), o paralelismo, a conjugação e o uso da crase. As ferramentas de edição de texto, com seus corretores automáticos embutidos, fa-cilitam bastante o processo de revisão ortográfica e gramatical, contudo, não se pode confiar cegamente nessas ferramentas. Isso porque elas ainda apresentam falhas, seja na cobertura do vocabulário ou gramática do idioma em questão, seja na estra-tégia de detecção de erro que empregam. Por exemplo, cabe ao aluno-pesquisador--autor saber diferenciar formas corretas de palavras correlatas como “análise” (subs-tantivo) e “analise” (verbo) para usá-las da maneira adequada uma vez que, nesse caso, provavelmente, o revisor automático não acusará o uso indevido.

Cervo et al. (2007) lembram, ainda, que o uso de abreviaturas e siglas deve ser controlado. Além disso, sempre que uma abreviatura for usada pela primeira vez no texto, ela deve vir acompanhada de sua forma por extenso, por exemplo: Tradução Automática (TA). Se a quantidade de abreviaturas e siglas for suficientemente gran-de, as mesmas devem ser organizadas em uma lista a parte como descrito na seção 5.3.1.

Cervo et al. (2007, p. 113) organiza um quadro contrastando as exigências e defor-mações da linguagem científica, o qual é reproduzido na Tabela 5.1.

Agora que diretrizes gerais sobre escrita científica foram apresentadas, o restante dessa seção tratará, especificamente, sobre cada uma das partes com conteúdo in-dispensável em um trabalho acadêmico e, portanto, sujeitas à avaliação por parte da banca. São elas (WAZLAWICK, 2009):

1. Resumo

2. Introdução

3. Revisão Bibliográfica

4. Desenvolvimento

5. Conclusão

6. Referências

Tabela 5.1 Exigências e deformações da linguagem científica.

Exigências Deformações

Page 111: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Impessoal,Objetiva,Modesta e Cortês,Informativa,Clara e distinta,Própria ou concreta,Técnica,Frases simples e curtas

Pessoal,Subjetiva, Ambígua,Arrogante, dogmática,Persuasiva, expressiva,Confusa, equívoca,Figurada,Comum,Frases longas e complexas

Fonte: CERVO et al. (2007, p. 113).

Sendo que Revisão Bibliográfica e Desenvolvimento podem se estender por vários capítulos, conforme a necessidade de organização e a quantidade do conteúdo apre-sentado.

Essa ordem de ocorrência usual do trabalho escrito é pensada para apresentar o assunto tratado e a abordagem adotada em uma sequência lógica e incremental, que garanta o entendimento por parte dos iniciantes. Por outro lado, especialistas no assunto (como os membros da banca avaliadora do trabalho) provavelmente não seguem essa sequência em suas leituras. Para eles, o primordial é avaliar o aluno e a qualidade do trabalho escrito, deixando a aquisição de conhecimento sobre o as-sunto tratado para o segundo plano, já que eles estão bastante familiarizados com o mesmo. Desse modo, a banca tem outro olhar sobre a monografia e realiza sua leitu-ra em busca do principal primeiramente para, só então, atentar-se aos detalhes. Uma possível ordem de leitura da monografia por parte dos membros da banca seria, por exemplo: Resumo, Referências, Introdução, Conclusão, Desenvolvimento e Revisão Bibliográfica (WAZLAWICK, 2009).

A própria escrita da monografia não se realiza na mesma ordem de apresentação de suas partes. Sugere-se que o documento seja escrito “de dentro para fora”, ou seja, partindo-se de uma visão mais minuciosa presente nas partes mais centrais como o Desenvolvimento e a Revisão Bibliográfica e caminhando-se em direção a uma visão mais abrangente presente na Introdução e na Conclusão. Contudo, o processo de escrita não é sequencial e muitas idas e vindas serão realizadas no texto até que se feche uma versão estável.

Na prática, é muito usual iniciar a escrita pela Introdução, recuperando parte do con-teúdo usado na elaboração do Projeto de Pesquisa (veja seção 3.4 na Unidade 3). Essa versão inicial da Introdução ainda precisará ser revisada e finalizada quando as conclusões já estiverem escritas. Em seguida, escreve-se sobre os experimentos realizados para o Desenvolvimento do trabalho, bem como os resultados obtidos.

Page 112: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Em paralelo, os trabalhos relacionados e conceitos fundamentais podem já serem descritos na Revisão Bibliográfica totalmente ou apenas como um “lembrete” para aprofundamento posterior. A Conclusão vem logo após a escrita do Desenvolvimen-to, uma vez que é uma consequência dos resultados apresentados nessa parte. Por fim, sugere-se aprofundar a escrita da Revisão Bibliográfica de trabalhos e conceitos realmente relevantes para a pesquisa em questão e finalizar a Introdução agora que todas as demais partes estão prontas. O Resumo, é claro, será a última parte a ser escrita enquanto as Referências Bibliográficas devem ser produzidas durante toda a escrita sempre que uma nova citação for realizada.

As subseções a seguir explicam e exemplificam o que se espera em cada uma des-sas partes, e outras também relevantes, que constituem uma monografia.

5.3.3 Título

Apesar de aparentemente simples, definir o Título não é uma tarefa fácil uma vez que ele não pode ser muito genérico e precisa deixar clara a ideia ou a contribuição do trabalho. Dessa maneira, títulos genéricos demais como “A universidade e seus valores” ou que não deixam clara a contribuição do trabalho como “Uma nova visão sobre a universidade” devem ser evitados.

Wazlawick (2009, p. 103) traz alguns exemplos de bons títulos de trabalhos dispo-níveis na Biblioteca Digital da Sociedade Brasileira de Computação entre os quais estão: “Automação de Métodos e Técnicas para Teste Funcional de Componentes” e “Análise Comparativa dos Dicionários LBG e SOA sob o Ponto de Vista da Comple-xidade Computacional Envolvida na Fase de Codificação da Quantização Vetorial”.

5.3.4 Resumo

O Resumo deve ser compatível com o título do trabalho e apresentar, pelo menos: tema-problema, hipótese(s) de trabalho e sua(s) justificativa(s) e, brevemente, um esboço da solução adotada e dos resultados ou contribuições. Aqui, novamente, de-ve-se tomar o mesmo cuidado adotado no momento da definição dos objetivos e fugir dos verbos triviais (estudar, propor, apresentar, entre outros). Além disso, a contribui-ção do trabalho deve ficar clara logo no seu início (nada de suspense) (WAZLAWICK, 2009).

O resumo deve conter tudo o que for necessário para convencer o leitor da importân-cia do trabalho e adequação ao tema pesquisado. Ele deve ser escrito com o intuito de apresentar a afirmação (hipótese) que se deseja comprovar como verdadeira ao

Page 113: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

final. Vale lembrar que os termos presentes no resumo são, muitas vezes, usados para identificar e indexar todo o trabalho em bibliotecas digitais e bases de dados de conferências e revistas.

5.3.5 Introdução

Como já mencionado, a escrita da Introdução pode ser feita partindo-se do que foi definido no Projeto de Pesquisa (objetivos, resultados esperados, limitações do trabalho, métodos e justificativas) e refinando-se as versões do texto com base no conteúdo das outras partes.

Geralmente, inicia-se com a contextualização do tema, da área de pesquisa e da problemática sob investigação. Em seguida, a hipótese de trabalho é apresentada juntamente com uma indicação do método adotado para comprová-la e todas as jus-tificativas cabíveis. O texto deve sempre fazer menções ao que o leitor encontrará no restante do documento. Aliás, é comum a Introdução apresentar um último parágrafo descrevendo a estrutura do documento, ou seja, o que será encontrado nas demais partes. Ela não deve ser muito longa, limitando-se a conter apenas o que for realmen-te relevante para a apresentação inicial do trabalho.

Volpato (2007) enfatiza que uma Introdução bem elaborada é aquela na qual as pre-missas (bases teóricas e justificativas) para o objetivo guiam o leitor para sua dedu-ção. Essa mesma noção de argumentação se aplica às demais partes do trabalho: os métodos são premissas para validar os resultados enquanto os resultados e a revisão bibliográfica podem validar as conclusões.

Wazlawick (2009) chama a atenção para o fato de que a banca analisará, especial-mente, os objetivos gerais e específicos descritos na introdução e tentará fazer um paralelo entre eles e o que é apresentado nas conclusões do trabalho. Esse paralelo entre o que se propôs alcançar na Introdução e o que foi realmente obtido, conforme descrito nas Conclusões, é primordial para dar o fecho que um bom trabalho cientí-fico deve ter.

5.3.6 Revisão Bibliográfica

Pode-se dizer que o capítulo de Revisão Bibliográfica é o resultado da etapa de revisão bibliográfica descrita na seção 3.3.2 da Unidade 3, uma vez que traz o relato das obras consultadas, deixando clara a relação entre elas e a pesquisa apresen-tada na monografia. Essa parte da monografia exerce, basicamente, dois papéis: (i) fornece material complementar para aprofundamento dos iniciantes no assunto e (ii)

Page 114: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

mostra a erudição do aluno-pesquisador-autor a respeito da base teórica na qual o trabalho se fundamenta.

Diferentemente da etapa de revisão bibliográfica, contudo, o capítulo de mesmo nome (ou similar) deve organizar o conteúdo por assuntos e não por obras. Em outras pa-lavras, se vários autores descrevem uma técnica ou um conceito relevante para a pesquisa apresentada na monografia, então eles devem ser confrontados para, des-se confronto, nascer uma única visão adotada pelo aluno-pesquisador-autor. Essa diretriz não se aplica à descrição das pesquisas correlatas realizadas por outros au-tores que, nesse caso, são transcritas separadamente complementadas com a visão/análise do aluno-pesquisador-autor. Uma atitude que enriquece bastante o trabalho, nesse momento, é comparar as hipóteses das pesquisas correlatas e as adotadas na monografia em termos de suas vantagens, desvantagens, limitações e inovações.

Após o interesse inicial despertado na Introdução, a Revisão Bibliográfica é a opor-tunidade da qual o autor dispõe para enfatizar a motivação e a relevância do seu trabalho, usando para isso referências a outros autores conceituados e conhecidos da área. Todas as citações às obras relevantes devem seguir as diretrizes contidas na seção 5.3.10.

Aqui devem estar descritos os principais conceitos e trabalhos relacionados. Porém, o mais importante de um capítulo de Revisão bibliográfica é que ele apresente uma comparação entre os trabalhos e não apenas se limite a descrevê-los. A análise e a comparação crítica do aluno-pesquisador é o que dá valor a essa parte e mostra seu conhecimento e sua maturidade para comparar, analisar e fazer julgamentos a respeito do que já foi feito em sua área de pesquisa.

5.3.7 Desenvolvimento

Segundo Wazlawick (2009), o capítulo de Desenvolvimento é usado para demons-trar a verdade da hipótese por meio da apresentação de conceitos de autoria do pró-prio autor (os de outros já foram apresentados na Revisão Bibliográfica) e de dados obtidos por meio de análises, provas formais e experimentos, entre outros. Cervo et al. (2007) acrescentam que o desenvolvimento ocupa a maior parte do trabalho es-crito e tem por objetivo relatar os resultados da pesquisa.

Por ser tão extenso é conveniente dividir o desenvolvimento em partes ordenadas, por exemplo, de acordo com o grau de importância ou dificuldade. Nesse sentido, Cervo et al. (2007) trazem algumas sugestões para divisão do conteúdo de desen-volvimento:

Page 115: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

• Divisão por oposição – as partes opostas que compõem uma visão, resolu-ção ou abordagem tratada no desenvolvimento são apresentadas em seções distintas;

• Divisão por progressão – as partes são apresentadas em uma ordem lógica que pode ser de dificuldade ou interesse, por exemplo;

• Divisão das vantagens e desvantagens – as vantagens são relatadas em uma parte e as desvantagens em outra, deixando as conclusões para a parte final do trabalho escrito ou uma terceira parte no desenvolvimento;

• Divisão por comparação – cada elemento (ideia, abordagem, método, etc.) da comparação é apresentado separadamente em uma parte e as comparações ou conclusões propriamente ditas podem ser apresentadas em uma terceira parte ou na parte final do trabalho escrito;

• Causas e consequências – as causas e suas respectivas consequências são apresentadas em partes distintas;

• Divisão cronológica – os elementos (técnicas, estratégias, etc.) são descritos de acordo com sua ordem de surgimento.

O capítulo (ou seção) de Desenvolvimento e suas partes devem receber nomes que indiquem o conteúdo que tratam e não serem chamados de algo genérico como “Desenvolvimento”. Além disso, é importante manter um equilíbrio de conteúdo, eli-minando-se excessos sempre que possível (CERVO et al., 2007).

Wazlawick (2009) acrescenta, ainda, que se a monografia contiver o desenvolvimen-to de um sistema computacional, o capítulo de Desenvolvimento não deve se limitar a descrever esse sistema. Com suas próprias palavras: “a monografia deve ser sobre o conhecimento gerado, não sobre o sistema em si” (WAZLAWICK, 2009, p. 108).

Também é bastante comum que, após a apresentação dos resultados dos experi-mentos, uma nova comparação com trabalhos correlatos seja feita, demonstrando como os resultados obtidos na monografia se enquadram no cenário existente até então na área. Veja que essa comparação é distinta daquela realizada no capítulo de Revisão Bibliográfica, no qual não se tinha, ainda, os resultados da pesquisa. Lá a comparação é feita apenas em termos de ideias, de hipóteses de trabalho, enquanto aqui essa comparação se realiza em termos de dados e números sendo, portanto, bem mais objetiva.

Page 116: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

5.3.8 Conclusão

A Conclusão deve, necessariamente, ser escrita fazendo-se um paralelo com os ob-jetivos do trabalho (apresentados na Introdução). Além disso, todo o embasamento necessário para as conclusões apresentadas aqui deve estar presente no Desenvol-vimento do trabalho, ou seja, não se deve concluir nada sobre dados e resultados que não foram apresentados.

Nesse sentido, (CERVO et al., 2007, p. 124) descreve com primor o que vem a ser a conclusão: “Ela está presente em todo o trabalho, sob a forma de hipótese plausível na introdução, que se confirma aos poucos com o desenvolvimento, transformando--se, finalmente, em certeza ou na mais provável das hipóteses.” Assim, nessa última parte do trabalho, algumas questões levantadas por Cervo et al. deverão ser respon-didas:

• A pesquisa ampliou o conhecimento a respeito do problema proposto?

• A hipótese de trabalho foi verificada ao final?

• Os objetivos foram atingidos?

• A metodologia inicialmente definida resolveu o problema? Novas abordagens precisaram ser consideradas no decorrer da pesquisa?

• A revisão bibliográfica realizada foi suficiente?

• Quais são as conclusões as quais se chega, ao final do trabalho, em relação aos trabalhos relacionados?

Cervo et al. (2007, p. 124) enfatizam que o resumo conclusivo (a conclusão) “deve ser enérgico, breve, exato, firme e convincente”. É também nesta parte do trabalho que o autor poderá expressar seu ponto de vista a respeito do tema-problema e seu desenvolvimento.

Além dos pontos positivos do trabalho, o aluno-pesquisador-autor deve descrever os pontos negativos, ou seja, as limitações do trabalho e suas fraquezas. Como já mencionado na Unidade 2, não se deve esconder ou camuflar as limitações do trabalho. Ao invés de diminuir o mérito científico, a apresentação dessas limitações apenas aumenta o valor do trabalho, uma vez que demonstra a maturidade do aluno--pesquisador-autor para discernir o que pode ou não ser tratado. É também nessa parte da monografia que devem ser apresentadas as possibilidades de continuidade e extensão do trabalho ou de aplicação de seus resultados e contribuições em outras

Page 117: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

áreas correlatas.

5.3.9 Referências

Um bom trabalho deve, obrigatoriamente, citar as principais obras de referência sobre o assunto publicadas recentemente em veículos (eventos e periódicos) de qualidade. Segundo Wazlawick (2009), esse é um dos pontos que o especialista irá verificar no momento da avaliação do trabalho, podendo até ser motivo para reprovação do aluno se as referências não satisfizerem os critérios mínimos para o valor científico do trabalho.

As Referências bibliográficas da monografia, assim como as deste livro, estão pre-sentes no final do documento e obedecem às normas estabelecidas pela instituição na qual se deseja obter o título ou do evento ou periódico no qual um artigo será publicado. Entre os vários formatos para referências bibliográficas, está o definido pela ABNT com a NBR 6023/2002, adotado neste livro. Contudo, a descrição de um ou outro formato de referências foge ao escopo deste livro, ficando a cargo do aluno--pesquisador-autor verificar o formato adotado para cada publicação que for elaborar.

A ordem de apresentação das referências, ao final do trabalho, pode ser alfabética, cronológica (de acordo com a ordem de citação no corpo do texto) ou sistemática (por assunto). A ABNT, por exemplo, sugere a ordenação alfabética enquanto vá-rios congressos adotam a ordem cronológica. Outras divergências entre formatos de referências estão no modo como os sobrenomes dos autores são mostrados (com todas as letras em maiúsculas ou só a primeira); se aparecem todos os nomes e so-brenomes intermediários ou apenas as iniciais; e na forma de destaque (negrito ou itálico) de títulos ou nomes de conferências, por exemplo.

É importante que todas as referências bibliográficas inseridas durante a escrita sejam conferidas ao final para que não falte nem sobre nenhuma. Veja que nas Referências devem constar apenas aquelas que foram efetivamente citadas no texto.

5.3.10 Citações

As citações, como já mencionado anteriormente, são usadas para fazer referência a um trabalho que serviu de base para a pesquisa. No formato autor-data, elas indicam o sobrenome do autor seguido pela data da publicação. Quando há dois autores, am-bos os sobrenomes aparecem (separados por “;” ou “&”ou “e”, entre outros) e quando há mais do que dois autores, apenas o primeiro aparece, seguido da expressão “et al.”.

Page 118: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

As citações podem ser de dois tipos: diretas ou indiretas. Em uma citação direta, parte da obra consultada é copiada literalmente; enquanto na citação indireta não há transcrição do texto original, mas apenas o embasamento para o conteúdo rees-crito pelo autor.

Segundo Cervo et al. (2007), uma citação direta deve ser feita colocando-se os tre-chos copiados entre aspas quando eles não ultrapassam três linhas. Quando a cópia for maior do que três linhas, o texto copiado deve ser apresentado em fonte menor, com recuo de 4 cm da margem esquerda e espaçamento simples. A citação direta deve conter, além da indicação de autoria e ano (no estilo autor-data adotado neste livro), também a indicação da página na qual se encontra na obra original (por exem-plo, p. 32).

Cervo et al. acrescentam ainda que sempre que alguma palavra ou sequência de palavras for removida do texto original, essa remoção deve ser indicada pelo uso de três pontos entre colchetes: [...] (alguns autores, como (SEVERINO, 2002) citam o uso de parênteses no lugar dos colchetes). Inserções também são indicadas pelo uso dos colchetes e até a mudança na formatação original com o uso de negrito ou itálico deve vir acompanhada da expressão “grifo nosso”. Da mesma forma, se no texto original já houver aspas duplas, estas devem ser substituídas por aspas sim-ples (apóstrofos), para não serem confundidas com as aspas duplas da citação dire-ta. Por fim, segundo Severino (2002), se houver algo no texto original que precise ser corrigido, esse trecho deve vir seguido por um “(sic)”, indicando que esta foi a forma encontrada no texto original.

Porém, as citações indiretas devem ser preferidas por meio da reescrita do texto ori-ginal, sem aspas, seguida pela referência `a obra. Para mais detalhes sobre como reescrever o texto veja seção 4.3 da Unidade 4.

Por fim, é preciso distinguir se a fonte da citação foi ou não lida diretamente pelo au-tor, ou seja, se ele teve acesso ao original ou se o conteúdo do original foi conhecido por meio de outra obra. O primeiro caso é tratado como visto anteriormente, enquanto que no último acontece o que chamamos de citação de citação. Por exemplo, se o aluno quer citar (OLIVEIRA, 2001) mas não teve acesso direto a sua obra, sendo que só tomou conhecimento dela por meio de (SEVERINO, 2002), então ele deve citar (OLIVEIRA, 2001) da seguinte maneira: (OLIVEIRA, 2001 apud SEVERINO, 2002).

5.3.11 Notas de rodapé

As notas de rodapé se localizam na parte inferior da página com numeração sequen-

Page 119: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

cial, por capítulo ou todo o documento, separadas do texto por um traço. Possuem fonte de tamanho menor do que o restante do texto e são usadas para acrescentar ou indicar conteúdo que, no corpo do texto, atrapalharia o entendimento do leitor. No corpo do texto, uma nota de rodapé é indicada por um número sobrescrito como este

que remete ao texto da nota no final da página (CERVO et al., 2007).

5.3.12 Elementos gráficos

O texto científico, geralmente, vem acompanhado de elementos gráficos para com-plementar, enriquecer ou explicitar o conhecimento escrito. Esses elementos são: quadros, tabelas, figuras, ilustrações, gráficos entre outros. Veja que a distinção en-tre quadro e tabela está apenas na estrutura mais rígida de linhas e colunas que a tabela segue para apresentar os mesmos dados que podem estar contidos em um quadro, seguindo um formato mais livre.

Todo elemento gráfico inserido no texto deve ser numerado sequencialmente e se-paradamente de acordo com o tipo (figura, tabela, etc.). Além disso, o elemento deve vir acompanhado de uma legenda explicando brevemente seu conteúdo e ser men-cionado no momento adequado no corpo do texto. A fonte do elemento gráfico deve ser citada, mesmo que ele seja apenas uma adaptação do original.

5.4 Tipos de monografias

Diversos tipos de monografias estão presentes na vida acadêmica de um aluno de graduação ou pós-graduação. Todos eles, com maior ou menor rigor, seguem a es-trutura apresentada na seção 5.3.1 sendo diferenciados apenas pelo conteúdo que trazem e a adequação deste ao nível de pesquisa que representam. Marconi e Laka-tos (2007) dividem as monografias em três tipos: monografias, dissertações e teses; em ordem crescente de originalidade, profundidade e extensão. Esses três tipos se-guem completamente a estrutura da seção 5.3.1.

A monografia, apresentada como base para a escrita científica descrita nesta uni-dade, é usada para conclusão de cursos e trabalhos acadêmicos. A Dissertação é uma monografia científica defendida perante uma banca para a obtenção do título de mestre. O trabalho relatado, bem como a escrita adotada, devem seguir a metodolo-gia científica. De modo similar à tese, a dissertação também visa a resolução de um problema de cunho científico, porém a contribuição almejada em uma dissertação não precisa ser inédita na área de pesquisa. A Tese tem, portanto, a característica essencial de ampliar o conhecimento a respeito do tema de investigação (MARCONI; LAKATOS, 2007).

Page 120: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Há, ainda, outros tipos de documentos que seguem a estrutura apresentada nesta unidade, mas com menos rigor, como os relatórios e os projetos de pesquisa. Um Relatório de Pesquisa, de modo similar à monografia elaborada para a obtenção de um título, traz a explanação a respeito de um estudo com suas conclusões. Os rela-tórios de pesquisa variam muito de acordo com o público alvo (especialistas, agên-cias de fomento) e o foco que se deseja transmitir (divulgação, prestação de contas) (MARCONI; LAKATOS, 2007). O Projeto de Pesquisa, já apresentado na Unidade 3, seção 3.4, é outro tipo de documento com estrutura similar às monografias, porém com foco bastante distinto, uma vez que o projeto é apenas um guia para uma pes-quisa que ainda não foi realizada.

Marconi e Lakatos também mencionam os Artigos Científicos produzidos para pu-blicação em congressos e periódicos definindo-os como (p. 241): “pequenos estudos que tratam de uma questão verdadeiramente científica, mas não chegam a constituir--se em matéria de um livro”. Os artigos são diferentes das monografias em razão do tamanho e conteúdo reduzidos, porém, como as demais, preservam a estrutura básica com: título, resumo, introdução, desenvolvimento, conclusões e referências bibliográficas. Em geral, um artigo científico apresenta temas, resultados ou aborda-gens novos e diferentes.

Wazlawick (2009) enfatiza que, por ser mais sucinto do que a monografia, o autor de um artigo científico deve prezar ainda mais pela clareza e objetividade do texto. Esse autor traz ainda outras considerações relevantes sobre um artigo científico, entre elas:

• Quanto à autoria – enquanto a monografia é um trabalho individual, um artigo geralmente possui vários autores, que são todas as pessoas que efetivamen-te contribuíram para o desenvolvimento do trabalho. Entre os autores estão, portanto, pelo menos o aluno e seu orientador. A ordem de apresentação dos nomes dos autores pode ser a alfabética, porém costuma-se ordenar do autor com maior contribuição (provavelmente o aluno que desenvolveu a pesquisa) para o de menor contribuição ao trabalho. Deve-se tomar cuidado, também, com o exagero de autores, já que essa conduta pode ser entendida como uma tentativa antiética de melhorar artificialmente o currículo de alguém (WAZLA-WICK, 2009).

• Quanto à motivação – Wazlawick (2009) sugere que o aluno-pesquisador-au-tor inicie a escrita do artigo com uma frase que resuma a ideia ou a contribuição principal do trabalho. Essa é uma boa estratégia, uma vez que a limitação de

Page 121: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

espaço de um artigo (geralmente cerca de 10 páginas) faz com que ele seja su-ficiente apenas para comunicar a ideia, como a mesma foi desenvolvida, quais os resultados alcançados e as contribuições para área.

• Quanto à contribuição – o autor deve ser sincero relatando os resultados e as contribuições de seu trabalho, sem exageros e com modéstia. Para tanto, deve mostrar ao comitê que avaliará seu trabalho que este é relevante e está correto, utilizando-se de evidências e fatos.

• Quanto aos veículos de publicação – antes de enviar seu artigo para algum veículo de publicação, o aluno-pesquisador-autor deve ter em mente alguns pontos importantes. O primeiro é que os periódicos são considerados mais importantes que eventos ou conferências (WAZLAWICK, 2009). Como na com-putação (área relativamente nova) existem, por enquanto, poucos periódicos (no mundo e, principalmente, no Brasil), a publicação em conferências é bas-tante incentivada. As conferências podem ser, ainda, compostas por eventos satélites do tipo workshop ou seminário que têm foco e participação restritos, sendo, portanto, considerados de menor impacto. Em relação ao “impacto” ou visibilidade, veículos com maior visibilidade, geralmente, são mais rigorosos na seleção dos trabalhos, sendo, portanto, mais difícil conseguir uma publicação nele. Por fim, os veículos são classificados, em ordem crescente de sua abran-gência, como: locais, regionais, nacionais e internacionais (que têm, entre ou-tras características, o idioma inglês como o único aceito para as publicações). Sendo assim, o aluno deve ter esses fatos em mente na hora de escolher o veículo para o qual irá submeter seu artigo.

• Quanto à rejeição – a publicação de um artigo passa por três estágios: sub-missão (para a qual pode haver uma data limite denominada deadline), revisão e aceitação/rejeição. Um bom pesquisador tem que saber lidar com a rejeição de um trabalho submetido. Como já mencionado, bons veículos são rigorosos na seleção dos trabalhos que publicam e, nesses casos, a chance de rejei-ção não é pequena. Usualmente as rejeições são acompanhadas por revisões críticas detalhadas de bons especialistas na área. O aluno deve aproveitar as críticas para aprender e melhorar sua escrita ou sua metodologia científica.

• Quanto à ética – alguns aspectos éticos devem ser respeitados desde a elabo-ração até a publicação de um artigo. Primeiro, não se deve publicar novamente um artigo com mesmo conteúdo (ou praticamente) já publicado anteriormente. Embora não seja consenso, também não se deve submeter o mesmo artigo

Page 122: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

(mesmo que ainda não tenha sido aceito ou publicado) a dois veículos diferen-tes.

5.5 Considerações finais

A escrita científica é mais um dos passos do método científico e é considerada fun-damental na construção de um novo conhecimento. Ao escrever sobre a pesquisa desenvolvida, o aluno-pesquisador-autor notará que muitas perguntas e respostas surgirão fortalecendo ainda mais o conteúdo lido, os experimentos realizados e as conclusões obtidas.

Contudo, assim como “fazer ciência”, a escrita científica é uma “arte” que só se aprende na prática. Quanto mais o aluno fixar os conceitos aprendidos nesta unida-de por meio da prática da escrita, mais capacitado estará para produzir documentos melhores, com maior facilidade. Deve-se levar em conta que a estrutura relativa-mente rígida das produções científicas torna esse processo menos doloroso do que a escrita literária, porém, não dispensa o rigor adotado em todo o método científico.

Resumindo alguns pontos fundamentais sobre o conteúdo de uma monografia apre-sentados nesta unidade, a Figura 5.4 mostra como o conteúdo da Introdução (em especial a definição de uma hipótese plausível) está relacionado ao conteúdo do Desenvolvimento (no qual experimentos são descritos com o intuito de comprovar a hipótese) e à Conclusão (onde a hipótese plausível se torna uma certeza).Início da audiodescrição da figura 5.4

Figura cinco ponto quatro. Relacionamento entre as partes principais de uma monografia e seus conteúdos.

Esta figura descreve a relação entre algumas partes de uma monografia. O tema-problema, objetivos e hipóteses plausíveis da Introdução, por meio do método, da técnica, dos resultados e análises realizados no Desenvolvimento dão origem à certeza às limitações do trabalho e aos trabalhos futuros na Conclusão.

Introdução

Tema-problema e objetivos, Hipótese plausível,

Liga-se com o desenvolvimento,

Métodos e técnicas, Resultados e análises,

Liga-se com a conclusão,

Certeza, Limitações do trabalho, Trabalhos futuros.

Final da audiodescrição da figura 5.4

Figura 5.4 Relacionamento entre as partes principais de uma monografia e seus conteúdos.

Assim, mãos à obra! Afinal de contas, como dito por Cervo et al. (2007, p. 112): “Sa-ber e conseguir comunicar resultados é tão importante hoje como saber e conseguir produzi-los”.

Page 123: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

UNIDADE 6

O romance narrado

6.1 Primeiras palavras

A última unidade deste livro fala, especificamente, sobre a apresentação de uma pesquisa, ou seja, um modo divulgação geralmente posterior à produção e publicação do trabalho escrito (veja Unida-de 5). Desse modo, esta unidade, assim como a anterior, traz diretrizes para a criação e apresenta-ção do trabalho de pesquisa. Espera-se que ao final de sua leitura o aluno seja capaz de organizar e preparar o conteúdo para comunicar seu trabalho de pesquisa com segurança e convicção, fina-lizando assim, sua formação básica em metodologia científica.

6.2 Problematizando o tema

Agora que todo o trabalho foi desenvolvido, como preparar uma apresentação para divulgá-lo em um congresso ou defendê-lo perante uma banca? Como organizar a apresentação? Como cortar conteúdo já que não há muito tempo para a apresentação? Qual estrutura seguir? Há alguma diretriz para a elaboração de slides e pôster? Essas e outras perguntas serão respondidas nesta unidade. Desse modo, espera-se que o aluno-pesquisador-autor adquira uma nova aptidão: a de palestrante.

6.3 Apresentação da pesquisa científica

Uma pesquisa pode ser apresentada de diversas formas e em vários momentos de seu desenvolvi-mento. Por exemplo, quando a pesquisa é apenas uma ideia e seu projeto começa a ser delineado, o orientador pode pedir ao aluno que apresente um seminário breve com as ideais iniciais para os demais membros do grupo de pesquisa. Esse seminário informal visa captar as sugestões e críticas de outras pessoas que trabalham na área de pesquisa, possibilitando o levantamento de alternati-vas e problemas o quanto antes. Marconi e Lakatos (2001, p. 31) acrescentam que o seminário “é uma técnica de estudo que inclui pesquisa, discussão e debate” a qual “visa mais à formação do que à informação”.

Quando a pesquisa já está bem encaminhada ou sendo desenvolvida, as apresentações se tornam mais frequentes. Por exemplo, em cursos de pós-graduação stricto sensu (mestrado ou doutorado) o aluno tem de passar por um exame de qualificação no qual apresenta a proposta de seu projeto a uma banca. Os especialistas que compõem a banca avaliam o texto da monografia de qualificação e também a apresentação realizada pelo aluno para decidir se aprovam ou não o desenvolvimento do projeto.

Resultados preliminares ou finais da pesquisa também podem ser apresentados em eventos da área. Enquanto o exame de qualificação é requisito apenas para cursos stricto sensu, a defesa do trabalho finalizado perante uma banca ocorre em trabalhos de conclusão de curso (graduação e lato sensu), mestrados e doutorados.

Page 124: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Como se pode notar, saber divulgar uma pesquisa é tão importante quanto desenvolvê-la e pro-duzir documentos a seu respeito. Marconi e Lakatos (2001, p. 79) deixam isso bem claro ao dizer que: “Todo estudioso necessita transmitir a outras pessoas, com certa frequência, o fruto de suas atividades, de seu conhecimento”. Esses autores também definem a comunicação científica como sendo “a informação apresentada em congressos, simpósios, semanas, reuniões, academias, so-ciedades científicas, etc., onde se expõe os resultados de uma pesquisa original, inédita, criativa, a ser publicada posteriormente em anais ou revistas”.

Nesta unidade considera-se que uma comunicação científica é a apresentação oral (com ou sem o auxílio de slides ou pôsteres) de uma pesquisa pretendida, em desenvolvimento ou finalizada. Em termos de estrutura, segundo Marconi e Lakatos (2001), as comunicações seguem, basicamente, a mesma dos trabalhos escritos: introdução, desenvolvimento e conclusão. Na introdução, espera--se que o palestrante formule claramente o tema-problema investigado. A introdução ao pode, ainda, conter menções aos trabalhos relacionados. Nesse caso, as citações devem ser bem mais pontuais e direcionadas à relevância para o trabalho do que é encontrado no capítulo (ou seção) de Revisão Bibliográfica. A introdução também deve deixar clara a motivação do trabalho, suas hipóteses e justificativas aplicáveis.

Em seguida, no relato do desenvolvimento, devem-se apresentar os passos do método adotado para a resolução do problema (comprovação da hipótese) com o detalhamento suficiente e neces-sário para permitir o entendimento básico por parte da audiência. Por fim, conclui-se a comunica-ção com o relato dos principais resultados, contribuições e conclusões da pesquisa.

Uma comunicação pode ser dividida em três estágios: preparação, apresentação e arguição (MAR-CONI; LAKATOS, 2001). A preparação envolve a busca e o estudo de informações relevantes para o conteúdo que se deseja apresentar. Como as comunicações são realizadas com base em um trabalho (em desenvolvimento ou já finalizado) de autoria do próprio palestrante, este já possui a fundamentação teórica necessária na preparação. A preparação, nesse caso, resume-se à elabo-ração de slides ou pôsteres para a qual algumas diretrizes são apresentadas na seção 6.3.2.

A apresentação, por sua vez, como explicado por Marconi e Lakatos (2001, p. 83), envolve “ler com clareza o que está escrito”; “imprimir velocidade razoável à leitura, tentando prender a atenção dos ouvintes” e “dar ênfase às palavras-chave”. Em especial, o conteúdo de apoio presente em um slide ou pôster não deve limitar a apresentação¸ servindo apenas de guia para que o aluno-palestrante se recorde dos pontos importantes que deve mencionar.

Por fim, a arguição é a fase de perguntas e considerações dos membros da banca ou plateia. Nesse momento, o aluno-palestrante deve estar atento ao que lhe é perguntado para que possa responder com correção, objetividade e clareza. Contudo, se o aluno não souber alguma resposta, ele deve ser sincero e assumir sua falha, podendo, inclusive, sugerir alguma resposta com base em outros conhecimentos (MARCONI; LAKATOS, 2001).

Devido à grande gama de ocasiões nas quais as comunicações ocorrem, alguns aspectos variam bastante como os descritos a seguir.

Primeiramente, a audiência de uma comunicação pode ser bastante diversa. Em uma defesa, por

Page 125: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

exemplo, a banca de especialistas que avaliam o trabalho é a principal audiência a ser considerada apesar de também estarem presentes, usualmente, familiares e colegas do aluno-palestrante. De-ve-se, portanto, ter em mente que os membros da banca são pessoas ocupadas e conhecedoras de grande parte do assunto sendo apresentado (pelo menos sua base teórica e principais trabalhos já desenvolvidos) e, assim, a comunicação precisa ser objetiva e direta. Contudo, espera-se que um bom nível técnico seja mantido para que os demais membros da plateia possam acompanhar o raciocínio.

Em relação à banca, outra sugestão importante é tentar antecipar as questões que poderão ser levantadas. Assim, o aluno-palestrante deve fazer uma revisão crítica da literatura, seguir a meto-dologia de pesquisa, apresentar claramente os resultados, validá-los e discuti-los e finalizar com as conclusões, contribuições e sugestões de trabalhos futuros.

As comunicações em congresso, por sua vez, tendem a um nível técnico mais alto, uma vez que a plateia é composta apenas por especialistas e o tempo disponível para a apresentação é limita-do. Aliás, o tempo é outro aspecto que varia bastante de acordo com o tipo de comunicação. Uma comunicação em congresso geralmente é limitada a 10-20 minutos com mais 5-10 minutos para perguntas e colocações do público. Em uma defesa, o aluno-candidato tem cerca de 20 a 40 mi-nutos para “defender” seu trabalho, dependendo do nível do título almejado (graduado, mestre ou doutor). Após a apresentação do candidato ao título, cada membro da banca tem igual tempo para fazer seus questionamentos (arguição do candidato).

O foco desejado para a comunicação também deve ser considerado no momento de sua prepara-ção ou apresentação. A comunicação pode ser informativa, instigante ou didática, por exemplo. O foco deve ser estabelecido de acordo com as diretrizes adotadas pela instituição na qual a defesa ocorre ou do evento no qual o trabalho aceito é apresentado.

Algumas diretrizes gerais para a preparação e apresentação de uma comunicação são descritas na seção 6.3.1; enquanto dicas específicas para a elaboração de elementos de apoio (slides ou pôster) são tratadas na seção 6.3.2.

6.3.1 Diretrizes gerais

Algumas diretrizes podem ser seguidas para a preparação e a apresentação de uma comunica-ção com base em alguns autores (PURRINGTON, 2009; MARCONI; LAKATOS, 2001; EASTER-BROOK, 2003):

• Plano – para guiar a comunicação, o aluno-palestrante pode preparar um plano (na forma de um resumo) do que será apresentado, contendo: uma ou duas frases introdutórias com a descrição do problema e da hipótese de trabalho, os objetivos da pesquisa, a metodologia adotada para alcançar os objetivos (desenvolvimento da pesquisa), os resultados obtidos e as conclusões relacionando hipótese e resultados;

• Vocabulário – a apresentação deve ser composta por vocabulário simples e frases curtas para comunicar diretamente a ideia que deseja transmitir. Marconi e Lakatos (2001, p. 38) complementam que se deve “usar vocabulário técnico, mas adequado, compreensível e cui-

Page 126: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

dadosamente escolhido, tendo em vista o tipo e o número de pessoas presentes”;

• Clareza – a clareza de raciocínio exercitada na escrita científica tem peso ainda maior na comunicação oral e deve ser buscada a todo custo;

• Idioma – outro fator importante é saber qual idioma deverá ser usado na comunicação e treiná-lo com antecedência, revisando a pronúncia de palavras e a formação de estruturas duvidosas;

• Linguagem – a linguagem adotada na apresentação deve ser formal, ou seja, não devem ser utilizadas gírias ou ironias e deve-se tomar cuidado com erros de português e de uso (como os gerundismos);

• Postura – a postura deve ser formal e, portanto, ações como mascar chiclete, sentar-se na mesa ou trajar roupa inadequada (boné, por exemplo) são inaceitáveis;

• Narração – a fala deve ter início, meio e fim, sempre usando de elos

didáticos e enfáticos entre slides e seções do pôster. Sugere-se um tom de voz nem muito alto nem muito baixo e uma narração calma e tranquila, pois esse tipo de narra-ção demonstra segurança;

• Exemplos – outra conduta sugerida é a de exemplificar os conceitos citados, as métricas usadas, as técnicas e os métodos aplicados. Os exemplos vêm para materializar o conteúdo abstrato verbalizado pelo aluno-palestrante, aumentando as chances de seu entendimento por parte do ouvinte;

• Ilustrações – se os exemplos são úteis, as ilustrações são ainda mais. Sempre que possí-vel se deve utilizar de elementos gráficos para ilustrar e exemplificar o que é dito, afinal de contas: “Uma imagem vale mais do que mil palavras”.

A fase de preparação também inclui o ensaio da comunicação. O ensaio pode ser feito individu-almente com o auxílio de gravadores ou filmadoras, se desejado; e depois com uma plateia de colegas para que esses possam anotar os pontos que precisem ser melhorados. O ensaio é muito importante para que o aluno-palestrante tenha consciência de vários pontos citados, principalmen-te, da velocidade de sua fala que não deve ser nem rápida nem lenta demais. Para tanto, mesmo que não seja possível gravar o ensaio, ele deve ser ao menos cronometrado.

Uma revisão do conteúdo preparado deve ser realizada antes da apresentação, para conferência geral ou, ainda, com o intuito de levantar dúvidas de última hora para as quais informações adicio-nais devem ser buscadas. Esse levantamento bibliográfico “de última hora” também pode ser reali-zado com o intuito de verificar o que acaba de ser publicado sobre o assunto demonstrando que o aluno não abandonou seu interesse pelo trabalho simplesmente porque o mesmo está concluído.

No momento da apresentação (na hora H), o aluno deve fazê-la com convicção, olhando para as pessoas e apontando para os slides ou seções do pôster para indicar os tópicos que menciona. É uma boa estratégia usar as mesmas palavras dos slides ou seções e não passar batido pelas ilustrações, para as quais é necessário enfatizar os pontos principais. Se durante a apresentação o

Page 127: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

aluno notar algum erro no texto, não deve se desesperar, bastando apenas corrigi-lo durante a fala e seguir em frente.

O comportamento do aluno durante a arguição deve ser aberto a sugestões e críticas, agradecendo boas sugestões/críticas, não dando importância para comentários maldosos e mantendo a calma e a educação. É fato que não existe pesquisa sem crítica e todas as críticas são bem vindas. Além disso, o aluno é um aprendiz e ninguém é obrigado a saber tudo. O aluno deve, portanto, encarar essa fase com segurança e convicção pois foi ele quem desenvolveu o trabalho, sendo totalmente capaz de responder questões a seu respeito.

6.3.2 Elementos de apoio

Os elementos de apoio a uma comunicação são, usualmente, os slides e pôsteres (ou painéis). Para sua elaboração, há algumas dicas a serem consideradas, como: preparar com antecedência, destacar objetivos e conclusões, bem como resumir o conteúdo do documento de base (artigo ou monografia).

A Figura 6.1 traz algumas diretrizes para planejar o conteúdo de slides e pôsteres de um trabalho de conclusão de curso. A quantidade de informação indicada nessa figura pode ser alterada para comunicações de trabalhos mais extensos como os de mestrado e doutorado.Início da audiodescrição da figura 6.1

Figura seis ponto um. Diretrizes para o conteúdo de slides e pôster.

Em slides: Título, Um slide,

Introdução, De um a três slides,

Objetivos, Um ou dois slides,

Desenvolvimento, De um a três slides,

Resultados, De dois a cinco slides

Conclusões, Um ou dois slides,

Total de slides, Entre sete e quinze,

Em pôster, Título centralizado, Introdução, Dois parágrafos,

Objetivos, Dois parágrafos,

Desenvolvimento, Quatro parágrafos,

Resultados, Cinco parágrafos,

Conclusões, Dois parágrafos,

Referências, Todas as que foram efetivamente citadas no pôster.

Esta figura apresenta uma estrutura esperada para slides e pôster em termos de conteúdo. As quantidades mencionadas não são ilustrativas, mas dão uma boa ideia do que se deve enfatizar na apresentação de uma pesquisa. Note que as referências bibliográficas devem estar presentes no pôster, mas geralmente não constam nos slides de apresentação.

Final da audiodescrição da figura 6.1

Figura 6.1 Diretrizes para o conteúdo de slides e pôsteres.

Seguindo essas diretrizes, o slide ou seção de título traz: o título do trabalho, seguido pelo nome do aluno-palestrante, de seu orientador e demais autores (quando for o caso) e a sigla (ou nome por extenso) da instituição de origem do palestrante e seus colegas citados. É usual, também, colocar o e-mail ou outra informação para contato logo em seguida nos pôsteres. Nos slides, essa informa-ção pode ser apresentada no início ou apenas ao fim.

A introdução contém a contextualização do trabalho explicitando por que

esse tema foi escolhido, qual o problema tratado e a hipótese de pesquisa verificada. Os objetivos, por sua vez, deixam claro o propósito do trabalho. O desenvolvimento traz o delineamento da pesquisa com a justificativa para a escolha dos métodos, técnicas, ferramentas e recursos. Após a descrição de “como” a pesquisa foi feita, os resultados são pontuados e apresentados com uni-

Page 128: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

formidade: só se deve mencionar o que for relevante, resultados acessórios devem ser omitidos na comunicação.

Por último, assim como na escrita científica, na comunicação as conclusões também devem estar relacionadas aos objetivos e às hipóteses. Aqui é preciso ter em mente que toda conclusão deve ser feita apenas com base no conteúdo que foi efetivamente mencionado. É exigir demais do pú-blico ouvinte que eles consigam chegar às mesmas conclusões a que o autor do trabalho chegou sem ter o conhecimento total de que esse dispõe. Portanto, deve ser mencionado tudo o que for relevante para guiar o ouvinte à mesma conclusão à qual o aluno-pesquisador-autor-palestrante chegou com seu trabalho.

Em termos de tempo, calcula-se, em média, 1 minuto para cada slide ou seção equivalente no pôs-ter (veja Figura 6.1). Dessa maneira, o conteúdo da figura citada leva cerca de 15 minutos para ser comunicado. É claro que essa é apenas uma estimativa que pode ser alterada por outros fatores como a quantidade e a complexidade do conteúdo comunicado em cada slide (ou seção).

Quanto ao formato de slides e pôsteres, as diretrizes são: respeitar o limite para as margens (pelo menos 1 cm ou de acordo com o formato), nunca usar tamanho de fonte menor que 14, priorizar as de fácil visualização (como a Arial e sua família) e, no máximo, um segundo tipo de fonte. Sugere--se, no mínimo, fonte de tamanho 20 para o corpo e um pouco maior (32 ou 40) para o título de cada slide ou seção do pôster.

As cores escolhidas devem garantir o contraste adequado entre fundo e texto. As ilustrações (tabe-las, figuras, gráficos, etc.) devem ser usadas sem exageros e apenas quando forem significativas para a pesquisa. Se as ilustrações forem obtidas de outros autores, deve-se citar a fonte.

Cuidado com a poluição visual! Cada slide ou seção do pôster não pode ser poluído com excesso de informações. Sugere-se que um slide tenha, no máximo, cerca de 7 linhas com 7 palavras em média cada. Para tanto, devem-se usar apenas palavras-chave e frases curtas como um “lembrete” do que deve ser dito. Para o pôster, os parágrafos devem ter, no máximo, 5 linhas. Assim como na escrita científica, abreviações e maiúsculas desnecessárias devem ser evitadas.

Por fim, uma boa conduta para fugir da poluição é respeitar a proporção de espaço em branco sugerida por Boyce (2006) para pôster, como: 20% gráfico, 40% texto e 40% espaço em branco.

Por último, deve-se fazer a revisão de tudo várias vezes, pois erros de português são inaceitáveis. Sugere-se que a versão final com o arquivo de apresentação ou o pôster seja salva em um formato (como o PDF) que não cause modificações indesejadas. Para o pôster, lembre-se de que é neces-sária a impressão, então, imprima com antecedência! Os slides, por sua vez, devem ser testados, se possível, no computador/projetor disponível para a defesa ou apresentação no congresso.

6.4 Considerações finais

A divulgação escrita ou falada da pesquisa científica é uma etapa fundamental no processo de construção do conhecimento. De nada adianta produzir conhecimento se ele não for de domínio e usufruto da comunidade científica como um todo. É a divulgação das descobertas científicas que impulsionam o avanço da ciência. Nesse sentido, a mesma Figura 5.4 da Unidade 5 pode ser usada

Page 129: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

para resumir a estrutura principal de uma comunicação científica apresentada nesta unidade.

Veja que, enquanto a divulgação escrita representada por um documento formal com relato com-pleto da pesquisa é estática, a comunicação falada é dinâmica e permite novos “olhares” sobre o trabalho, suas hipóteses e resultados. Seja para corroborar ou contradizer o trabalho de pesquisa, a interação dinâmica com outros pesquisadores durante uma comunicação vem para enriquecer o trabalho desenvolvido. É desse contato direto com outros especialistas da área que surgem novas ideias, propostas de trabalhos conjuntos e integração entre grupos distintos.

Para o aluno-pesquisador-autor-palestrante, a arguição é uma oportunidade de fortalecer sua for-mação científica forçando-o a argumentar, com base em dados concretos que obteve durante a pesquisa, para defender sua ideia e seu trabalho. Além disso, as comunicações trazem efeitos co-laterais benéficos para a vida científica do aluno, como o estabelecimento de uma rede de contatos, a capacidade de lidar com críticas e o conhecimento de outras formas de pensamento para sua pesquisa. Afinal de contas, assim como o pensamento, a pesquisa transpassa qualquer barreira geográfica.

Com esta unidade, finaliza-se a formação básica em metodologia científica para um aluno de gra-duação. Como mencionado desde o início, este livro tem como objetivo apresentar os principais conceitos e métodos presentes na formação científica de um pesquisador. Agora, contudo, para que essa formação seja efetiva, o conteúdo assimilado na teoria deve ser aplicado na prática. Pes-quisa científica só se aprende na prática, então... mãos à obra.

Page 130: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Secretaria de Educação a Distância - UFSCar

BACHARELADO EM SISTEMAS DE INFORMAÇÃO

Metodologia Científica - Profa. Dra. Helena Caseli

AVALIAÇÃO OFICIAL

I – Identificação data: 28/09/2013

Disciplina: Metodologia Científica

Professor(a): Helena Caseli

Tutor(a) Virtual:

Tutor(a) presencial:

Aluno(a): R.A.:

II – Instruções

· Valor da prova: 100 pontos · Tempo previsto para elaboração: 2 h

· Objetivos: Avaliar a aquisição de conhecimento referente à Metodologia Científica, por parte do aluno, e sua

capacidade de identificar e aplicar os conceitos vistos na disciplina.

· Critérios de Avaliação: Serão avaliadas a correção e a completude das respostas.

· Orientações: Leia o enunciado de cada questão com atenção, planeje sua resposta, escreva a resposta ou escolha a alternativa mais adequada e, ao final, revise todo seu trabalho. O artigo que segue em anexo pode ser levado para casa, mas todas as demais folhas de avaliação devem ser entregues para a pessoa responsável no local de realização da avaliação. Se necessário, use o verso das folhas de prova para escrever suas respostas.

III – Questões

(15 pontos) 1 – Diga o que são os conceitos “objetivo” e “resultados esperado” na Metodologia Científica e deixe clara a diferença entre eles.

(10 pontos) 2 – Diga se há ou não plágio no texto do aluno produzido a partir do trecho original apresentados a seguir. Justifique sua resposta.

Referência da obra de onde o texto original foi retirado:

CASELI, H. M. Metodologia Científica. São Carlos: UAB-UFSCar, 2011. 111 p.

Texto original (autor)

A divulgação escrita ou falada da pesquisa

científica e uma etapa fundamental no

processo de construção do conhecimento. De

nada adianta produzir conhecimento se ele

não for de domínio e usufruto da comunidade científica como um todo.

Page 131: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Referência:

CASELI, H. M. Metodologia Científica. São

Carlos: UAB-UFSCar, 2011. 111 p.

Texto do aluno (redator)

Tão importante quanto produzir um novo

conhecimento e divulgá-lo, seja na forma escrita, seja na forma falada (CASELI, 2011).

Referencia

CASELI, H. M. Metodologia Científica. São

Carlos: UAB-UFSCar, 2011. 111 p.

AVALIAÇÃO OFICIAL

(25 pontos) 3 – Explique, com suas palavras, qual o papel da hipótese de trabalho conforme ilustrado na figura abaixo. Quanto mais completa for sua resposta, maior será sua nota. Explique todos os conceitos que julgar necessário e use noções de escrita cientifica para elaborar sua resposta.

As questões 4-8 se referem aos trechos do artigo em anexo. Veja que não e necessária a leitura completa do artigo para responder as questões. Leia os enunciados e, de acordo com o que e pedido, leia as partes necessárias do artigo.

(10 pontos) 4 – A partir co conteúdo apresentado no artigo (veja seção 1), escreva com suas palavras: qual e a hipótese do trabalho e sua justificativa apresentada pelos autores. De acordo com o que e apresentado na conclusão (seção 6), responda justificando sua resposta: tal hipótese foi comprovada?

(5 pontos) 5 – Selecione a alternativa que melhor indica o que o seguinte trecho, retirado do segundo parágrafo da seção 4 do artigo, expressa e justifique sua resposta:

Trecho: “As etapas aplicadas neste estudo de caso seguem a metodologia do processo de mineração de dados apresentada por Tan et al. [13], a qual e composta pelas seguintes etapas: seleção, pré-processamento, transformação, garimpagem, analise e assimilação (vide Figura 2).”

a) Limitações do trabalho

b) Objetivo

c) Resultados esperados

d) Método

e) Trabalhos futuros

Page 132: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

(10 pontos) 6 – Escreva a referencia completa para o artigo em anexo considerando-se o formato ABNT. Insira todos os campos essenciais e não se esqueça de destacar (sublinhando) o que for necessário de acordo com o formato especificado para esse tipo de publicação.

( 10 pontos) 7 – Considerando-se os tipos de citações bibliográficas, explique qual seria o tipo mais adequado se você fosse fazer a citação a técnica de modelagem vetor de espaço de autoria de Salton et alli (2005) mencionada no segundo parágrafo da seção 3. Nesse caso, mostre como ficaria a citação a essa técnica usando o formato autor-data da ABNT.

(15 pontos) 8 – Aplicando todo o conhecimento sobre escrita cientifica adquirido durante a disciplina, escreva um parágrafo com suas próprias palavras explicando o que e o método TF-IDF mencionado na seção 3.1. Sempre que necessário, utilize o formato autor-data da ABNT para fazer citações.

Anexo - Artigo

Revista Brasileira de Informática na Educação, Volume 19, Número 2, 2011

Detecção e Avaliação de Cola em Provas Escolares Utilizando Mineração de

Texto: um Estudo de Caso

Elmano Ramalho Cavalcanti

UFCG / DSC – Rua Aprígio Veloso, 882 – Bairro Universitário – 58.429-140 – Campina Grande PB – Brasil

[email protected]

Elmano Pontes Cavalcanti

UFCG / UAAC – Rua Aprígio Veloso, 882 – Bairro Universitário – 58.429-140 – Campina Grande PB - Brasil

[email protected]

Carlos Eduardo Pires

UFCG / DSC – Rua Aprígio Veloso, 882 – Bairro Universitário – 58.429-140 – Campina Grande – PB - Brasil

[email protected]

Rodrigo Alves Costa

UFPE / CIn – Av. Jornalista Aníbal Fernandes, s/n – Cidade Universitário – 50.740-560 – Recife – PE - Brasil

[email protected]

Caroline Ramalho Cavalcanti

FSM – Rodovia BR, 230 – 58.900-000 – Cajazeiras PB – Brasil

[email protected]

Resumo A mineração de texto tem sido utilizada para diversos propósitos, como na extração, classificação e categorização de documentos. Dentro desse contexto, este trabalho apresenta um estudo de caso realizado na Universidade Federal de Campina Grande, em que se utilizou do modelo de vetor de espaços e da métrica de similaridade por cosseno na construção de um modelo classificador capaz de inferir o nível de cola existente entre provas escolares. A inferência do modelo foi comparada à detecção tradicional (humana) de cola e quantificada estatisticamente pelas seguintes métricas:

Page 133: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

acurácia, variação da acurácia, precisão, recall, F-measure e índice Kappa. Os resultados apontam que o modelo criado apresentou uma boa qualidade na detecção do nível de cola entre provas, tornando possível sua utilização em situações de ensino reais.

Palavras-Chave: Educação Mediada por Tecnologia, Mineração de Texto, Modelo Vetor de

Espaço, Detecção de Cola, Avaliação de Cola, Classificação de documentos, UFCG

Abstract

Text mining has been used for various purposes, such as extraction, classification and categorization of documents. In this sense, this paper presents a case study accomplished at Federal University of Campina Grande that used the vector space model and the cosine similarity metric to build a classifier model able to infer the level of cheating between exams. The inference of the model was compared to traditional detection (human) of cheating and quantified statistically by the metrics accuracy, variation of the accuracy, precision, recall, F-measure, and Kappa index. The results point out that the model achieved a good quality in detecting the level of cheating between exams, making possible its use in real teaching situations.

Keywords: Technology-mediated Education, Text Mining, Vector Space Model, Cheating Detection, Cheating Evaluation, Documents classification, UFCG

Recebido: 03 de Janeiro de 2011 / Aceito: 03 de Junho de 2011 / Publicado: 24 de Agosto de 2011

DOI: 10.5753/RBIE.2011.19.02.56

1 Introdução

Em um contexto em que grande parte dos dados corporativos encontra-se disponível em forma textual, o processo de mineração de textos surgiu como uma poderosa ferramenta de apoio à gestão de conhecimento. Nesse sentido, o objetivo da prática de mineração de textos centra-se na busca por padrões, tendências e regularidades em documentos escritos em linguagem natural [12]. Extração e classificação de documentos, filtro de emails, máquinas de busca e categorização de documentos são alguns exemplos de aplicações de mineração de texto [8].

Embora as aplicações de mineração de texto sejam comumente utilizadas para fins industriais e comerciais, é apresentada neste artigo uma utilização prática no setor de educação, mais exatamente na detecção e classificação (avaliação) automática de cola em provas escolares presenciais.

É notório que cola de alunos em provas escolares é um problema antigo e, até então, de difícil solução [25]. Não há uma definição precisa de cola, mas supõe-se que haja cola toda vez que duas provas tenham um grau suspeito de semelhança. A dimensão de uma cola é variável: pode ser uma parte de uma questão, toda a questão, algumas questões, ou a prova inteira.

Alguns estudos exploratórios mostram a situação atual da prática da cola tanto em escolas de ensino médio [1] como em faculdades e universidades [2] brasileiras. Dependendo do tamanho da turma e também da prova aplicada, torna-se uma tarefa não trivial para o professor detectar cola em provas subjetivas.

Motivado por essas circunstâncias, apresenta-se neste trabalho um estudo de caso da aplicação dos métodos, técnicas e algoritmos de mineração de texto na construção de um detector de cola de provas escolares no contexto universitário.

Os conceitos sobre mineração de texto são apresentados na Seção 2. Na Seção 3 é apresentado o estudo de caso realizado na Universidade Federal de Campina Grande – PB, onde são descritas as etapas do processo de mineração que culmina com a criação de um detector de colas de provas escolares. A análise dos resultados é apresentada na Seção 4. A validação do modelo é apresentada na Seção 5, em que se compara o modelo detector de colas com a detecção de cola feita por um especialista humano. Por fim, as considerações finais, limitações e trabalhos futuros são listados na Seção 6.

Page 134: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

2 Trabalhos Relacionados

Um problema pedagogicamente semelhante ao da cola em provas escolares é o plágio, sendo este mais comum em trabalhos acadêmicos devido, principalmente, ao acesso à informação através da Internet. Na literatura encontram-se muitas pesquisas que tratam desse problema. Lukashenko et al. [26] apresentam um survey sobre métodos e ferramentas para detecção de plágio. Outros trabalhos mais recentes [27,28] propõem novas soluções para lidar com esse problema.

Atualmente existem tanto ferramentas proprietárias como de código livre para detecção de plágio em documentos. Dentre as ferramentas proprietárias, pode-se destacar duas: Ephorus1 e Plagium2. A primeira é uma ferramenta Web utilizada para prevenir e detectar plágios em trabalhos escolares. O usuário seleciona um documento que pode ser comparado com outros documentos armazenados no mesmo computador, ou com documentos disponíveis na Web. Os resultados são mostrados em um relatório contendo uma descrição resumida das semelhanças entre o documento informado e os documentos encontrados.

Plagium é uma ferramenta Web que funciona de modo similar a uma máquina de busca. A principal diferença é que, para realizar uma busca, o usuário pode informar um bloco de texto completo, ao invés de um número reduzido de palavras-chave. A ferramenta divide o bloco de texto em fragmentos que são comparados com documentos disponíveis na web. O resultado das comparações é um conjunto de links para documentos que são pontuados para determinar quais documentos se assemelham ao bloco de texto fornecido como entrada.

Por outro lado, uma ferramenta de detecção de plágio de código livre é a Sherlock [38,39], um programa voltado à detecção de similaridade entre documentos de texto. Para tal, são utilizadas assinaturas digitais, que são associadas a cada documento. A saída do programa indica as porcentagens de similaridade entre cada par do conjunto de documentos considerado.

Uma outra ferramenta aberta é a URKUND [40], que busca por similaridades entre um documento e outros disponíveis em três tipos de fontes: Internet, documentos impressos (ex: livros, revistas, etc.) e documentos outrora enviados pelos estudantes. O URKUND é um sistema Web transparente que oferece um serviço automatizado para detecção de plágio através de envio de documentos por e-mail. Além disso, o sistema suporta vários formatos de arquivos (.doc(x), .odt, .html, .pdf, entre outros). Entretanto, a ferramenta funciona apenas de forma online, não havendo opção de utilizá-la localmente em uma máquina.

Outras ferramentas de detecção de plágio também são apenas voltadas à Internet/Web, ou seja, verificar se determinado documento é similar a outras fontes que estejam disponíveis online. Essa realidade, entretanto, diverge da tarefa de detectar cola entre provas escolares presenciais, dado que, nesse caso, o plágio é apenas local.

O estudo de caso descrito neste trabalho é baseado em técnicas de mineração de dados bastante difundidas na literatura. Além disso, durante o desenvolvimento do estudo de caso foram usadas apenas ferramentas de código livre. Até onde se sabe este é o primeiro trabalho que demonstra como utilizar a tecnologia de mineração de texto no desenvolvimento de uma solução de detecção e avaliação de cola em provas escolares.

Em relação à prática da cola, estudos apontam que a mesma está presente em todo o mundo, em todos os segmentos da educação, de ensino fundamental até a pós-graduação [29,30]. Esforços têm sido feitos para encontrar maneiras de impedir os estudantes de conseguir colar [30, 31] ou mesmo prever quando um estudante provavelmente irá colar [32,33].

Além de técnicas de prevenção e previsão, também é possível usar programas de computador para detectar cola em provas ou trabalhos escolares. Nesse sentido, a maioria dos trabalhos propõem técnicas estatísticas para detectar cola em provas de múltipla escolha [34-37]. Entretanto, neste artigo foi demostrado como algoritmos de mineração de texto podem ser utilizados para detecção e avaliação de cola em provas subjetivas. Novamente, a aplicação apresentada nesse artigo, até onde se sabe, é inédita.

3 Mineração de Texto

A mineração de texto é um ramo da mineração de dados. Esta última trata, em sua maioria, com dados estruturados, ou seja, aqueles que apresentem uma forma bem definida (e.g., planilha de dados) [13]. Por outro lado, a mineração de texto trabalha com dados não-estruturados [14]. Recuperação da informação, classificação supervisionada e não-supervisionada (i.e., clustering) de documentos estão entre as áreas de pesquisa da mineração de texto [8].

1 http://www.ephorus.pt/home2 http://www.plagium.com/

Page 135: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Uma das mais propagadas e utilizadas técnicas de mineração de texto é a modelagem vetor de espaço (do inglês, Vector Space Modelling – VSM), introduzida por Salton et al. [5]. Ela é um modelo algébrico utilizado para representar documentos textuais como vetores de termos.

Uma das grandes vantagens desse método é a possibilidade de automatizar o processo de mineração. Essa técnica tem sido muito utilizada em sistemas de recuperação de informação (RI) [9].

3.1 Representação e Similaridade de Documentos

Devido à natureza não-estruturada de documentos textuais, uma atividade essencial na etapa de pré-processamento do processo de mineração de textos se refere à estruturação desses. Isso permite que os documentos sejam manipuláveis por algoritmos de extração de conhecimento [12].

Embora alguns algoritmos exijam informações mais sofisticadas, como os baseados em conhecimentos linguísticos, a grande maioria dos algoritmos de extração de padrões necessita apenas que os documentos estejam em um formato de planilha, no qual as linhas correspondam aos documentos e as colunas aos termos presentes na coleção [13]. Esse formato é denominado “bag of words”, na qual os termos são considerados independentes, formando um conjunto desordenado em que a ordem de ocorrência das palavras não importa. Uma forma de representar a bag of words é por meio de tabelas atributovalor [9]. Um exemplo dessa representação pode ser observado na Tabela

1, na qual corresponde ao i-ésimo documento, representa o j-ésimo atributo (ou termo), a é a medida que relaciona o i-ésimo documento com o j-ésimo atributo e representa a classe (rótulo) do i-ésimo documento. A classe representa uma classificação do documento. Por exemplo, se a mineração de texto estiver sendo utilizada para classificar um conjunto de documentos científicos, as classes poderiam representar os tópicos ou categorias da área de um documento (e.g., medicina, engenharia, direito).

Dessa forma, cada documento pode ser representado como um vetor .

Segundo Salton e Buckley [4], o cálculo do valor de depende de três componentes:

• O componente do documento, relacionado à estatística de um determinado termo estar presente em um dado documento;

• O componente da coleção, relacionado à distribuição da presença do termo ao longo da coleção de documentos;

• O componente da normalização, o qual possibilita que documentos de diferentes tamanhos possam ser comparados

segundo uma mesma escala. Diversas medidas foram propostas para calcular os valores dos pesos [12]. Essas medidas podem ser classificadas em dois tipos: binárias e baseadas em freqüência. Pesos binários indicam a ocorrência ou não de um termo em um determinado documento. Pesos baseados em freqüência visam contabilizar o número de ocorrências de um determinado termo em um dado documento, servindo como base para a extração de diversas medidas estatísticas na extração de padrões, sendo esses os mais comumente aplicados. Dentre os pesos baseados em medidas de freqüência, pode-se distinguir duas classes [12]: pesos supervisionados, que dependem de dados com valor de classe conhecido, medindo a importância de um dado atributo na determinação do valor de classe; e pesos não-supervisionados, aplicáveis a dados não-rotulados.

Legenda da tabela 1: Representação de documentos por vetor.

Page 136: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Dentre os pesos supervisionados, pode-se citar medidas como a ConfWeight [5] e a Informação Mútua [6]. Como exemplos de pesos não-supervisionados, pode-se citar a TF (term frequency), a qual considera a freqüência absoluta dos termos nos documentos [7]; a IDF (inverse document frequency) [5], que calcula a freqüência inversa do termo, favorecendo termos que aparecem em poucos documentos da coleção; e a TF-IDF (Salton e Buckley [4]), que consiste em uma combinação das duas anteriores (TF e IDF).

Quando se pretende verificar se dois documentos são parecidos, é intuitivo inicialmente analisar os termos (palavras) que estão presentes em ambos os documentos. Mais do que isso, é preciso verificar o número de vezes que cada termo aparece em cada documento. A isso se chama freqüência do termo (term frequency - TF). Entretanto, visto que alguns termos são comuns (e.g., artigos), utiliza-se o fator de freqüência inversa de documento (inverse document frequency - IDF), de forma a ponderar a freqüência dos termos. Dessa forma, termos comuns terão um peso menor que termos incomuns. Esse método, denominado TF-IDF (term frequency – inverse document frequency) e proposto por Salton e Buckley [4], é muito utilizado na área de Recuperação de Informação [5].

Formalmente, tem-se que o valor da freqüência de um termo i que aparece em um documento é dado por:

em que é o número de ocorrências do termo i no documento j e o denominador é a soma do número de

ocorrências de todos os termos no documento . Seja |D| a quantidade de documentos, tem-se que a fórmula da freqüência inversa de documento (IDF) é dada por:

em que representa o total de documentos em que o termo ti aparece. Dessa forma, o valor TFIDF para um termo i em um documento j é dado por:

O custo computacional do método TF-IDF é da ordem O (|N||M|), em que |N| é o quantidade de documentos e|M|a quantidade de termos utilizados (vide Tabela 1).

A similaridade entre dois documentos pode ser calculada pelo cosseno do ângulo formado entre seus vetores, ou seja,

em que representa o produto escalar dos vetores enquanto que representam os módulos dos vetores.

O valor da similaridade é sempre positivo, variando entre 0 (zero), nenhuma similaridade, a 1 (um), similaridade total. O método de similaridade por cosseno é considerado o padrão nas pesquisas de mineração de texto [8,9,12]. Alguns exemplos de bibliotecas de código livre

contendo algoritmos de similaridade de texto são o Simmetrics [10] e o SecondString [11].

Page 137: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

3.2 Métricas de Qualidade

Na literatura de mineração de dados, existem métricas que quantificam e qualificam os modelos preditivos (e.g., classificação supervisionada, regressão). Considere a Tabela 2 que mostra a quantidade de classificações corretas em oposição às classificações preditas para as classes “+” e “-” de um modelo binário. Essa tabela é denominada matriz de confusão, e através dela as métricas Acurária, Precisão, Recall e F-measure são calculadas.

Legenda da tabela 2: Exemplo de matriz de confusão binária.

No contexto de mineração de texto, a recall de uma classe é definida como a porcentagem de documentos classificados corretamente entre todos os documentos pertencentes à classe. A precisão é a porcentagem de documentos classificados corretamente entre todos os documentos que foram considerados pelo modelo como pertencentes à classe [12]. A métrica F-measure combina as duas anteriores, sendo definida pela expressão:

Enquanto as métricas anteriores são calculadas para cada classe do modelo, a Acurácia é uma métrica global do modelo. Ela reflete a taxa de acerto, ou seja, o número de classificações que o modelo inferiu corretamente. Considerando o exemplo da Tabela 1, tem-se que:

Além dessas métricas, existe um coeficiente estatístico denominado índice Kappa ou Estatística K, que é uma medida de concordância em escalas nominais, muito utilizado em estudos que envolvam diagnóstico médico [6]. Aplicado ao contexto de classificação em mineração de texto, o índice Kappa indica o nível de concordância entre a classificação do modelo e a classificação de referência, ou seja, o quão os dois estão de acordo quanto à classificação. Como exemplo, considere a Figura 1, que ilustra uma matriz de confusão genérica de um problema de e n casos (documentos).

Page 138: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Legenda da figura 1: Matriz de confusão genérica.

O índice Kappa é calculado de acordo com a Equação 7. Assim como a métrica de similaridade por cosseno, também varia entre zero (mínimo) e um (máximo).

Para que se possa estimar a significância estatística e o intervalo de confiança de índice kappa , é preciso obter sua variância, que é

dada pela Equação 8 [19]. Para um número de amostras suficientemente grande (n>30), tem-se que a segue uma distribuição Normal padrão (i.e., N(0,1)).

Os valores de são calculados de acordo com os valores apresentados na Figura 1 e as equações de 8 a 11.

Utilizando essas métricas de qualidade é possível avaliar adequadamente o modelo classificador de cola em provas apresentado na próxima seção.

Page 139: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

4 Estudo de Caso

Realizou-se um estudo de caso no intuito de analisar até que ponto a metodologia e técnicas de mineração de texto podem ser satisfatoriamente aplicadas na detecção de cola em provas escolares. O estudo de caso foi efetuado na Universidade Federal de Campina Grande, em umprojeto envolvendo as unidades acadêmicas de Administração e Ciência da Computação. Uma versão preliminar e resumida deste trabalho pode ser verificada em [22].

As etapas aplicadas neste estudo de caso seguem a metodologia do processo de mineração de dados apresentada por Tan et al. [13], a qual é composta pelas seguintes

etapas: seleção, pré-processamento, transformação, garimpagem, análise e assimilação (vide Figura 2)

4.1 Seleção, Limpeza e Amostragem dos Dados

Para compor o estudo de caso, foram selecionadas 30 provas, contendo cada uma quatro questões subjetivas na área de administração e subárea marketing. As questões estão apresentadas no Apêndice deste trabalho.

As provas foram respondidas em formato eletrônico e armazenadas em formato de texto plano (e.g, .txt), não sendo necessário aplicar nenhuma atividade de limpeza nos dados.

A amostragem é mais comum em operações que envolvam grande quantidade de dados armazenados, por exemplo, em um banco de dados. Como isso não se aplica a este trabalho, não foi realizada amostragem, mas foi considerado todo o universo das 30 provas no estudo.

Legenda da figura 2: Processo de mineração de dados (traduzido e adaptado de Tan et al.[15])

Visto que na vida real um professor detecta cola ao comparar a resposta de uma questão pelo aluno A com a resposta da mesma questão pelo aluno B, a prova de cada aluno foi fragmentada em quatro partes, que foi o número de questões da prova. O texto de cada questão passou a ser considerado como o documento da mineração de texto.

Foram criados automaticamente dicionários para cada questão da prova, ou seja, um conjunto de palavras específicas que faz parte do contexto de cada questão. Além disso, quando se fez necessário, o professor acrescentou algumas palavras referentes ao contexto de cada questão. Dessa forma, sempre que duas respostas de alunos apresentarem muitas palavras idênticas desse dicionário, será considerado, com forte indício, a existência de cola. Os dicionários foram especificados em documentos de texto convencionais, com cada linha contendo uma palavra.

4.2 Transformação de Dados

Em seguida, como requisito para o correto funcionamento dos algoritmos de mineração, foram removidas a pontuação e acentuação das respostas de cada questão. Isso é necessário tanto por diminuir o tamanho dos vetores de documentos (vide Tabela 1), como por evitar que o algoritmo de mineração diferencie palavras que na realidade

são as mesmas . Embora essa remoção ajude na maioria dos casos, pode igualar palavras

diferentes, no caso de palavras que se diferenciam justamente pelo acento 3. Pelo fato desses

3 Com o Novo Acordo Ortográfico da língua portuguesa [23], algumas palavras que antes eram diferenciadas pelo acento são agora escritas da mesma forma (ex: pelo/pélo/pêlo serão todas escritas sem acento).

Page 140: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

casos serem incomuns, acredita-se que essa etapa traga mais benefícios do que prejuízos. A implementação desta etapa foi realizada utilizando a API Java 1.5 e a versão 3.3.1 da IDE Eclipse [14].

Após a remoção da pontuação e acentuação, iniciou-se o processo de tokenização, que separou cada documento em palavras ou tokens. Além disso, foram filtrados os tokens de tamanho menor ou igual a três caracteres, removendo assim elementos gramaticais comuns, tais como preposições, artigos e conjunções , diminuindo o tamanho dos vetores e otimizando o algoritmo de mineração.

A etapa seguinte consistiu em remover as palavras irrelevantes (stopwords). Para isso, foi utilizada uma adaptação do dicionário de palavras irrelevantes da língua portuguesa do projeto Snowball [15]. A adaptação foi feita acrescentando-se termos específicos e comuns ao

domínio de cada questão da prova.

Em seguida, realizou-se a normalização morfológica (stemming), que consiste em transformar as palavras em seus termos primitivos. A Figura 3 ilustra essa etapa através de um fluxograma. As palavras que estão no plural, superlativo, ou que apresentem prefixo e sufixo são normalizadas, ou seja, reduzidas ao seu radical.

Para exemplificar o processo da normalização morfológica, considere que na resposta a uma questão o aluno A escreve a frase “...processa-se o produto para então...”, enquanto que o aluno B consegue olhar a prova de A e escreve: “...o produto é processado para então...”. Vemos que as palavras ‘processa-se’ e ‘processado’ possuem o mesmo radical ‘process’. A etapa de normalização morfológica serve para garantir a remoção dos caracteres referentes ao plural, feminino, aumentativo, diminutivo, etc., mantendo-se apenas o radical da palavra. A execução desta etapa foi realizada utilizando-se o algoritmo de stemming do projeto Snowball [15].

Após normalizar morfologicamente os documentos, é também importante normalizá-los semanticamente. Isso é feito através de um mapeamento de todos os sinônimos de uma palavra para uma única palavra-base. Para se conseguir isso, é preciso utilizar uma base léxica da língua em que o documento foi escrito. No caso da língua inglesa, existe a WordNet [16]. Já para a língua portuguesa existe a WordNet.PT [17]. Entretanto, não foi possível

realizar a normalização semântica visto que a Word-Net.PT encontrava-se em fase de manutenção no período de execução deste trabalho de pesquisa.

Finalmente, após essas etapas, cada questão de cada aluno (documento) é transformada em um vetor de palavras (Seção 2.1), de acordo com o método TF-IDF (Seção 2.2). Como a dimensão das respostas das questões era pequena (poucos parágrafos) não houve necessidade de mutilizar técnicas de compressão de vetores. O tamanho do

vetor ficou na faixa de 500 colunas. Não foi necessária a utilização de pruning (podagem), visto que seu uso piorou os resultados do cálculo de similaridade.

Todas as tarefas de transformação de dados foram realizadas utilizando a ferramenta RapidMiner [18], software de código aberto para descoberta de conhecimento,

Legenda da figura 3: Normalização morfológica (adaptado de Morais [21]).

aprendizagem de máquina e mineração de dados. A Figura 4 ilustra a cadeia de passos da etapa de transformação, que inicia-se no operador ToLowerCaseCoverter e termina no SnowballStemmer.

Page 141: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

O texto de cada questão é inicialmente transformado em letras minúsculas . Em seguida, realiza-se a tokenização. Depois, são retiradas as palavras de menos de 3 caracteres e as que são consideradas irrelevantes (stopwords). Por fim, realiza-se a normalização morfológica. Após a estapa de transformação, tem-se a garimpagem, a qual está destacada na mesma figura pelo operador Example-Set2Similarity .

4.3 Garimpagem

A garimpagem (mineração) foi realizada através do modelo de vetor de espaços e da técnica de agrupamento por similaridade por função cosseno (Seção 2.3), a qual retorna um valor real no intervalo [0,1] para cada par de provas, em que 0 (zero) significa ausência total de cola e 1 (um) provas idênticas. A justificativa para a escolha do modelo vetor de espaços e da métrica de similaridade por cosseno deu-se pelo fato deles serem considerados, respectivamente, o modelo e a métrica padrões utilizados em aplicações de mineração de texto [8,9].

Visto que foram utilizadas trinta provas com quatro questões cada, o algoritmo de similaridade por cosseno foi executado 4x = 4 x 435 = 1740 vezes. Visto que o tamanho dos vetores foi reduzido pela remoção de palavras pequenas (com menos de três caracteres) e das palavras contidas na lista de palavras irrelevantes, o tempo de execução total do algoritmo foi considerado pequeno, da ordem de poucos segundos.

Legenda da figura 4: Etapas do processo de mineração realizadas no RapidMiner

5 Análise dos Resultados

Como detalhado na Seção 3, foram utilizadas 30 amostras de provas, entre as quais algumas contem colas de tamanhos diferentes: pequena, razoável e grande.

Lembrando que representam as respostas de uma certa questão Z da pro pelos alunos X e Y, o modelo utilizará as seguintes regras para determinar qual a classe associada à tupla <QuestãoZ,Aluno X,Aluno Y>:

Page 142: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

A figura 5 apresenta os histogramas percentuais da similaridade, , entre todos os pares de resposta uqe possuíram uma similaridade acima de 10%4.

Legenda da figura 5: Histogramas da similaridade entre as questões da prova.

Percebe-se uma distribuição de similaridade semlhante entre as quatro questões: a maior parte das questões apresentou baixo nível de semelhança com as demais (<0,20), enquanto que um pequeno grupo apresentou níveis variados de semelhança, constituindo as colas pequenas, razoáveis e grandes. Isso mostra que em todas as questões da prova houve indícios da existência de cola de diversas dimensões.

Seja o grafo G = em que V é o conjunto de provas (código do aluno) e A o conjunto de arestas que ligam as questões cuja similaridade é maior que certo limiar . Dessa forma, para cada valor de único grafo de similaridade. Ajustando –o aproximadamente, é possível obter os grafos de similaridade nível de cola.

A Figura 6 ilustra a visão do grafo circular mostrando a incidência das colas grandes e razoáveis ocorridas na

4 Omitiram-se os documentos em que a similaridade é menor que 10% para que as ocorrências sejam perceptíveis.

Page 143: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

primeira questão da prova. Os vértices do grafo representam os códigos atribuídos a cada aluno; as arestas representam o grau de similaridade entre as respostas à uma mesma questão feita por dois alunos. A posição dos vértices no grafo foi gerada aleatoriamente não tendo nenhuma relação à de aula. Os grafos circulares de similaridade

questões da prova estão ilustrados nas Figuras 7 e 9.

Um outro tipo de visualização das similaridades entre as questões da prova está ilustrado na Figura 10, onde as questões mais similares ficam outras5, o que facilita ao professor descobrir rapidamente os grupos de alunos nos quais possivelmente houve cola. Na figura, percebe-se a ocorrência de oito incidências de possível cola, sendo que em dois casos houve a participação de um terceiro aluno: um grupo formado pelos alunos 5, 21, 28 e outro formado pelos alunos 2, 27, 29.

Legenda da figura 6: Grafo de similaridade para a questão 1

6 Avaliação do Modelo

Para validar o modelo de detecção e avaliação de cola foram utilizadas as correções reais das provas feitas pelo professor da disciplina, de maneira tradicional. Após a correção, foi gerado um mapeamento das colas detectadas, o qual encontra-se apresentado na Tabela 3. Essa tabela mostra os pares de alunos em que foram detectados a cola e a dimensão da mesma. O professor foi instruído a classificar as colas nas mesmas três classes usadas pelo modelo de mineração, ou seja, colas de tamanho pequeno, razoável e grande. Somente após a correção das provas e geração do mapeamento de colas o professor teve acesso às avaliações feitas pelo modelo.

A partir do mapeamento de cola definido pelo professor pôde-se avaliar o desempenho do modelo de inferência, verificando se este detectou não apenas a existência de cola, nas se acertou também a dimensão da mesma.

Os percentuais de cola detectados pelo modelo de inferência e pelo professor estão ilustrados na Figura 8 e 9. Percebe-se uma boa proximidade nas porcentagens dos tipos de cola grande e razoável, enquanto que uma razoável diferença na porcentagem de provas com nenhuma cola. Uma diferença maior ocorreu nos valores de cola pequena.

5 O grafo foi desenhado de acordo com o método de Peter Eades para grafos não-direcionados [26].

Page 144: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Legenda da figura 7: Agrupamento das provas quanto à similaridade na resposta da quarta questão

Legenda da tabela 3: Mapeamento das colas feitas pelo professor *

Um exemplo em que o sistema detectou uma cola grande é descrito na Tabela 4, onde encontram-se as respostas de dois alunos (códigos 1 e 30) em relação à terceira questão da prova. O modelo quantificou a similaridade entre essas respostas em 0,788, rotulando-a como

uma grande cola. Ao realizar a correção, o professor também considerou que houve uma cola grande entre essas respostas.

O conjunto de previsão, utilizado para avaliar o modelo de detecção de cola, está descrito na Tabela 6. A primeira coluna especifica o número da questão da prova; as duas colunas seguintes indicam o código dos alunos envolvidos; a quarta contém a similaridade detectada pelo modelo; a quinta e sexta colunas contém, respectivamente, o tipo de cola inferido pelo modelo e o tipo verdadeiro (definido pelo professor); e a última coluna indica se o algoritmo acertou ou não em sua inferência. A tabela está em ordem crescente do número de questão da prova e em ordem

Page 145: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

decrescente de grau de similaridade.

Conforme pode ser verificado na Tabela 6, dos dez alunos taxados com alto índice de cola pelo modelo, nove deles também tiveram um alto índice de cola de acordo com o professor. A concordância entre a classificação de cola feita pelo modelo e pelo professor está apresentada na matriz de confusão (vide Tabela 4).

De acordo com a matriz de confusão, a acurácia do modelo foi de 35/44 = 79,55%. Os valores das métricas precisão, recall e F-measure para cada tipo presentes na Tabela 5. Segundo a métrica harmônica F-Measure, o modelo apresentou excelente índice de acerto

de cola dos tipos grande e nenhuma, um bom índica na detecção de cola pequena, e um índice razoável na detecção de cola de tamanho razoável. Ressalta-se também, que o modelo não cometeu nenhum erro comprometedor, como confundir uma cola pequena com uma cola grande ou vice-versa.

“O marketing procura entender as necessidades dos consumidores e traduzir esse conhecimento para poder elaborar adequadamente os seus produtos e serviços. Considerando nesse caso, as características de todos os elementos do mix de produto. Por outro lado, o marketing também deve considerar a “arte” no que diz respeito ao lado do comportamento humano, no qual o consumidor toma decisões baseado em emoções e muitas vezes não tão necessariamente racional como talvez pudesse ser.”“Os profissionais de marketing procuram entender as necessidades das pessoas e interpretar esse conhecimento para só assim poder elaborar os seus produtos e serviços. Considera-se para isso, as características de todos os elementos do mix de produto. O marketing também pode ser considerado como “arte” quando se considera o lado do comportamento humano, no qual o consumidor toma decisões baseado em emoções e muitas vezes não tão necessariamente racional como talvez pudesse ser.”

Legenda da tabela 4: Indício de cola entre duas respostas da 3ª questão da prova.

Legenda da figura 8: Percentuais de cola segundo o professor.

Legenda da figura 9: Percentuais de cola segundo o modelo.

Page 146: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Legenda da tabela 5: Matriz de confusão do modelo classificador de cola.

Legenda da tabela 6: Métricas de qualidade do modelo.

O índice Kappa, , foi de 0,7126, enquanto que o desvio padrão de foi de 0,0831, ambos calculados de acordo com o método de Fleiss et al. [19]. Com 95% de confiança, tem-se que o intervalo de confiança do valor populacional de índice kappa é entre 0,5496 e 0,8756 . De acordo com a interpretação desse índice discutida em [20], tem-se que ele está situado na categoria substantial agreement (que vai de 0,6 a 0,8), a segunda melhor possível, o que sugere uma boa qualidade de inferência na detecção de colas.

Uma justificativa para alguns dos erros de inferência apresentados pode ser a ausência do uso de algoritmos de mapeamento de expressões sinônimas (e.g., “com certeza” = “sem dúvida”), de forma que provas similares semanticamente e não lexicamente não puderam ser plenamente captadas pelo processo de mineração utilizado.

Salienta-se também que as questões subjetivas da prova (vide Apêndice) não pediam respostas memorizadas, mas de caráter totalmente subjetivo, evitando assim a ocorrência de falso-positivos.

7 Considerações Finais

Este artigo apresenta um estudo de caso da utilização da metodologia e técnicas de mineração de texto no desenvolvimento de um modelo detector e avaliador de cola

em provas escolares. Na implementação da solução foi utilizado o tradicional modelo de vetor de espaços e da métrica de similaridade por cosseno. Utilizou-se o software RapidMiner [18] nas etapas de transformação e garimpagem dos dados. Foi elaborado um conjunto predição para avaliar a acurácia do modelo detector de colas.

O resultado indicou uma acurácia de quase 80% e índice Kappa de 0,71, o que indica um bom resultado [19].

Page 147: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Questão Aluno A Aluno B Similaridade Modelo Professor Acertou?1 01 25 0,812 G G SIM1 01 30 0,770 G G SIM 1 02 29 0,721 G R NÃO1 25 30 0,687 R G NÃO1 01 27 0,357 P P SIM1 25 27 0,337 P P SIM1 13 08 0,286 P N NÃO 1 27 30 0,258 P P SIM1 01 26 0,216 N R SIM1 26 30 0,196 N N NÃO1 11 17 0,191 N N SIM1 22 6 0,166 N N NÃO1 25 26 0,158 N N SIM 1 13 28 0,152 N N SIM 2 26 05 0,725 G G SIM 2 26 03 0,714 G G SIM 2 01 30 0,710 G G SIM 2 02 29 0,511 R R SIM 2 02 25 0,286 P P SIM 2 25 29 0,279 P P SIM 2 10 12 0,203 N N SIM 2 11 18 0,173 N N SIM 2 11 25 0,171 N N SIM 2 11 29 0,154 N N SIM 3 25 26 0,821 G G SIM 3 01 30 0,788 G G SIM 3 25 07 0,712 G G SIM 3 26 07 0,674 R G SIM 3 02 29 0,554 R R SIM 3 27 05 0,230 P N SIM 3 19 22 0,216 P N NÃO3 22 30 0,184 N N SIM 3 11 15 0,168 N N SIM 3 1 22 0,165 N N SIM 3 14 18 0,156 N N SIM 4 26 07 0,856 G G SIM 4 02 29 0,497 R R SIM 4 27 29 0,404 R R SIM 4 02 27 0,323 P R NÃO4 28 05 0,290 P P SIM 4 21 05 0,220 P N NÃO4 13 20 0,181 N N SIM4 08 09 0,152 N N SIM4 17 03 0,150 N N SIM

G: cola grande, R: cola razoável, P: cola pequena, N: nenhuma cola.

Page 148: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Legenda da tabela 7: Conjunto de previsão utilizado para avaliação do modelo de detecção de cola.

A solução apresentada neste artigo pode auxiliar ou mesmo substituir o professor na difícil e às vezes árdua tarefa de detecção e avaliação da cola em provas escolares.

Como trabalhos futuros pretende-se: experimentar o modelo em provas de outras áreas do conhecimento; utilizar o mapeamento de expressões semânticas; variar os limiares que definem a dimensão de cola. Além disso, pretende-se considerar a distribuição dos alunos em sala de aula como entrada para o modelo de inferência e classificação de colas desenvolvido.

Referências

[1] J. C. X. Silva, C. E. Leal, L. P. Brandão, S. M.Lanes, L. F. Barbosa, L. F. Santos, M. B. Corrêa,

P. R. Pessanha, S. R. de Azeredo, T. Fejolo, W. J. Silva, A. Alves. O Uso da Cola como Fator que Prejudica a Relação Ensino-Aprendizagem. In XVIII Simpósio Nacional de Ensino de Física, Vitória, Espírito Santo, 2009.

[2] G. A. da Silva, M. M. da Rocha, E. O., Y. L. Pereira, and V. S. R. Bussab. Um estudo sobre a

prática da cola entre universitários. Psicol. Refl. Crít., 19(1):18–24, 2006.

[3] G. Salton, A. Wong, and A. C. S. Yang. A vector space model for automatic indexing. Communications of the ACM, 18:229–237, 1975.

[4] G. Salton, C. Buckley. Term-weighting approaches in automatic text retrieval. Information

Processing and Management, 24(5):513–523, 1988.

[5] P. Soucy, G. W. Mineau. Beyond tfidf weighting for text categorization in the vector space

model. In IJCAI ’05: Proceedings of the XIX International Joint Conferences on Artificial Inteligence, páginas 1130–1135, 2005.

[6] Y. Y. Yao. Information-theoretic measures for knowledge discovery and data mining. Em Entropy Measures, Maximum Entropy Principle and Emerging Applications, páginas 115–136, 2003.

[7] C. J. V. Rijsbergen. Information Retrieval. Butterworths, 1979.

[8] M. W. Berry. Survey of Text Mining – Clustering, Classification and Retrieval, Springer, New York, 2003.

[9] S. Weiss, N. Indurkhya, T. Zhang, F. Damerau. Text Mining – Predictive Methods for Analyzing Unstructured Information. Springer, New York, 2005.

[10] S. Chapman. Simmetrics: a java & c# .net library of similarity metrics. Disponível em: http://sourceforge.net/projects/simmetrics/, Dez. 2010.

[11] W. W. Cohen, P. Ravikumar, and S. Fienberg. Secondstring: Open source java-based package of approximate string matching.

http://secondstring.sourceforge.net/, Dez. 2010.

[12] R. Feldman, J. Sanger. The Text Mining Handbook: Advanced Approaches in Analyzing Unstructured Data. Cambridge University Press, 2007.

[13] P.-N. Tan, M. Steinbach, V. Kumar. Introduction to Data Mining, 1st edition. Addison-Wesley,2006.

[14] Eclipse IDE. http://www.eclipse.org, Agosto 2010.

[15] M. F. Porter and R. Boulton. Snowball: A language for stemming algorithms.

http://snowball.tartarus.org/, 2002.

Page 149: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

[16] G. A. Miller. Wordnet: A lexical database for english. Communications of the ACM,

38(11):39–41, 1995.

[17] M. Palmira, R. Amaro, R. P. Chaves, S. Lourosa, C. Martins, S. Mendes. Rede léxico conceptual do português.

http://www.clul.ul.pt/clg/wordnetpt, Nov. 2010.

[18] Rapidminer - Open-source data mining with the java software rapidminer. http://rapidi.com/,Nov. 2010.

[19] J. L. Fleiss, B. Levin, M. C. Paik, and J. Fleiss. Statistical Methods for Rates and Proportions.

Wiley-Interscience, New York, 2003.

[20] J. R. Landis and G. G. Koch. The measurement of observer agreement for categorical data. Biometrics, 33(1):159–174, March 1977.

[21] E. A. M. Morais, Contextualização de Documentos em Domínios Representados por Ontologias Utilizando Mineração de Textos. Dissertação de Mestrado, Instituto de Informática – Universidade Federal de Goiânia, 2007.

[22] E. R. Cavalcanti, J. S. Jackson. Aplicando classificação não-supervisionada para detecção de cola em provas escolares. In Workshop Franco- Brasileiro sobre Mineração de Dados (WFB2009), Recife, Brasil, 2009.

[23] A. G. Cunha, Vocabulário Ortográfico da Língua Portuguesa, Lexikon, 2ª edição, 2009.

[24] P. Eades, C. Gutwenger, S-H Hong, P. Mutzel, Graph Drawing Algorithms. Algorithms and theory of computation handbook: special topics and techniques, 2ª edição, CRC Press, 2010.

[25] M. Rangel. O problema da cola sob a ótica das representações. Revista Brasileira de Estudos Pedagógicos, 82(200/201/202):78–88, 2001.

[26] R. Lukashenko, V. Graudina, J. Grundspenkis. Computer-Based Plagiarism Detection Methods and Tools: An Overview. In International Conference on Computer Systems and Technologies, Rousse, Bulgaria, June 14-15, vol. 285, p. 40, ACM, 2007.

[27] A. Barrón-Cedeño, P. Rosso. On Automatic Plagiarism Detection Based on n-Grams Comparison, Lecture Notes in Computer Science, Springer, 5478:686–700, 2009.

[28] S. Butakov, V. Scherbinin. The toolbox for local and global plagiarism detection. Computers & Education 52 (4), 781–788.

[29] S. F. Davis, P. F. Drinan, T. B. Gallant. Cheating in school: What we know and what we can do, 1st edition, Wiley-Blackwell, 2009.

[30] C. Guthrie. Plagiarism and cheating: A mixed methods study of student academic dishonesty. Ph.D. thesis, University of Waikato, 2009.

[31] M. A. Broeckelman-Post. Faculty and student classroom influences on academic dishonesty. Informatics in Education 51 (2), 206–211.

[32] H. J. Passow, M. J. Mayhew, C. J. Finelli, T. S. Harding, D. D. Carpenter. Factors influencing engineering students’ decisions to cheat by type of assessment. Research in Higher Education 47 (6):643–684, 2006.

[33] M. L. Kremmer, M. Brimble, P. Stevenson- Clarke. Investigating the probability of student cheating: The relevance of student characteristics, assessment items, perceptions of prevalence and history of engagement. International Journal for Educational Integrity 3(2):3–17, 2007.

[34] I. C. McManus, T. Lissauer, S. E. Williams. Detecting cheating in written medical examinations by statistical analysis of similarity of answers: pilot study. British Medical Journal 330 (7499):1064–1066, 2005.

[35] L. S. Sotaridona, W. J. van der Linden, R. R. Meijer. Detecting answer copying using the kappa statistic. Applied Psychological Measurement 30(5):412–431, 2006.

[36] L. A. van der Ark, W. H. M. Emons, K. Sijtsma. Detecting answer copying using alternate test forms and seat

Page 150: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

locations in small-scale examinations. Journal of Educational Measurement

45(2):99–117, 2008.

[37] R. DiSario, A. Olinsky, J. Quinn, P. Schumacher. Applying Monte Carlo simulation to determine the likelihood of cheating on a multiple-choice professional exam. CS-BIGS 3 (1), 30–36, 2009.

[38] D.R. White; M.S. Joy. Sentence-based natural language plagiarism detection. Journal on Educational Resources in Computing (JERIC) 4(4):1-20, 2004, ACM.

[39] Sherlock Plagiarism Detector, disponível em:

http://sydney.edu.au/engineering/it/~scilect/sherlock, Ago. 2011.

[40] URKUND, disponível em:

http://www.urkund.com, Ago. 2011.

Apêndices

A. Questões da prova

1) Conhecer a evolução de uma ciência pode ajudar a entender melhor as concepções atuais da sua teoria. Explique como as orientações da empresa para o mercado podem servir como argumentos para demonstrar como se processou a evolução do marketing.

2) A definição do negócio é uma das decisões que pode afetar consideravelmente as atividades de marketing de uma organização. Explique por que a definição de um negócio deve ser feita por mercado e não por produto.

3) O marketing tem sido descrito como ciência e também como arte. Explique como essas duas vertentes de pensamento podem ser consideradas verdadeiras.

4) Após vencer vários desafios de uma seleção profissional, restaram cinco candidatos disputando uma única vaga. A vaga em disputa era para a direção geral de uma unidade de negócio. Imagine que essa vaga pudesse ser ocupada por um profissional de administração de qualquer uma das especialidades: Marketing, Finanças, Recursos Humanos, Produção ou Informações. Coincidentemente essas eram as especialidades dos cinco candidatos restantes do concurso. Considerando que você era o candidato especialista em Marketing, explique resumidamente quais seriam as suas justificativas para ser o selecionado.

B. Grafos de similaridade

Legenda da figura 10: Grafo de similaridade para a questão 2.

Page 151: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Legenda da figura 11: Grafo de similaridade para a questão 3.

Legenda da figura 12: Grafo de similaridade para a questão.

Page 152: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Secretaria de Educação a Distância - UFSCar

BACHARELADO EM SISTEMAS DE INFORMAÇÃO

(G5)

AVALIAÇÃO PRESENCIAL

I – Identificação data: 28/09/2013Disciplina: Estruturas de Dados 2Professor(a): Fabiano Cutigi FerrariTutor(a) Virtual: Ana Eliza Pedroso da Silva e Victor Hugo Santiago Costa Pinto

II – Instruções Gerais

Valor da prova: 100 pontos

Tempo previsto para elaboração: 2,5 horas

Tolerância para atraso: 15 min

Tempo mínimo de permanência na sala: 30 min

Objetivos: Avaliar as habilidades do aluno em manipular e implementar estruturas de dados do tipo árvore binária, árvore binária de busca e árvore binária de busca balanceada.

Critérios de Avaliação: Programas implementados corretamente; exercícios resolvidos de forma completa e correta; organização das respostas em termos de apresentação e legibilidade do código e/ou textos escritos.

Orientações: A prova deverá ser preenchida a caneta azul ou preta. O valor de cada questão é apresentado junto à respectiva questão.

III – Orientações Quanto a Notação, Nomes das Variáveis, e Estruturas

• Para o desenvolvimento de algoritmos nesta prova, use preferencialmente a notação adotada nas unidades da disciplina: GetNode(variavel), FreeNode(variavel), Info(variavel), Dir(variavel), Esq(variavel) e BAL(variavel) sendo variavel uma variável do tipo ponteiro para nó (ou seja, pode ser apenas um novo nó sendo criado, ou um ponteiro para a raiz de uma ABB). Utilize uma das seguintes opções: pseudo-código, linguagem C ou linguagem C++.

• Utilize os mesmos nomes fornecidos no enunciado (R, X, Inseriu, etc.). Utilize variáveis auxiliares, temporárias, tantas quanto forem necessárias. É só declarar e usar. Mas não considere a existência de nenhuma outra variável permanente, além das definidas no enunciado.

• Considere as estruturas exatamente conforme definidas no enunciado, seja no texto da questão, seja nos diagramas.

IV – Questões

Questão 1 (30 pontos) Redesenhando a árvore a cada inserção e remoção, desenhe uma Árvore Binária de Busca Balanceada (AVL) com os números a seguir: 50, 30, 55, 10, 15, 20, 80, 90, 68. A seguir, remova os números 50 e 90. Para cada nó das árvores desenhadas, indique o fator de balanceamento. Caso seja necessário fazer o balanceamento da árvore, indique claramente a passagem na qual o balanceamento foi necessário, mostrando a versão da árvore desbalanceada e a versão obtida após o balanceamento.

Page 153: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Questão 2 (30 pontos) Considere uma Árvore Binária (AB) de raiz R implementada de forma encadeada cujos nós contêm números inteiros (ou seja, o campo Info do nó), conforme o desenho abaixo. Implemente uma função recursiva para determinar quantos nós dessa AB contém valores maiores que zero..

inteiro QuantosMaioresQueZero (parâmetro por referência R : do tipo AB ) // resultado da função é do tipo inteiro, informando a quantidade de valores maiores que zero.

2

-4 44

-5 -2 35

RR

Árvore vazia

Questão 3 (20 pontos) Explique as diferenças existentes entre uma Árvore Binária de Busca (ABB) convencional e uma Árvore Binária de Busca Balanceada (AVL). Quais são as características positivas e negativas de cada um desses tipos de árvore? Descreva uma situação em que a utilização de uma ABB é mais vantajosa do que a utilização de uma AVL. Se necessário, utilize figuras para auxiliar nas explicações.

Questão 4 (20 pontos) Considere uma Árvore Binária de Busca Balanceada (AVL) de raiz R, implementada de forma encadeada, segundo o diagrama da questão 2. Implemente uma função recursiva para determinar a altura dessa árvore.

inteiro Altura (parâmetro por referência R: do tipo AVL)// resultado da função do tipo inteiro, informando a altura da árvore

Page 154: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

BACHARELADO EM SISTEMAS DE INFORMAÇÃO – EaD UAB/UFSCar

Estrutura de Dados

Prof. Fabiano Ferrari

Unidade 15

Generalização de Listas

Nossos Objetivos nesta Unidade:

- Entender conceitos relativos a generalização de listas encadeadas: listas multilineares, listas de listas, e listas genéricas quanto ao tipo do elemento;

- Embora não tenhamos como meta implementar, nesta disciplina, estruturas utilizando todos esses conceitos, eles podem ser um ponto de partida para estudos mais aprofundados por parte dos alunos, visando seu aperfeiçoamento profissional, ou mesmo o desenvolvimento do terceiro trabalho.

Estruturas Lineares Versus Estruturas Multilineares

Até o momento as listas encadeadas que estudamos podem ser consideradas Listas Lineares, pois os elementos são organizados em uma única “linha” ou seqüência, em vermelho na Figura 15.1.

Em uma lista não linear (vamos chamar de “estrutura não linear”), ou ainda estrutura multilinear, os elementos são organizados em duas ou mais “linhas” ou seqüências. Note na Figura 15.2, em vermelho, as linhas (seqüências) em que os elementos estão organizados.

Page 155: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Essa estrutura da Figura 15.2 se chama Árvore. Vamos estudar mais detalhadamente, e implementar, estruturas do tipo Árvore nas próximas unidades.

A Figura 15.3 apresenta um outro exemplo de estrutura multilinear. É uma estrutura utilizada para implementação de Matrizes Esparsas. Uma Matriz esparsa é uma matriz (da matemática) com dimensões muito grandes (por exemplo, uma matriz com 1000 linhas por 1000 colunas), mas cuja maior parte dos elementos é zero. Os elementos não nulos são poucos, e ficam “esparsos” ou espalhados no meio da grande estrutura.

Page 156: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Em uma possível implementação de uma matriz esparsa, utilizando o conceito de listas encadeadas, armazenamos apenas os elementos não nulos. Inserimos cada um desses elementos não nulos em nós, e inserimos cada um dos nós em uma lista dos elementos não nulos da linha, e em uma lista de elementos não nulos da coluna. Ou seja, cada nó fará parte de duas listas: uma lista da linha, e uma lista da coluna. Cada nó armazenaria, dentre outras possíveis informações, o próximo elemento na linha, e o próximo elemento na coluna.

Não iremos mostrar a implementação dessa matriz esparsa nessa disciplina. Os alunos que se interessarem poderão realizar uma pesquisa bibliográfica na literatura recomendada, ou em outras fontes.

Listas de Listas, ou Listas Aninhadas

Considere, para exemplificar, um sistema de informação e controle da reserva de passagens aéreas. Considere que, para sua implementação, temos uma lista de vôos. Para cada vôo temos um nó da lista, armazenando número do vôo, hora de partida, destino, capacidade, lugares disponíveis, lista de passageiros, fila de espera (Figura 15.4).

Note na Figura 15.4 que dois campos do nó, destacados em vermelho, parecem ser campos complexos demais para estar dentro de um nó. Como podemos ter uma lista de passageiros e uma fila de espera dentro de um nó?

Ao manipular a lista de vôos, a melhor forma de tratar essa situação é considerar a lista de passageiro, e a fila de espera, como tipos abstratos de dados, e manipular essas estruturas (a lista de passageiros e a fila de espera) exclusivamente através dos seus operadores.

Page 157: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Veja no Exemplo 15.1 um algoritmo para inserir um passageiro em um determinado vôo. O sub-programa recebe como parâmetros o nome e o telefone do passageiro, e o número do vôo em que o passageiro gostaria de ser inserido. Temos uma variável local P do tipo Ponteiro_Para_Nó_da_Lista_de_Vôos. No passo 1, procuramos, na lista de vôos, o vôo identificado pelo parâmetro “Nro-Vôo”. Se encontrarmos, colocamos o ponteiro P apontando para o nó que armazena as informações do vôo em questão. No passo 2, se o campo Disponíveis do nó apontado por P for maior que zero, isso significa que o vôo em questão tem lugares disponíveis. Nesse caso, inserimos o passageiro na lista de passageiros do vôo, ou seja, na lista de passageiros que está “dentro” do nó apontado por P. Estamos fazendo referência a operação (ou método) “Insere” da lista de passageiros “dentro” do nó apontado por P em notação C++. Veja na Tabela 15.1 como ficaria a referência à lista de passageiros e à fila de espera em C, e em uma notação simplificada.

Tabela 15.1 Referência à Fila de Passageiros e à Lista de Espera em C++.

Notação Simplificada

C C++ (alternativa) Explicação

Disponível (P) *P.DisponíveisP seta para a direita

Disponíveis

Campo Disponíveis

do nó apontado por P

Lista-de-Passageiros

(P)

*P.Lista-de-

Passageiros

P seta para a direita

Lista-de-Passageiros

Campo Lista-de-

Passageiros do nó

apontado por P

Fila-de-Espera (P) *P.Fila-de-EsperaP seta para a direita

Fila-de-Espera

Campo Fila-de-

Espera do nó

apontado por P

O que é importante nesse exemplo não é exatamente a notação, mas sim o fato de que em cada nó da lista de vôos temos uma lista de passageiros e uma fila de espera, e que manipulamos essas estruturas exclusivamente através de suas operações Insere (na lista de passageiros) e Entra (na fila de espera).

Na prática, o que está acontecendo? Como fica a estrutura? Veja na Figura 15.5 que a fila de espera e a lista de passageiros não estão “dentro” do nó. Dentro do nó está só um ponteiro para a estrutura. Mas, ao manipular a lista de vôos não precisamos nos preocupar com os detalhes de implementação da fila de espera e da lista de passageiros. Simplesmente acionamos suas operações primitivas (Insere, Elimina, etc.).

Page 158: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Não teremos exercícios ou trabalhos exigindo a aplicação desse conceito – listas de listas, ou listas aninhadas. E esse conceito também não será cobrado nas provas. Esse conceito está sendo apresentado como ponto de partida para estudos mais aprofundados, visando seu aperfeiçoamento profissional.

Listas Genéricas Quanto ao Tipo do Elemento

Até o momento desenvolvemos pilhas, filas e cadastros de diversos tipos de elementos. As vezes uma pilha de números, as vezes uma pilha de pessoas, as vezes uma pilha de cartas, por exemplo. Nesses casos o funcionamento da pilha seria sempre o mesmo (empilha, desempilha, etc.), mas o tipo do elemento seria diferente. Se já temos desenvolvida uma pilha de cartas e queremos implementar uma pilha de pessoas, temos que implementar tudo novamente? Ou pelo menos copiar boa parte do código?

O conceito de herança em linguagens orientadas a objeto traz uma forma interessante de lidar com essa situação. Veja na Figura 15.6 que uma Pilha de Cartas (com o tipo do elemento) “herda” características e operações de uma pilha mais geral, sem a definição do tipo do elemento. Poderíamos fazer o mesmo para implementar uma pilha de pessoas, de números, etc.

Page 159: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Classes e Templates em C++

As linguagens de programação orientadas a objeto oferecem diversas estruturas para implementar o conceito de herança, e para implementar estruturas genéricas quanto ao tipo de elemento. No exemplo 15.2 apresentamos um trecho de código utilizando o conceito de Classe e o Conceito de Templates, em C++. A Classe Stack (Pilha) é definida, mas o tipo de elemento será definido posteriormente, no momento da criação da pilha (veja os comentários das ultimas linhas do código, em vermelho).

Exemplo 15.2 Trecho de Código Usando Classes e Templates

template <class T> // o elemento é do tipo T, que será definido posteriormente

class stack

private:

int top;

T * nodes; // o elemento é do tipo T, que será definido posteriormente

public:

stack () // construtor

int empty (void);

void push (T &); // o elemento é do tipo T, que será definido posteriormente

T pop( void) // o elemento é do tipo T, que será definido posteriormente

~stack (); // destrutor

};

...

template <class T> void Stack<T>::push(T & j);

...

Stack<char> PilhaChar; // cria uma pilha para o tipo char. Nesse caso, definimos T como Char

Stack<long double> PilhaDouble; // idem para long double

Fonte: Langsam, Y.; Tenembaum, A., et al.; “Data Structures Using C and C++”. Prentice Hall, 1996, pg. 109-115.

Não teremos exercícios ou trabalhos requerendo a aplicação desses conceitos – Classes e Templates. E esses conceitos também não serão cobrados nas provas. Mas mesmo assim recomendamos que, na medida do possível, a bibliografia seja consultada para um estudo mais aprofundado.

Page 160: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Uma Pilha de Qualquer Coisa

A solução apresentada no exemplo 15.2 nos permite definir uma estrutura (por exemplo uma pilha) genérica quanto ao tipo, e no momento de criar a estrutura indicar o tipo do elemento. Mas a partir do momento que criamos uma pilha de elementos do tipo char, só podemos inserir nessa pilha elementos do tipo char.

E se quisermos criar uma pilha genérica, na qual possamos inserir, em uma mesma pilha, elementos de qualquer tipo? Como poderíamos fazer isso?

Uma possível solução seria substituir o campo que armazena o elemento, dentro do nó, por um campo que armazena um ponteiro para o elemento. Assim o elemento em si ficaria armazenado fora do nó. Assim como uma lista de passageiros fica, no fundo, armazenada fora do nó (Figura 15.5). Além disso, poderíamos armazenar dentro do nó uma indicação do tamanho do elemento que será inserido, como mostrado na Figura 15.8. Veja também o Exemplo 15.3 um trecho de código na linguagem Pascal, implementando uma pilha de qualquer coisa.

Page 161: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Exemplo 15.3 Trecho de Código Pascal Implementando uma Pilha de Qualquer Coisa

Unit Pilha;

Interface

type StackPointer = ^StackNode;

StackNode = Record

Next : StackPointer; { próxima coisa }

BlockSize : Word; { tamanho da coisa }

Data : Pointer; { ponteiro para a coisa }

end;

Function Push( var S : StackPointer; size : word; var UserData ) : boolean;

{ S é a pilha. Size é o tamanho da coisa. UserData é a Coisa que será empilhada }

Function Pop( var S : StackPointer; MaxSize : Word; var RealSize : word; var UserData ) : boolean;

{ S é a pilha. RealSize retorna o tamanho da coisa que acabou de ser desempilhada. UserData receberá a Coisa que acabou de ser desempilhada }

Procedure Create( var s : stackPointer );

{ Cria S – uma pilha de qualquer coisa }

Function FirstItem( var S : stackPonter; var size : word; var d) : boolean;

{ primeira coisa }

Function NextItem( var S : stackPonter; var size : word; var d) : boolean;

{ próxima coisa }

Procedure Destroy( var s : stackpointer );

{ Destrói a pilha S }

...

Program..

Uses Pilha;

var S : StackPointer;

...

create( S ); { aciona a operação para criar a pilha S }

Page 162: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

...

push( S, sizeof( Cow ), Cow1 ); { empilha uma vaca na pilha S }

push( S, SizeOf( Umbrella ), Umbrela1); { empilha um guarda chuvas na pilha S }

...

Function Push( var S : StackPointer; size : word; var UserData ) : boolean;

{ implementação da operação Push. S é a pilha. Size é o tamanho da coisa. UserData é a Coisa que será empilhada }

var SP : StackPointer; { um ponteiro temporário para os nós da pilha }

DataBlock : Pointer; { um ponteiro temporário para um espaço de memória para armazenar a coisa }

begin

GetMem( DataBlock, Size ); { aloca memória para armazenar a coisa. }

Move(UserData, DataBlock^, size); { copia a coisa para o espaço de memória alocado. }

New( SP ); { aloca memória para o nó que conterá o ponteiro para a coisa, e o seu tamanho. }

SP^.BlockSize := size; { armazena no nó o tamanho da coisa. }

SP^.data := DataBlock; { armazena no nó o ponteiro para a coisa. }

SP^.Next := S; { o campo Next do nó aponta para o tipo da pilha. }

S := SP; { o topo da pilha passa a apontar para o nó recém inserido. }

push := true; { a operação deu certo ! }

end; { push }

Não teremos exercícios ou trabalhos requerendo a aplicação desse conceito – construção de uma pilha de qualquer elemento. E esse conceito também não será cobrado nas provas. Apresentamos apenas para dar uma direção inicial aos alunos que se interessarem para se aperfeiçoar nessa linha de desenvolvimento.

Page 163: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Unidade 16

Árvores Binárias de Busca – Parte 1

A Raiz de uma Árvore Fica em Cima ou Fica em Baixo?

Nossos Objetivos nesta Unidade:

- Entender o conceito, a nomenclatura e a representação usual da estrutura de armazenamento denominada Árvore;

- Entender o conceito de Árvore Binária de Busca;

- Desenvolver habilidades para a elaboração de algoritmos sobre árvores binárias de busca, e sobre árvores em geral.

Representação de Árvore

A Figura 16.1 traz a representação usual de uma estrutura de armazenamento denominada Árvore

Figura 16.1 Representação de uma Árvore

Nomenclatura Usual

· Cada árvore tem 1 nó Raiz (em marrom na Figura 16.1) e várias sub-árvores (uma das sub--árvores destacada em vermelho, na Figura 16.1);

· Cada sub-árvore também é uma árvore;

· L, M, N, E, G, H, J, K são nós Folha (ou seja, nós que não têm nenhum filho);

· Diz-se que B, C, e D são Filhos de A; diz-se também que A é Pai de B, C e D;

· O Grau de uma árvore: número máximo de sub-árvores em cada nó da árvore (neste exemplo da Figura 16.1, o grau da árvore é 3 pois o nó A, por exemplo, tem 3 filhos, e consequentemente 

Page 164: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

3 sub-árvores: B, C e D);

· A Altura de uma árvore: número de níveis da árvore (neste exemplo, da Figura 16.1, a altura da árvore é 4 pois, no nível 1 temos o nó A, no nível 2 temos B, C e D, no nível 3 temos os nõs E, F, G, H, I, J, e K, e no nível 4 temos os nós L, M e N ).

Se a Raiz é representada em cima, e se os nós Folha estão em baixo, quem elaborou essa forma de representação pensou em uma árvore de cabeça para baixo!

Definição: Árvores Binárias

Árvores Binárias são aquelas árvores com grau 2. Ou seja, nas árvores binárias, cada nó da árvore tem no máximo 2 filhos.

Figura 16.2 Representação de uma Árvore Binária

Em cada nó de uma árvore binária temos a Informação, um apontador para o Filho Direito, e um apontador para o Filho Esquerdo. Na Figura 16.2, vamos considerar o nó que está na Raiz da árvore. A Informação do nó que está na Raiz é A, o Filho Direito desse nó é o nó que contém a informação C, e o Filho Esquerdo é o nó que contém a informação B.

Implementando uma ABB Usando o Conceito de Listas Encadeadas

Basta Trocar “Círculos” por “Retângulos” :-). Veja a Figura 16.3.

Figura 16.3 Implementação de Árvores Binárias de Busca de Forma Encadeada

Page 165: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Declaração em uma Linguagem de Programação

Pascal Ctype ABB = ^node; node = record info : char; dir : ABB; esq : ABB; end; Var Raiz : ABB;

struct node { char info; struct node *dir; struct node * esq; }; typedef struct node *ABB; ABB Raiz;

Note que a Raiz é declarada como um ponteiro para nó, assim como um ponteiro para uma lista. E note que o nó tem 3 campos: Info (informação), Dir (ponteiro para o filho direito), e Esq (pontei-ro para o filho esquerdo). Como em uma lista duplamente encadeada.

Árvores Binárias de Busca - ABB

Árvores Binárias de Busca também são chamadas de Árvores Binárias de Pesquisa, e Árvores Binárias Ordenadas. Mas o nome mais comum é: Árvores Binárias de Busca ou, abreviadamente, ABBs.

Definição: Árvore Binária de Busca – ABB

Uma árvore binária com raiz R é uma ABB se:

• (1) A chave (informação) de cada nó da sub-árvore esquerda de R é menor (*) do que a chave (informação) do nó R;

• (2) A chave de cada nó da sub-árvore direita de R é maior (*) do que a chave do nó R;

• (3) As sub-árvores esquerda e direita também são ABBs.

(*) observação: “Menor” ou “Maior” em um critério de ordenação válido para a informa-ção em questão. No exemplo que estamos adotando, letras, um bom exemplo de critério seria a ordem alfabética.

A árvore apontada por R1 é uma árvore binária de busca, pois atende aos três critérios da definição.

Page 166: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

(1) Todas as chaves da sub-árvore esquerda de R1 (A, B e C) são menores que a chave da raiz R1 (D); (2) todas as chaves da sub-árvore direita de R1 (E, F e G) são maiores que a chave da raiz R2 (D); e, (3) aplicando-se essa mesma análise recursivamente para as sub-árvores esquerda e direita, os critérios continuam sendo respeitados. Note na sub-árvore esquerda de R1 que todas as chaves a esquerda de B são menores que B, e todas as chaves a direita de B são maiores que B. Na sub-árvore direita de R1, todas as chaves a esquerda de F são menores, e todas à direita são maiores. Assim, R1 é uma ABB.

A árvore R2 não é uma ABB. Você saberia dizer por que? Leia novamente a definição, prestando atenção ao critério 3. E compare as árvores R1 e R2: qual a diferença entre elas?

Todas as chaves da sub-árvore esquerda de R2 (A, B, C) são menores que a chave da raiz R2 (D); (2) todas as chaves da sub-árvore direita de R2 (E, F e G) são maiores que a chave da raiz R1 (D); mas, (3) aplicando-se essa mesma análise recursivamente para as sub-árvores esquerda e direita, os critérios serão quebrados.

Figura 16.4 R2 Não É uma ABB

Note a sub-árvore esquerda de R2, composta pelas chaves A, B e C, destacada pelo círculo ver-melho na Figura 16.4. Teste o critério (1) da definição para essa sub-árvore destacada pelo círculo vermelho. Nessa sub-árvore, que também é uma árvore, todas as chaves a esquerda de A são me-nores que A? Não, pois B está à esquerda de A e B é maior que A. Isso quebra o critério. Assim, podemos concluir que R2 não é uma ABB.

Revisão Sobre Algoritmos Recursivos

Diz-se que um sub-programa é recursivo quando ele faz chamadas a ele mesmo.

Dica para a Solução de Problemas Recursivos

Para resolver um problema recursivamente, precisamos identificar os casos em que conseguimos dar a resposta ao problema de imediato, resolvendo de vez o problema, e os casos em que não conseguimos resolver de imediato. Nos casos que não conseguimos resolver de imediato, preci-samos decompor o problema em problemas menores, nos aproximando da solução. Em outras palavras, quando não conseguimos resolver o problema de imediato, “empurramos com a barriga”, e deixamos para resolver o problema em um outro momento, fazendo uma chamada recursiva.

Exemplo 16.1 Fatorial

Fatorial de N é N vezes N-1 vezes N-2 vezes N-3 (etc., até 1). Por exemplo, fatorial de 3 é 3X2X1 = 6. Fatorial de 4 é 4 x 3 x 2 x 1 = 24. Podemos calcular o Fatorial de um número N de outras formas. Mas vamos calcular o Fatorial(N) recursivamente, para revisar ou aprender?

Page 167: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Definição Recursiva de Fatorial

• Fatorial de 0 é 1

• Fatorial de N é N * fatorial (N - 1)

Note que na primeira linha da definição de Fatorial, conseguimos resolver o problema em definitivo. Quando N é zero, a resposta é 1, e o problema está resolvido. Mas quando N é diferente de zero, não conseguimos dar a resposta de imediato. Então “empurramos com a barriga”, ou seja, decom-pomos o problema em problemas menores, para serem resolvidos em um segundo momento, em uma chamada recursiva.

Uma solução recursiva para o cálculo do Fatorial(N) é apresentada na Tabela 16.1. Note que o subprograma Fat chama ele mesmo. Isso é recursividade.

Pascal Cfunction fat( n : integer ) : integer; begin if n = o then fat := 1 else fat := n * fat (n - 1); end;

int fat( int n){ if (n==0) return (1); else return (n * fat (n-1) );}

Tabela 16.1 Solução Recursiva para Fatorial(N)

Execução do Algoritmo Recursivo para Cálculo do Fatorial( N )

A Figura 16.5 apresenta a execução do algoritmo recursivo para cálculo do Fatorial de N, para uma chamada onde o valor de N é 3.

Figura 16.5 Execução do Fatorial ( 3 )

Na primeira chamada não conseguimos dar a resposta de imediato, mas conseguimos decompor o problema. A resposta da chamada 1 será N x Fatorial ( N-1 ), ou seja 3 x Fatorial ( 2 ). O resultado final desta primeira chamada ficará pendente, aguardando o resultado da segunda chamada. Na 

Page 168: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

segunda chamada, o N é 2. Também não conseguimos dar o resultado de imediato. O resultado será N x Fatorial ( N-1 ), ou seja, 2 x Fatorial ( 1 ). Na terceira chamada o resultado será 1 x Fatorial ( 0 ). Na quarta chamada o N é 0. E para N = 0 conseguimos dar uma resposta definitiva. Na quarta chamada, concluímos que Fatorial( 0 ) = 1.

De posse do resultado da quarta chamada, agora sim conseguimos calcular o resultado da terceira chamada, e depois da segunda, e depois da primeira chamada. Veja a Figura 16.6.

Figura 16.6 Continuação da Execução do Fatorial ( 3 )

Simulação da Execução do Exemplo 16.1 – Fatorial - ouvir o áudio que está no ambiente.

Algoritmo de Busca em uma Árvore Binárias de Busca

Queremos saber se uma chave X está na árvore R. Lembrando que se trata de uma Árvore Binária de Busca, ou seja, todas as chaves a esquerda da Raiz são menores, e todas as da direita são maiores, isso nos dá uma boa ajuda para a busca, não dá?

Considere por exemplo que o valor de X é 39. Podemos ter 4 situações para X e R (Figura 16.7). No caso 1, estamos querendo saber se a chave X está em uma árvore vazia. Essa situação conse-guimos resolver: X não está em uma árvore vazia.

Figura 16.7 Quatro Casos para Busca em ABB

No caso 2, estamos procurando X na árvore R, e sabemos que Info(R)=X. Ou seja, achamos X na árvore. Essa situação também sabemos resolver de imediato.

No caso 3, sabemos que Info(R)>X. O que fazemos nesse caso? Temos como saber se X está ou não na árvore nesse momento?

Vamos resolver esse problema recursivamente. Será bem mais simples assim. Assim como no Exemplo 16.1, Fatorial, achamos 2 situações em que conseguimos resolver o problema definitiva-mente (casos 1 e 2), e achamos também as situações em que vamos decompor o problema em um problema menor, através de uma chamada recursiva. No caso 3, onde Info(R)>X não sabemos ainda se X está na árvore, mas temos certeza de uma coisa: se X estiver na árvore, estará na

Page 169: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

sub-árvore esquerda de R. Por que? Porque em uma árvore binária de busca, todas as chaves na sub-árvore direita da raiz, são maiores que a chave da raiz. E nosso X é 39, menor do que Info(R) que é 50. Logo, se estiver na árvore, X estará na sub-árvore esquerda. No caso 4, analogamente, também não temos certeza se X está ou não na árvore. Mas de uma coisa temos certeza: se X estiver na árvore, estará na sub-árvore direita de R.

Resumo dos Casos

1 Árvore Vazia X não está na árvore, e acaba o algoritmo.2 X = Info(R) X está na árvore, e acaba o algoritmo.3 Info(R1) > X X PODE ESTAR na sub-árvore esquerda de R. O

algoritmo não acaba ainda. Fazemos uma chamada recursiva.

4 Info(R) < X X PODE ESTAR na sub-árvore direita de R. O algoritmo não acaba ainda. Fazemos uma chamada recursiva.

Tabela 16.2 Resumo dos Casos para Busca de X em uma ABB R

Algoritmo 16.1 Está_Na_Árvore?

Boolean Está_na_Árvore(variável por referência R tipo ABB, variável X tipo Inteiro)

// verifica se a chave X está ou não na árvore R.

// O resultado é do tipo verdadeiro (está na árvore) ou falso.

Se R = Null

Então Retorne Falso // caso 1 a árvore é vazia; X não está na ABB; acabou o algoritmo

Senão Se X = Info(R)

Então Retorne Verdadeiro // caso 2: X está na árvore, acabou o algoritmo

Senão Se Info(R)> X

Então Retorne ( Está_Na_Árvore(Esq(R), X ) )

// retorna o resultado da chamada recursiva, para a busca de X na

// sub-árvore esquerda de R (caso 3)

Senão Retorne ( Está_Na_Árvore(Dir(R), X ) )

// retorna o resultado da chamada recursiva, para a busca de X na

// sub-árvore direita de R (caso 4)

Execução

Considere que X = 39 e a árvore seja a árvore da Figura 16.8. Na primeira chamada caímos no caso 3 (veja Tabela 16.2), ou seja Info(R)>X. Assim fazemos uma chamada recursiva para a busca de X na sub-arvore esquerda de R.

Page 170: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 16.8 Árvore para Busca de X = 39

Entramos, então, na segunda chamada. Nosso R agora aponta para o nó cujo valor da chave é 28, em azul na Figura 16.8. Nessa segunda chamada, caímos no caso 4, pois Info(R)<X. Fazemos en-tão uma chamada recursiva para a busca de X na sub-árvore direita de R. Na terceira chamada caí-mos no caso 2 (X = Info(R) ). O resultado é Verdadeiro (ou seja, X está na lista), e encerramos a ter-ceira chamada. Ao encerrar a terceira chamada, voltamos para a segunda chamada, no ponto onde foi feita a chamada recursiva. Ou seja, o resultado do comando “Retorne ( Está_Na_Árvore(Dir(R), X ) )” será “Retorne( Verdadeiro)”, haja visto que o resultado da 3ª chamada foi “verdadeiro”. Ana-logamente, o resultado verdadeiro vai também para a primeira chamada, encerrando a execução.

Figura 16.9 Execução da Busca de X na Árvore R

Simulação da execução da busca de X na árvore R - ouvir o áudio que está no ambien-te.

Exercício 16.2 Imprimir

Imprimir(por referência R do tipo ABB)

// operação para imprimir a informação de cada nó da árvore R

// dica: primeiramente, faça uma tabela de casos, como a Tabela 16.2

//

Exercício 16.3 Imprimir em Ordem Crescente

Imprimir(por referência R do tipo ABB)

// operação para imprimir a informação de cada nó da árvore R, em ordem crescente

Page 171: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

// dica: primeiramente, faça uma tabela de casos, como a Tabela 16.2

Exercício 16.4 Imprimir em Ordem Decrescente

Imprimir(por referência R do tipo ABB)

// operação para imprimir a informação de cada nó da árvore R, em ordem decrescente

// dica: primeiramente, faça uma tabela de casos, como a Tabela 16.2

Solução para Exercícios 16.2, 16.3 e 16.4 (NÃO CONSULTE ANTES DE TENTAR FAZER!)

16.2 Imprimir todas as chaves da árvore R

Imprime( por referência R tipo ABB )

Se R <> Null

então Escreve( Info( R ) ) // imprime a chave da raiz com printf, ou outro comando

Imprime( Esq( r ) ) // imprime todas as chaves da sub-árvore esquerda

Imprime( Dir( r ) ) // imprime todas as chaves da sub-árvore direita

Observação: Esse tipo de varredura dos nós de uma árvore se chama “Pré-Ordem” (processamos primeiramente a raiz, e depois as sub-árvores. Quando processamos primeiros as sub-árvores e depois a raiz, o nome do percurso é “pós-ordem”. Existem outras formas de expressar a ordem de processamento dos nós como, por exemplo: r-e-d (raiz, sub-árvore esquerda, sub-árvore direita).

16.3 imprimir em ordem crescente.

Observação: Basta imprimir primeiramente todas as chaves da sub-árvore esquerda, depois imprimir a chave da raiz, e depois imprimir as chaves da sub-arvore direita. Esse tipo de percurso dos nós de uma árvore se chama “In--Ordem” - raiz no meio (in) das sub-árvores.

Imprime( por referência R tipo ABB )

Se R <> Null

então Imprime( Esq( r ) ) // imprime todas as chaves da sub-árvore esquerda

Escreve( Info( R ) ) // printf, ou outro comando

Imprime( Dir( r ) ) // imprime todas as chaves da sub-árvore direita

16.4 imprimir em ordem decrescente.

Observação: Basta imprimir primeiramente todas as chaves da sub-árvore direita, depois imprimir a chave da raiz, e depois imprimir as chaves da sub-arvore esquerda.

Imprime( por referência R tipo ABB )

Se R <> Null

então Imprime( Dir( r ) ) // imprime todas as chaves da sub-árvore esquerda

Escreve( Info( R ) ) // printf, ou outro comando

Imprime( Esq( r ) ) // imprime todas as chaves da sub-árvore direita

Execução de 16.2, 16.3 e 16.4

Considerando a árvore abaixo...

Page 172: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

A execução de 16.2 resultará na impressão de: B, A, C

A execução de 16.3 resultará na impressão de: A, B, C

A execução de 16.4 resultará na impressão de: C, B, A

Exercícios de Fixação (Algumas Respostas na Unidade 21)

1- Dada a árvore do diagrama acima, indique...

• os nós folha

• o grau da árvore

• o altura da árvore

• os descendentes do nó H

2- ENADE 2005 questão 39b. Descreva a ordem de visita para uma varredura em pré-ordem (r-e-d, ou pré-fixada à esquerda) na árvore acima.

3- Duas árvores binárias (ABs) são SIMILARES se possuem a mesma distribuição de nós (independente dos valores nos mesmos). Em uma definição mais formal, duas ABs são SIMILARES se são ambas vazias, ou se são ambas não vazias e suas sub-árvores esquerdas são similares, e suas sub-árvores direitas também são similares. Implemente a função:

SIMILARES ( por referência A1, A2 : do tipo AB ) : resultado do tipo boolean.

Page 173: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

4- Duas ABs são IGUAIS se são ambas vazias, ou se armazenam valores iguais em suas raizes, e suas sub-árvores esquerdas são iguais, e suas sub-árvores direitas são iguais. Implemente a função:

IGUAIS ( por referência A1, A2 : do tipo AB ) : resultado do tipo boolean.

5- Uma AB é estritamente binária se todos os nós da árvore tem 0 filhos ou 2 filhos. Implemente uma função que veri-fica se uma ABB é estritamente binária:

ESTRITAMENTE_BINÁRIA(por referência A1 : do tipo AB ) : resultado do tipo boolean.

6- Implemente uma função para testar se uma árvore binária AB é uma ABB.

É_ABB? (por referência A : do tipo AB ) : resultado do tipo boolean.

7- Implemente uma função para determinar a altura de uma AB.

altura(por referência A : do tipo AB ) : resultado do tipo Inteiro.

8- Implemente uma função para determinar a soma dos valores de todos os nós de uma árvore binária com valores inteiros.

Inteiro Soma (por referência A : do tipo AB )

// resultado da função é do tipo inteiro

9- Implemente uma função para determinar quantos nós de uma árvore binária com valores inteiros são maiores que zero.

Inteiro QuantosMaioresQueZero (por referência A : do tipo AB )

// resultado da função é do tipo inteiro

10- Implemente uma função para contar quantos nós de uma árvore binária têm um único filho.

Inteiro QuantosNósCom1ÚnicoFilho (por referência A : do tipo AB )

// resultado da função é do tipo inteiro

ATENÇÃO: O CONTEÚDO SOBRE ÁRVORES CONTINUARÁ NAS UNIDADES 17 E 20.

Page 174: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Unidade 17

Árvores Binárias de Busca – Parte 2

Motivação, Algoritmos de Manipulação e Aplicações.

Nossos objetivos nesta unidade:

- Entender a motivação para o uso de Árvores Binárias de Busca no armazenamento temporário de informações; entender as situações em que seu uso é pertinente;

- Desenvolver habilidades para a elaboração de algoritmos para manipulação de árvores binárias de busca – insere e remove;

- Conhecer algumas das aplicações do conceito de Árvore.

Por que uma ABB é boa?

Considere um Sistema de Votação por Telefone, como em programas de TV em que o telespecta-dor decide o final:

• Cada número de telefone só pode votar uma vez;

• Um sistema de informação deve armazenar todos os números que já ligaram;

• A cada nova ligação, deve-se consultar o sistema para verificar se aquele número já votou; o voto é computado apenas se o número ainda não votou;

• A votação deve ter resultado ao vivo, ou seja, instantâneo.

Imagine que estamos utilizando uma ABB para armazenar os números de telefone que já votaram:

• Cada número de telefone é armazenado em um nó da ABB;

• Suponha que em um determinado momento, a ABB tenha 1 milhão de telefones armazena-dos, ou seja 1 milhão de nós;

• Surge nova ligação e é preciso saber se o número está ou não na árvore; ou seja, se aquele número já votou ou não;

• Quantos nós da ABB eu tenho que visitar, no máximo, para saber se o telefone que está ligando no momento está ou não na árvore?

Page 175: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Exercício 17.1 Quantos nós de uma árvore binária de busca precisamos visitar, no máximo, para encontrar 1 chave dentre 1 milhão de chaves armazenadas? Revise o algoritmo de bus-ca em uma ABB, estudado na Unidade 16, e faça este exercício, antes de continuar.

Possível Solução para o Exercício 17.1

Considere uma ABB com chaves uniformemente distribuídas, como na Figura 17.1.

Figura 17.1 Níveis de uma Árvore Binária de Busca

No nível 1 cabe 1 único elemento. E temos que visitar no máximo 1 nó (o nó do nível 1) para saber se um elemento X está ou não na árvore. Do nível 1 ao nível 2 cabem 3 elementos. E tenho que visitar no máximo 2 nós para saber se uma chave X está ou não na árvore. Isso porque, ao chegar ao nível 1, visito o nó e, se a chave X que procuro for menor que a informação da raiz, por exem-plo, devo continuar procurando no nível 2 apenas na sub-árvore esquerda. Lembra do algoritmo de busca em uma ABB? Do nível 1 ao nível 3 cabem 7 elementos. Quantos nós tenho que visitar, no máximo, para saber se X está ou não na ABB? Três visitas, no máximo. Do nível 1 ao nível 4, 4 visitas no máximo e cabem 15 elementos. Do 1 ao 5, 5 visitas no máximo e cabem 31 elementos.

Quantos elementos cabem em uma ABB de N níveis? Quantos níveis são necessários para arma-zenar 1 milhão de elementos em uma ABB?

Veja na Tabela 17.1 que uma ABB com 20 níveis pode abrigar, aproximadamente, 1 milhão de ele-mentos. Em 30 níveis, 1 trilhão, em 40 níveis, 1 trilhão, e assim por diante. Em N níveis, cabem ((2 elevado a N) – 1) elementos.

Níveis Quantos cabem

1 12 33 74 155 31n 2n - 110 102313 819216 6553618 26214420 1 milhão30 1 bilhão40 1 trilhão

Tabela 17.1 Quantos Elementos Cabem um uma ABB?

Page 176: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Ou seja, se uma ABB uniformemente distribuída, conforme a Figura 17.1, tiver 20 níveis e 1 milhão de elementos é possível saber se um elemento X está ou não na ABB, visitando no máximo 20 nós. Em 20 nós visitados, encontramos X entre 1 milhão de elementos. Isso é uma boa performance, não é?

Uma ABB é boa porque permite consultas rápidas! Agilidade em consultas. Essa é a moti-vação para uso de Árvores Binárias de Busca.

Algoritmos Sobre Árvores Binárias de Busca: Insere

Considere a ABB da Figura 17.2. Em que lugar da árvore podemos inserir a chave S? E a chave B? E a chave N?

Figura 17.2 Onde Inserir S, B e N?

Lembre-se que temos um critério a respeitar (chaves menores que a informação da raiz devem ficar a esquerda, etc.). S é maior que M, logo, deve ir à direita. Também é maior que R, logo, deve ir à direita. S é menor que T, logo, deve ir à esquerda. Achamos o lugar!

A esquerda do nó que contém a informação T. Esse é o único lugar da árvore em que S pode ser inserido sem que o critério que define uma ABB seja quebrado. Analogamente, B deve ser inserido a esquerda do nó que contém a informação D. E N deve ser inserido a esquerda do nó que contém a informação P.

Estratégia Geral para o Algoritmo Insere:

• Inserir os elementos como nós folha (sem filhos);

• Procura o lugar certo (sem quebrar o critério ABB), e então insere; o algoritmo para procurar do lugar certo é muito parecido com o algoritmo de busca;

Algoritmo 17.1 Insere

Considere que queremos inserir X=39 na ABB R. Veja na Figura 17.3, 4 possíveis situações para X e R. No caso 1, estamos querendo inserir X em uma árvore vazia; Onde inserimos? Qual o lugar ideal para inserir X=39 em uma árvore vazia? Se a árvore estiver vazia, inserimos na raiz mesmo! A raiz R passará a apontar para o único nó da ABB, e o valor armazenado nesse nó será X=39. Essa situação, conseguimos resolver: se a árvore estiver vazia, insere X na raiz!

Page 177: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 17.3 Quatro Casos para Inserção em ABB

No caso 2, estamos querendo inserir X=39 na árvore R, e logo na raiz, achamos o 39. Ou seja, Info(R) =X. Como não podemos ter 2 chaves iguais na árvore, essa situação também sabemos resolver de imediato: simplesmente não inserimos X=39 na árvore.

No caso 3, sabemos que Info(R) >X. O que fazemos nesse caso? Temos como saber se X está ou não na árvore nesse momento?

Vamos resolver esse problema recursivamente, como no Exemplo 16.1, Fatorial, e como no Algo-ritmo de Busca em ABB, achamos 2 situações em que conseguimos resolver o problema definiti-vamente (casos 1 e 2), e achamos também as situações em que vamos decompor o problema em um problema menor, através de uma chamada recursiva. No caso 3, onde Info(R) >X não sabemos ainda em que lugar da árvore vamos inserir X, mas temos certeza de uma coisa: X deve ser in-serido na sub-árvore esquerda de R. Por que? Porque em uma árvore binária de busca, todas as chaves na sub-árvore direita da raiz, são maiores que a chave da raiz. E nosso X é 39, menor do que Info(R) que é 50. Logo, X deve ser inserido na sub-árvore esquerda.

No caso 4, analogamente, também não sabemos ainda o lugar exato para inserir X. Mas de uma coisa temos certeza: X deve ser inserido na sub-árvore direita de R.

Resumo dos Casos

1 Árvore Vazia Insere X na raiz, e acaba o algoritmo.2 X = Info(R) X já está na árvore. Não insere, e acaba o algoritmo.3 Info(R) > X X deve ser inserido na sub-árvore esquerda de R. O algoritmo

não acaba ainda. Fazemos uma chamada recursiva4 Info(R) < X X deve ser inserido na sub-árvore direita de R. O algoritmo não

acaba ainda. Fazemos uma chamada recursiva

Tabela 17.2 Resumo dos Casos para Inserção de X em uma ABB R

Algoritmo Insere

Insere (por referência R tipo ABB, X tipo Elemento, por referência Erro tipo boolean)

// insere a chave X na árvore R. Erro retornará verdadeiro se já existir X em R

Se R = Null

Então // Caso 1: Achou o lugar! Insere! Fim do algoritmo

Page 178: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

P = GetNode

Info ( P ) = X

Dir ( P ) = Null

Esq ( P ) = Null

R = P

Erro = Falso

Senão Se X = Info(R)

Então Erro = Verdadeiro // caso 2: X já está na árvore, acabou o algoritmo

Senão Se Info(R)> X

Então Insere (Esq(R), X, Erro)

// caso 3 – chamada recursiva.

// Insere X na sub-árvore esquerda de R

Senão Insere(Dir(R), X, Erro

// caso 4 – chamada recursiva.

// Insere X na sub-árvore direita de R

Execução

Considere que X = 39 e a árvore seja a árvore da Figura 17.4. Na primeira chamada caímos no caso 3 (veja Tabela 17.2), ou seja, Info(R)>X. Assim fazemos uma chamada recursiva para inserir X na sub-árvore esquerda de R.

Page 179: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 17.4 Árvore para Inserção de X = 39

Entramos, então, na segunda chamada. Nosso R agora aponta para o nó cujo valor da chave é 28, em azul na Figura 17.4. Nessa segunda chamada, caímos no caso 4, pois Info(R)<X. Fazemos então uma chamada recursiva para a busca de X na sub árvore direita de R. Na terceira chamada caímos no caso 1 (R = Null). Então inserimos X=39 aí mesmo. Note que X=39 ficará na raiz, mas na raiz da 3ª chamada recursiva. Note também que, como R é um parâmetro por referência, vamos atualizar o valor de Dir(R2), ou seja, o valor do campo Dir do R da 2ª chamada. Antes da inserção de 39, Dir(R2) apontava para Null. Após a inserção, Dir(R2) apontará para o nó que contém o valor 39. Ao encerrar a terceira chamada, voltamos para a segunda chamada, no ponto onde foi feita a chamada recursiva. Ou seja, no comando “Insere(Dir(R), X, Erro)”. Erro retornará Falso, pois a in-serção de X, na terceira chamada, foi bem sucedida. Analogamente, o resultado Falso vai também para a primeira chamada, encerrando a execução.

Figura 17.5 Execução da Inserção de X na Árvore R

Algoritmos Sobre Árvores Binárias de Busca: Remove

Considere a ABB da Figura 17.6. Como podemos remover a chave T? E a chave C? E a chave K?

Page 180: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 17.6 Remover T, C e K

Para remover a chave T, simplesmente eliminamos o nó que contém T, e a direita do nó que contém P passa a apontar para Null. Foi fácil porque o nó que queríamos remover não tinha nenhum filho. Esse é o caso 1.

No caso 2, queremos remover C, e C tem um filho. Podemos simplesmente remover C e “puxar” o filho não nulo de C (o nó que contém o valor A)? Sim, podemos! Lembre-se que temos um critério a respeitar (chaves menores que a informação da raiz devem ficar a esquerda, etc). Mas A é menor que E, e o critério continuará sendo respeitado.

No caso 3 queremos remover k. e K tem 2 filhos. E agora? O que você sugere?

Exercício 17.2 O que fazer quando queremos remover um nó com 2 filhos? Lembre-se que temos um critério a respeitar (chaves menores que a informação da raiz devem ficar a es-querda, etc.).

Quais chaves, da Figura 17.6, podemos colocar no lugar da chave K, na raiz, sem que o critério seja desrespeitado? Pense um pouco...

Podemos substituir K por G e por M sem quebrar o critério. Por quê? Olhe na figura 17.6.

G é a maior chave da sub-árvore esquerda. Logo, se colocarmos G no lugar de K, podemos ter certeza de que na sub-arvore esquerda não haverá nenhuma chave maior que G. Analogamente, M é a menor chave da sub-arvore direita. Se colocarmos M no lugar de K, podemos ter a certeza de que não haverá na sub-árvore direita nenhuma chave menor que M.

Se substituirmos K por G, por exemplo, a árvore não poderá ficar com duas chaves de valor G. Para resolver essa situação, basta remover o G que está lá em baixo. O G que está na raiz, permane-cerá.

Assim, removemos K da árvore, sem movimentar as sub-árvores, e sem quebrar o critério ABB.

Estratégia Geral para o Algoritmo Remove:

• Caso 1: remover nós sem filhos: remove, e aponta R para Null;

Page 181: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

• Caso 2: Remover nós com 1 único filho: “puxa” o filho não nulo;

• Caso 3: Remover nós com 2 filhos: Substitui o valor que está sendo removido (no exemplo, K) pela maior chave da sub-árvore esquerda, e depois remove a chave repetida lá de baixo.

Exercício 17.3 Remove

Reveja os algoritmos Busca em ABB, e insere, e elabore o Remove. Assim como fizemos no Bus-ca e no Insere, primeiramente faça desenhos para as principais situações (arvore vazia, etc.) Só então escreva o código. Temos uma resposta no final da unidade. Mas não olhe a resposta antes de tentar fazer.

Remove (por referência R tipo ABB, por referencia X tipo Elemento, por referência Erro tipo boole-an)

// Remove a chave X da árvore R. Erro retornará verdadeiro X não estiver em R

Algumas Aplicações de Árvores

Árvores Binárias de Busca com Chave e Outras Informações no Nó

Nos exemplos e algoritmos que estudamos até aqui, para simplificação, cada nó da ABB abrigava apenas a informação que era a chave de busca. Mas podemos inserir no nó, além da chave de busca, outras informações. Por exemplo, na Figura 17.7 temos como chave de busca o nome, e além do nome, temos o telefone da pessoa. Assim, a ABB pode ser utilizada para armazenar tem-porariamente – nesse exemplo – o telefone de cada pessoa. Qual é o telefone do Cristopher? Acha o Cristopher na ABB, e então acha o telefone dele.

Figura 17.7

Page 182: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 17.8 Índices para Arquivos

Game Trees

Na Figura 17.8 temos, na raiz, uma situação inicial de um jogo da velha. A partir dessa situação inicial temos 2 possíveis jogadas para o jogador do Círculo. E essas duas possíveis jogadas estão representadas no nível 2 da árvore. A partir da situação mais a esquerda do nível 2, temos 4 possí-veis jogadas (no nível 3), e assim por diante.

Figura 17.9 Game Trees

Árvores desse tipo servem primeiramente para simular as jogadas futuras. E depois, para ajudar um software-jogador a escolher qual a melhor jogada. O raciocínio é mais ou menos o seguinte: “se vou para a esquerda, tenho alguma chance de vencer?

Tenho mais chance de vencer indo para a esquerda ou indo para a direita?”

Em um jogo da velha essa aplicação pode não parecer muito interessante, mas pense em xadrez. Alguns dos simuladores deixam você escolher a quantidade de jogadas que o software deve pre-ver: 5 jogadas a frente, 6, 7... Quanto mais jogadas a frente o software prever, mais difícil é ganhar

Page 183: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

do software-jogador.

B-Trees

Nas árvores binárias de busca, temos uma única chave em cada nó. Em uma B-Tree, temos várias chaves em cada nó. Olhe a B-Tree da Figura 17.10 e tente imaginar como seria a busca em uma árvore como essa. Queremos achar a chave de número 100. O nó que está na raiz não contém a chave 100. Onde continuamos a busca?

Figura 17.10 B-Trees

Continuamos a busca na sub-arvore apontada pela seta vermelha, pois 100 está entre os valores 80 e 120. Se estivéssemos buscando a chave 75, menor que 80, continuaríamos a busca na sub--árvore apontada pela seta azul.

Quad-Trees

Em uma quad-tree, dividimos a imagem em quatro quadrantes: q1, q2, q3 e 14. Q1 é homogêneo cinza. Armazenamos essa informação em um nó, e não armazenamos mais nada com relação a q1. Analogamente, q4 é homogêneo branco. Armazenamos essa informação em um nó, e não ar-mazenamos mais nada com relação à q4.

Figura 17.11 Quad-Trees

Mas q2 e q3 são heterogêneos. Então subdividimos (recursivamente!) q2 e q3, gerando para cada um deles, mais 4 nós.

Quad-Trees servem para compressão de imagens, e para agilização do processamento de ope-rações sobre imagens. Existem diversas variações desse tipo de estrutura, para manipulação de imagens e vídeos.

Page 184: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Exercícios de Fixação

1. ENADE 2005. Considerando que a árvore acima represente uma ABB, (considerando tam-bém a aplicação dos algoritmos para ABB estudados na disciplina), desenhe a nova árvore que será obtida após a realização das seguintes operações: inserir 21, remover 41, inserir 48.

2. Dada uma ABB inicialmente vazia, insira (E DESENHE) os seguintes elementos (nessa or-dem): M, F, S, D, J, P, U, A, E, H, Q, T, W, K.

3. Dada uma ABB inicialmente vazia, insira (E DESENHE) os seguintes elementos (nessa or-dem): A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z.

Solução de Exercícios

Possível solução ao Exercício 17.3 Remove

Remove (por referência R tipo ABB, por referencia X tipo Elemento, por referência Erro tipo boole-an)

// Remove a chave X da árvore R. Erro retornará verdadeiro X não estiver em R

variável Aux tipo ABB

Se R = Null

então Erro = Verdadeiro

senão Se Info( R ) = X

então ...... { remove efetivamente... a seguir}

senão se X > info( R )

então remove( Dir( R ), X, Erro)

senão remove( Esq( R ), X, Erro)

fim

Page 185: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

{ estudo para o “remove efetivamente”

caso 1 ( remover T ): o nó a ser removido ( R ) não tem filhos

• remove o nó

• R = Null

caso 2 ( remover C ): o nó a ser removido tem 1 único filho

• remove o nó

• R passa a apontar para o filho não nulo, ou seja, “puxa” o filho não nulo para o lugar do pai

caso 3 ( remover K ): o nó a ser removido tem 2 filhos

· acha a maior chave da sub-árvore esquerda (vamos chamar esse cara de “maior”)

· atualiza o valor de info( R ) com o valor de “maior”

· chama recursivamente remove, para retirar a chave repetida, da sub-árvore esquerda de R

}

{remove efetivamente – início}

aux = R

se Esq( R ) = Null E Dir( R ) = Null { caso 1: nenhum filho }

então FreeNode( Aux )

R = Null

senão se dir( R ) <> Null E esq( R ) <> Null { caso 3: com dois filhos }

então info( R ) = maior( esq( R ) ) { função Maior implementada a seguir }

remove( esq(R), info( R), Erro) { remove a chave repetida da sub-árvore esquerda}

senão se esq( R ) = Null { caso 2: 1 único filho }

então R = dir( R ) { puxa o filho direito }

senão R = esq( R ) { puxa o esquerdo }

FreeNode( aux )

Erro = Falso

{remove efetivamente – fim}

função maior( A tipo ABB ) resultado tipo Elemento

Enquanto dir( A ) <> Null faça

A = dir( A )

Retorne Info( A )

Page 186: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Unidade 20

Árvores Binárias de BuscaBalanceadas

Você já fez papel de árvore, em uma peça de teatro?

Nossos Objetivos nesta unidade:

• Entender o conceito de balanceamento, e sua importância para a eficiência das árvores binárias de busca;

• Entender a lógica do processo de balanceamento de uma árvore binária de busca;

• Desenvolver habilidade para adaptar a lógica do balanceamento a novas situações, e para a elaboração de algoritmos sobre árvores binárias de busca balanceadas.

Problema com Árvores Binárias de Busca – ABBs

Exercício 20.1

a) Dada uma ABB inicialmente vazia, insira (desenhe) os seguintes elementos (nessa ordem): M, F, S, D, J, P, U.

Exercício 20.2

a) Dada uma ABB inicialmente vazia, insira (desenhe) os seguintes elementos (nessa ordem): A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z.

Comparando as soluções para os exercícios 20.1 e 20.2, percebemos que as árvores resultantes são totalmente diferentes. Veja na Figura 20.1. ABB 1 é a árvore resultante do proposto no Exercício 20.1, e ABB 2 a árvore resultante do proposto no Exercício 20.2.

Page 187: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 20.1 Duas possíveis árvores binárias de busca

As árvores ABB 1 e ABB 2 da Figura 20.1 ilustram um problema com relação a árvores binárias de busca: dependendo da ordem de inserção dos elementos, as árvores podem ficar equilibradas, como a ABB 1, ou to-talmente desequilibradas, como a ABB 2. Por árvore “equilibrada” entendemos uma árvore com os tamanhos de suas subárvores esquerda e direita equivalentes.

Estudamos um pouco sobre a eficiência de árvores binárias de busca na Unidade 17, chegando à seguinte conclusão:

“Ou seja, se uma ABB uniformemente distribuída, conforme a Figura 17.1, tiver 20 níveis, e 1 mi-lhão de elementos, é possível saber se um elemento X está ou não na ABB visitando, no máximo, 20 nós. Em 20 nós visitados, encontramos X entre 1 milhão de elementos. Isso é uma boa performance, não é?”.

Note que essa conclusão sobre a eficiência de uma árvore binária de busca faz a ressalva “uma ABB unifor-memente distribuída”. Como a ABB 1 da Figura 20.1 é uniformemente distribuída, teremos nela a eficiência esperada. Mas a árvore ABB 2 da Figura 20.1 não é uniformemente distribuída. É uma árvore desequilibrada ou desbalanceada. O lado direito é enorme e o lado esquerdo não existe. Logo, devido a esse desequilíbrio, não terá a mesma eficiência que a ABB 1. Na verdade, se uma árvore como a ABB 2 tiver 1 milhão de elementos, é possível que tenhamos que visitar exatamente 1 milhão de nós para ter a certeza de que uma chave X está ou não na árvore. Em uma árvore balanceada, como a ABB 1, teríamos que visitar no máximo 20 nós para encontrar X entre 1 milhão de elementos. Que diferença de eficiência!

Definição de ABBs Balanceadas

Uma árvore binária de busca é dita balanceada (ou ABBB ou ainda árvore AVL) se, e somente se, para cada nó as alturas de suas subárvores diferem de, no máximo, 1.

Estratégia: alterar os algoritmos de inserir e remover de modo a manter a ABB sempre balanceada.

Lógica de Balanceamento

Os algoritmos sobre árvores binárias de busca precisam ser ajustados para primeiramente monitorar o ba-lanceamento da árvore, verificando se em um dado momento a árvore está ou não balanceada. E precisam também ser adaptados para tomar atitudes corretivas, caso a árvore estiver se tornando desbalanceada.

Monitoramento do Balanceamento

Page 188: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Seja uma árvore R com subárvores E (esquerda) e D (direita), com alturas He e Hd, respectivamente. Se um novo elemento é inserido em E, causando um aumento na altura He, três casos podem ocorrer (Tabela 20.1):

Antes da inserção Consequênciasse He = Hd E e D passarão a ter alturas diferentes (E

será maior em 1), mas o critério de balance-amento não é violado (diferença das alturas pode ser no máximo 1).

se He < Hd (em 1) E e D passarão a ter alturas iguais, e o crité-rio não é violado.

se He > Hd (em 1) E passará a ser maior que D em 2, o que viola o critério à a árvore precisa ser ajus-tada.

Tabela 20.1 Monitoramento do balanceamento

Se antes da inserção as alturas das subárvores esquerda e direita eram iguais, após a inserção He será maior que Hd em 1. Mas o critério de balanceamento não será quebrado, pois, pela definição de árvore balanceada, a diferença das alturas das subárvores pode ser no máximo 1.

Se antes da inserção He era menor que Hd em 1, após a inserção He será igual a Hd. O critério de balancea-mento também não será quebrado nesse caso.

Mas se antes da inserção He era maior que Hd em 1, após a inserção He será maior que Hd em 2. O critério de balanceamento, nesse caso, é violado, ou seja, a inserção de um elemento está causando um desbalanceamento na árvore.

Exercício 20.3 Considere a árvore da figura e verifique:

A inserção da chave 25 causaria desbalanceamento?

A inserção da chave 40 causaria desbalanceamento (considere a árvore como mostra a figura, sem a chave 25)?

A inserção da chave 9 causaria desbalanceamento (considere a árvore como mostra a figura, sem as chaves 25 e 40)?

A inserção da chave 13 causaria desbalanceamento (considere a árvore como mostra a figura, sem as chaves 9, 25 e 40)?

Page 189: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

A inserção da chave 17 causaria desbalanceamento (considere a árvore como mostra a figura, sem as chaves 9, 13, 25 e 40)?

A inserção da chave 21 causaria desbalanceamento (considere a árvore como mostra a figura, sem as chaves 9, 13, 17, 25 e 40)?

A inserção das chaves 25 ou 40 não causariam desbalanceamento, pois seriam inseridas logo abaixo do nó de valor 29. Na verdade a árvore ficaria até mais equilibrada.

Já as inserções das chaves 9, 13, 17 ou 21 causariam sim desbalanceamento, pois seriam inseridas logo abaixo dos nós de valor 12 ou 19, aumentando o tamanho da subárvore esquerda de R. Como a subárvore esquerda de R já era maior que a direita antes da inserção, com a inserção das novas chaves o critério de balanceamento será violado.

Quando uma árvore é desbalanceada, precisamos ajustá-la para que volte a ser balanceada. Chamamos a esse processo: rebalanceamento.

Processo de Rebalanceamento – Casos do Algoritmo Insere

Caso 1: Rotação Simples Esquerda-Esquerda do Insere

A Figura 20.2 mostra um primeiro exemplo do caso 1 de rebalanceamento: rotação simples esquerda-esquerda. A chave 12 acabou de ser inserida, o que causou desbalanceamento na árvore. A altura da subárvore esquerda é 2 e a altura da subárvore direita é zero. A diferença das alturas acaba sendo 2, o que quebra o critério. Como essa árvore pode ser rebalanceada? Pense! Como essa árvore poderia ser ajustada, de modo a ficar balanceada?

Figura 20.2 Exemplo de Rotação Simples Esquerda-Esquerda (do Insere)

Exercício 20.4 Nova Árvore

Desenhe uma nova árvore, resultante do rebalanceamento da árvore da Figura 20.2. A nova árvore deve ser uma árvore binária de busca e deve ser balanceada.

A Figura 20.3 mostra a árvore Ra rebalanceada, passando a ter agora a chave de valor 15 na raiz

Page 190: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 20.3 Árvore Rebalanceada

Você consegue achar outra configuração para uma árvore com essas mesmas 3 chaves, que respeite o cri-tério de uma árvore binária de busca (chaves na subárvore esquerda da raiz devem ser menores, chaves na subárvore direita devem ser maiores que a chave na raiz) e também o critério de balanceamento (a diferença das alturas das subárvores deve ser, no máximo 1)? Tente achar outra configuração!

Não há outra configuração que atenda ambos os critérios. Ou seja, a lógica de balanceamento, nesse exemplo, é bastante simples. Lembre-se desse exemplo com apenas 3 chaves, sempre que estiver em dúvida quanto ao que ocorre no caso 1 de rebalanceamento – rotação simples esquerda-esquerda.

Segundo Exemplo

Temos um segundo exemplo da rotação simples esquerda-esquerda na Figura 20.4. A chave de valor 9, em vermelho, acabou de ser inserida, causando desbalanceamento. A altura da subárvore esquerda de Rb é 3 (3 níveis) e a altura da subárvore direita de Rb é 1 (1 nível). A diferença entre a altura das subárvores é 2, o que viola o critério de balanceamento.

Figura 20.4 Rotação Simples Esquerda-Esquerda (Insere) – Segundo Exemplo

Note que as mesmas chaves do exemplo anterior foram mantidas (em azul) e na mesma posição. Logo, a ló-gica do rebalanceamento será a mesma. A posição dessas 3 chaves após o rebalanceamento será a mesma do exemplo anterior. Lembre-se disso: quando estiver em dúvida, pense em uma árvore com apenas 3 chaves.

Exercício 20.5 Desenhe uma Nova Árvore

Desenhe uma nova árvore, resultante do rebalanceamento da árvore da Figura 20.4. A nova árvore deve ser uma árvore binária de busca e deve ser balanceada. Não olhe a resposta no texto a seguir. Procure desenhar você mesmo a nova árvore antes de prosseguir a leitura.

Page 191: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 20.5 Primeiro Passo: Posicionar a Raiz e as Chaves Direita e Esquerda

Note na Figura 20.5 que as chaves 15, 12 e 23 estão em posição idêntica à posição da solução do Exercício 20.4 (árvore com apenas essas 3 chaves). Esse é o primeiro passo em um processo de rebalanceamento: posi-cionar a nova raiz e as duas chaves que vêm logo abaixo da raiz, à direita e à esquerda.

Como Identificar as 3 Chaves Principais?

Para identificar essas 3 chaves, primeiramente responda à seguinte pergunta: a partir de qual chave foi detec-tado o desbalanceamento? Olhe a Figura 20.4 e pense um pouco!

Neste segundo exemplo, da Figura 20.4, o desbalanceamento foi detectado na chave 23. A subárvore direita de 23 tem tamanho 1, e a subárvore esquerda de 23 tem tamanho 3 (3 menos 1 = 2, o que quebra o critério de balanceamento). Se mais que um nó estiver desbalanceado, escolha o nó “mais em baixo”, ou seja, mais próximo da posição de inserção.

Após identificar em qual nó ocorreu o desbalanceamento, para identificar as outras 2 chaves principais, siga, na árvore, a partir do nó desbalanceado, em direção à chave que acabou de ser inserida e causou o desbalan-ceamento. O caminho será para a esquerda, e depois para a esquerda novamente. É por isso que o nome desse primeiro caso de rebalanceamento é Rotação Simples Esquerda-Esquerda. Ao seguir para a esquerda-esquer-da, passará pelos 2 nós que devem se juntar ao nó desbalanceado. São esses os 3 nós principais do processo de rebalanceamento.

Posicionando as 3 chaves Principais

Uma vez identificadas as 3 chaves principais, basta posicioná-las na única posição possível que mantém o critério de árvore binária de busca e também o critério de balanceamento. Se tiver alguma dúvida sobre isso, consulte o Exercício 20.4.

Posicionando as Demais Chaves

Para posicionar as demais chaves da árvore – 9, 19 e 29 - é preciso seguir o critério que define uma Árvore Binária de Busca (chaves menores a esquerda da raiz, chaves maiores à direita). Vamos posicionar a chave 9. Considerando que as chaves 12, 15 e 23 já estão posicionadas segundo mostra a Figura 20.5, em qual lugar deve ser posicionada a chave 9, de modo a respeitar o critério que define uma árvore binária de busca?

A única posição possível para a chave 9 é à esquerda da chave 12, pois 9 é menor do que 12. Se o 9 ficasse à direita do 12, quebraria o critério. Se ficasse abaixo do 23 (seja a esquerda ou a direita), estaria à direita do 15, o que também quebraria o critério.

Page 192: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 20.6 Posicionando a chave 9

Falta ainda posicionar as chaves 19 e 29. Seguindo o mesmo raciocínio que utilizamos para posicionar a cha-ve 9, qual o único lugar no qual podemos posicionar a chave 19 sem quebrar a definição de árvore binária de busca? E a chave 29? A única solução possível é posicionar o 19 à esquerda do 23 e o 29 à direita do 23 (veja a Figura 20.7). Não há outra posição possível sem quebrar o critério. Essa é a lógica do balanceamento.

Figura 20.7 Posicionando as chaves 19 e 29

Exercício 20.6 Desenhe a Nova Árvore EE do Insere

Desenhe a nova árvore, resultante do rebalanceamento da árvore das figuras fornecidas. Considere que a chave que acabou de ser inserida está indicada em vermelho. A nova árvore deve ser uma árvore binária de busca e deve ser balanceada. Identifique a chave na qual ocorreu o desbalanceamento, identifique as 3 chaves princi-pais, posicione-as, e então, posicione as demais chaves.

A)

Page 193: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

B)

C)

D)

Após desenhar as árvores resultantes, consulte comentários e solução parcial na Unidade 21. Em especial sua resposta ao item D merece ser conferida.

Generalização do Caso 1: Rotação Simples Esquerda-Esquerda (Insere)

Note na Figura 20.8 que a altura da subárvore S1 é igual à altura da subárvore S2 e também igual à altura da subárvore S3. Ou seja, H(s1) = H(s2) = H(s3).

Page 194: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Vamos definir um novo campo para cada nó da árvore – o campo BAL, que armazena o Fator de Balancea-mento do nó. O Fator de Balanceamento de um nó é definido pela diferença entre as alturas das subárvores direita e esquerda do nó. Ou seja, BAL = Hd – He. Para atender o critério de balanceamento, o campo BAL po-derá assumir os valores -1, 0 e +1. Na Figura 20.8 o BAL do nó A antes da inserção de X tinha o valor 0 (zero), pois a altura das subárvores esquerda e direita são iguais. Após a inserção de X o BAL do nó A passa a ser -1, pois He de A será maior que Hd de A em 1. Mas mesmo com a inserção de X, o nó A continua balanceado.

Considere agora o nó B (estamos ajustando os BALs da árvore “de baixo para cima”, após a inserção na nova chave). O nó B tinha BAL -1 antes da inserção de X. Ou seja, a subárvore esquerda de B já era maior, em 1, que a subárvore direita. Com a inserção de X em S1, a diferença de altura das subárvores será 2, o que quebra o critério de balanceamento. Ou seja, será preciso rebalancear a árvore.

Figura 20.8 Rotação Simples EE do Insere (1) – Estilo de diagramação baseado em apostila organizada por Heloisa da A. C. Scarpeli, publicada pelo Departamento de Computação da Universidade Federal de São Carlos, em data desconhecida.

O rebalanceamento no diagrama da Figura 20.8 reflete exatamente o rebalanceamento dos exemplos numéri-cos das Figuras 20.2 e 20.3 e também do exemplo seguinte – Figuras 20.4 a 20.7. No exemplo das Figuras 20.2 e 20.3, o nó 23 equivale ao nó A do diagrama da Figura 20.8 e o nó 15 equivale ao nó B. Procure identificar a equivalência da movimentação nas Figuras 20.2 e 20.3, com a movimentação na Figura 20.8.

Após o rebalanceamento, a altura total da árvore é a mesma altura que a árvore tinha antes da inserção da chave X, ou seja, H(S1) + 2.

O Algoritmo 20.1 descreve os passos para o rebalanceamento, caso rotação simples esquerda-esquerda (EE do Insere):

filho = esq( R ) { A }

esq( R ) = dir( filho ) { S2 }

dir( filho ) = R { B }

BAL( R ) = 0

BAL( filho ) = 0

Page 195: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

mudou-altura = false

R = filho { A }

Algoritmo 20.1 Rotação Simples EE (do Insere)

Caso 1´: Rotação Simples Direita-Direita (Insere)

A Rotação simples direita-direita, ou DD, é simétrica à rotação simples EE. Na Figura 20.9 temos o caso com apenas 3 elementos. À esquerda a situação inicial, e à direita, a árvore após o rebalanceamento.

Figura 20.9 Exemplo de Rotação Simples Direita-Direita (Insere)

Exercício 20.7 Caso DD do Insere – Desenhe Nova Árvore

Desenhe a nova árvore, resultante do rebalanceamento da árvore das figuras fornecidas. Considere que a chave que acabou de ser inserida está indicada em vermelho. A nova árvore deve ser uma árvore binária de busca e deve ser balanceada. Identifique a chave na qual ocorreu o desbalanceamento (não se esqueça de procurá-la “de baixo para cima”, a partir da chave inserida), identifique as outras 2 chaves principais, posicione-as, e só então posicione as demais chaves. Em todas as situações, o caso de rebalanceamento é a rotação simples DD.

A)

Page 196: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

B)

C)

D)

Page 197: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Após desenhar as árvores resultantes, consulte comentários e solução parcial na Unidade 21. Em especial sua resposta ao item D merece ser conferida.

Generalização do Caso 1´: Rotação Simples Direita-Direita do Insere

A generalização do Caso 1´- Rotação Simples Direita-Direita, ou DD, é apresentada na Figura 20.10.

CASO 1´: rotação simples DD (simétrico ao caso 1 - rotação simples EE)

Figura 20.10 Rotação Simples Direita-Direita (DD do Insere)

Exercício 20.8 Lado Direito

Reveja o algoritmo 20.1 (Rotação Simples EE) e, com base no diagrama da Figura 20.10, faça o algoritmo para a Rotação Simples DD. Resposta na Unidade 21.

Caso 2: Rotação Dupla Esquerda-Direira (ED do Insere)

A Figura 20.11 mostra um primeiro exemplo do caso 2 de rebalanceamento: rotação dupla esquerda-direita (ED).

Page 198: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 20.11 Exemplo de Rotação Dupla Esquerda-Direita do Insere

A chave 19 acabou de ser inserida, o que causou desbalanceamento na árvore. A altura da subárvore esquerda (de 23) é 2, e a altura da subárvore direita é zero. A diferença das alturas acaba sendo 2, o que quebra o critério de balanceamento. Como essa árvore pode ser rebalanceada? Pense! Como essa árvore poderia ser ajustada, de modo a ficar balanceada?

Exercício 20.9 Desenhe uma Nova Árvore

Desenhe uma nova árvore, resultante do rebalanceamento da árvore da Figura 20.11. A nova árvore deve ser uma árvore binária de busca, e deve ser balanceada.

A Figura 20.12 mostra a árvore Ra rebalanceada, passando a ter agora a chave de valor 19 na raiz.

Figura 20.12 Árvore rebalanceada

Você consegue achar outra configuração para uma árvore com essas mesmas 3 chaves, que respeite o cri-tério de uma árvore binária de busca (chaves na subárvore esquerda da raiz devem ser menores, chaves na subárvore direita devem ser maiores que a chave na raiz) e também o critério de balanceamento (a diferença das alturas das subárvores deve ser, no máximo 1)? Tente achar outra configuração!

Não há outra configuração que atenda ambos os critérios. Lembre-se desse exemplo com apenas 3 chaves, sempre que estiver em dúvida quanto ao que ocorre no caso 2 de rebalanceamento – rotação dupla esquerda--direita.

Page 199: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Segundo Exemplo

Temos um segundo exemplo da rotação dupla esquerda-direita na Figura 20.13. A chave de valor 17, em vermelho, acabou de ser inserida, causando desbalanceamento. A altura da subárvore esquerda de Rb é 3 (3 níveis) e a altura da subárvore direita de Rb é 1 (1 nível). A diferença entre a altura das subárvores é 2, o que viola o critério de balanceamento.

Figura 20.13 Rotação Dupla Esquerda-Direita (Insere) - Segundo Exemplo

Note que as mesmas chaves do exemplo anterior foram mantidas (em azul) e na mesma posição. Logo, a ló-gica do rebalanceamento será a mesma. A posição dessas 3 chaves após o rebalanceamento será a mesma do exemplo anterior. Lembre-se disso: quando estiver em dúvida, pense em uma árvore com apenas 3 chaves.

Exercício 20.10 Desenhe a Nova Árvore

Desenhe uma nova árvore, resultante do rebalanceamento da árvore da Figura 20.13. A nova árvore deve ser uma árvore binária de busca e deve ser balanceada. Não olhe a resposta no texto a seguir. Procure desenhar você mesmo a nova árvore antes de prosseguir a leitura.

Figura 20.14 Primeiro Passo: Posicionar a Raiz e as Chaves Direita e Esquerda

Note na Figura 20.14 que as chaves 15, 19 e 23 estão em posição idêntica à posição da solução do Exercício 20.9 (árvore com apenas essas 3 chaves). Esse é o primeiro passo em um processo de rebalanceamento: posi-cionar a nova raiz e as duas chaves que vêm logo abaixo da raiz, à direita e à esquerda.

Page 200: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Como Identificar as 3 Chaves Principais?

Para identificar essas 3 chaves primeiramente responda à seguinte pergunta: a partir de qual chave foi detecta-do o desbalanceamento? Olhe a Figura 20.13 e pense um pouco!

Neste segundo exemplo, da Figura 20.13, o desbalanceamento foi detectado na chave 23. A subárvore direita de 23 tem tamanho 1 e a subárvore esquerda de 23 tem tamanho 3 (3 menos 1 = 2, o que quebra o critério de balanceamento). Se mais que um nó estiver desbalanceado, escolha o nó “mais em baixo”, ou seja, mais próximo da posição de inserção.

Após identificar em qual chave ocorreu o desbalanceamento, para identificar as outras 2 chaves principais, siga na árvore em direção à chave que acabou de ser inserida e causou o desbalanceamento. O caminho será para a esquerda, e depois para a direita. É por isso que o nome desse caso de rebalanceamento é Rotação Du-pla Esquerda-Direita (ED). Ao seguir para a esquerda-direita, passará pelos 2 nós que devem se juntar ao nó desbalanceado. São esses os 3 nós principais do processo de rebalanceamento.

Posicionando as 3 chaves Principais

Uma vez identificadas as 3 chaves principais, basta posicioná-las na única posição possível que mantém o critério de árvore binária de busca, e também o critério de balanceamento.

Posicionando as Demais Chaves

Para posicionar as demais chaves da árvore – 12, 17 e 29 - é preciso seguir o critério que define uma Árvore Binária de Busca: chaves menores a esquerda da raiz, chaves maiores à direita. O resultado está na Figura 20.15.

Figura 20.15 Posicionando as Demais Chaves

Exercício 20.11 Exemplos do Caso ED do Insere

Desenhe a nova árvore resultante do rebalanceamento da árvore das figuras fornecidas. Considere que a chave que acabou de ser inserida está indicada em vermelho. A nova árvore deve ser uma árvore binária de busca e deve ser balanceada. Identifique a chave na qual ocorreu o desbalanceamento, identifique as 3 chaves princi-pais, posicione-as, e então posicione as demais chaves.

Page 201: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

A)

B)

C)

Page 202: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

D)

Após desenhar as árvores resultantes, consulte comentários e a solução parcial na Unidade 21.

Generalização do Caso 2: Rotação Dupla Esquerda-Direita do Insere

Note na Figura 20.16 que a altura da subárvore S1 é igual à altura da subárvore S4. A altura da subárvore S2 é igual à altura da subárvore S3. E S1 e S4 são maiores que S2 e S3 em 1.

Ocorre a inserção de X1 ou X2 na árvore. Atenção: apenas X1 ou X2 e inserido; nunca os 2 ao mesmo tempo. O BAL do nó B antes da inserção de X1 ou X2 tinha o valor 0 (zero), pois a altura das subárvores esquerda e direita eram iguais. Após a inserção de X1 o BAL do nó B passaria a ser -1. Se a inserção for de X2, o BAL do nó B passaria a ser +1. O BAL do nó A antes da inserção de X1 ou X2 era zero e passa a ser +1 após a inserção de X1 ou X2. O BAL do nó C era -1. Após a inserção de X1 ou X2, passaria a ser -2, quebrando o critério de balanceamento. É preciso rebalancear.

A Figura 20.17 apresenta a árvore rebalanceada, segundo o caso rotação dupla ED. O rebalanceamento refle-te exatamente o rebalanceamento dos exemplos numéricos das Figuras 20.11 e 20.12 e também do exemplo seguinte – Figuras 20.13 a 20.15. No exemplo das Figuras 20.11 e 20.12, os nós 23, 15 e 19 refletem, respec-tivamente, a posição dos nós C, A e B na Figura 20.16.

Note que após o rebalanceamento, a altura total da árvore é a mesma da altura total da árvore antes da inserção da chave X1 ou X2, ou seja, H(S1) + 2. E após o rebalanceamento, o BAL do novo R é igual a zero. Os valores dos demais BALs dependem se o elemento inserido foi X1 ou X2.

Page 203: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 20.16 Caso 2 ED – Antes de Rebalancear (ED do Insere)

Figura 20.17 Caso 2 ED – Depois de Rebalancear (ED do Insere)

Algoritmo para rotação dupla ED do Insere

filho = esq( R ) { A }

neto = dir( filho ) { B }

dir( filho ) = esq( neto ) { S2 }

esq( neto ) = filho { A }

Page 204: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

esq( R ) = dir( neto ) { S3 }

dir( neto ) = R { C }

{ algoritmo já executou, recursivamente, em neto e em filho, ajustando seus balanceamentos, e agora está ajustando o BAL de R }

Caso BAL( neto) for

-1 : BAL( R ) = 1 { inseriu X1 }

BAL( filho ) = 0

+1 : BAL( R ) = O { inseriu X2 }

BAL( filho ) = -1

0 : BAL( R ) = 0

BAL (filho ) = 0 { inseriu o próprio B }

R = neto

BAL ( R ) = 0 { balanceamento da nova raiz é sempre 0 }

mudou-altura = false

Algoritmo 20.2 Rotação Dupla Esquerda-Direita (ED do Insere)

Exercício 20.12 Identifique exemplos, faça diagramas e o algoritmo de rebalanceamento para o caso DE, ou seja, rotação dupla direita-esquerda, caso simétrico à rotação dupla esquerda-direita. Resposta parcial na Unidade 21.

Exercício 20.13 Perguntas

Suponha que para os casos estudados R seja na verdade uma subárvore e que a raiz verdadeira seja outra, identificada por RV. Suponha também que, após inserir um elemento e rebalancear a subárvore R, a altura de R não muda (isso ocorre em todos os casos de rebalanceamento vistos até o momento).

• Pergunta 1. Existe o risco de essa inserção desbalancear RV? Por quê?

• Pergunta 2. Terei que me preocupar em ajustar os BALs do resto da árvore (a porção entre R e RV)? Por quê?

Page 205: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Algoritmo Insere para Árvores Balanceadas

O algoritmo Insere para Árvores Binárias de Busca não balanceadas é a base para o algoritmo para árvores balanceadas. Cada nó da árvore deve ter um campo a mais, o BAL, que armazena o fator de balanceamento de cada nó da árvore.

insere( x : char, referência R : ABBB; referência MudouAltura : booleano )

variáveis filho, neto : ABBB;

se R == null

então getnode( R )

info( R ) = x

dir( R ) = null

esq( R ) = null

BAL( R ) = 0

MudouAltura = true

senão se x < info( R )

então insere( x, esq( R ), MudouAltura )

se MudouAltura { se mudou altura, verifica o balanceamento }

então caso BAL( R ) for igual a...

1 BAL( R ) = 0

MudouAltura = false

0 BAL( R ) = -1 { MudouAltura continua true }

-1 filho = esq( R ) { cresceu a esquerda, que já estava.. } se BAL( filho ) = -1 { ...grande => precisa rebalancear ! } então ROTAÇÃO SIMPLES EE (do Insere) senão ROTAÇÃO DUPLA ED (do Insere)

senão se x > info( R )

Page 206: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

então insere( x, dir( R ), MudouAltura )

se MudouAltura

então caso BAL( R ) for igual a...

-1 BAL( R ) = 0

MudouAltura = false

0 BAL( R ) = 1

1 filho = dir( R )

se BAL( filho ) = 1 então ROTAÇÃO SIMPLES DD (do Insere)

senão ROTAÇÃO DUPLA DE (do Insere)

senão MudouAltura = false { não insere pois x já está na árvore }

Algoritmo 20.3 Insere para Árvores Balanceadas

Algoritmo Remove para Árvores Balanceadas

Os casos de rebalanceamento para o algoritmo Remove são muito parecidos com os casos utilizados na in-serção: EE, DD, ED e DE. A movimentação dos nós será exatamente como nos casos de rebalanceamento da inserção. Mas o ajuste dos BALs será um pouco diferente e a altura da árvore poderá mudar em alguns casos, mesmo após o rebalanceamento.

Casos de Rebalanceamento do Remove – Caso EE

Exercício 20.14 Aplicar Caso EE do Remove

As árvores abaixo indicam um nó que acabou de ser eliminado. Aplique o caso de rebalanceamento EE: mo-vimente os nós, desenhe a nova árvore e coloque o valor do BAL de cada nó antes e depois de rebalancear. Verifique se a altura da árvore mudou após a eliminação e rebalanceamento. Faça como no modelo - item (a). Respostas parciais na Unidade 21.

Page 207: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

A)

B)

C)

Page 208: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

D)

Generalização do Caso EE do Remove

Dividimos a generalização do caso EE do Remove em dois subcasos, para mostrar algumas diferenças. No item (a) e no item (b) do Exercício 20.14, o BAL do Filho do nó que desbalanceou (desbalanceou = 23, filho = 15) é -1. Já nos itens (c) e (d), o BAL do Filho (15) é zero. Nos casos em que o BAL do Filho é -1, a altura da árvore muda; nos casos em que o BAL do Filho é zero a altura da árvore não muda. Veja nas Figuras 20.18 e 20.19 a generalização desses dois subcasos de balanceamento EE do remove. Os Algoritmos 20.4 e 20.5 indicam os passos utilizados para implementar a operação de balanceamento.

Figura 20.18 EE do Remove Quando BAL do Filho = -1

ALGORITMO { EE Remove quando bal( filho ) = -1 }

Filho =esq( R )

SE Bal( Filho ) = -1

ENTÃO { início }

Page 209: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Esq( R ) =dir ( filho )

Dir ( filho ) =R

Bal ( filho ) =0

Bal ( R ) =0

{ mudou altura continua true }

{ fim }

Algoritmo 20.4 EE do Remove Quando BAL do Filho = -1

Figura 20.19 EE do Remove Quando BAL do Filho = 0

ALGORITMO { EE Remove quando bal( filho ) = 0 }

Filho =esq( R )

SE Bal( Filho ) = 0

ENTÃO { início }

Esq( R ) =dir ( filho )

Dir ( filho ) =R

Bal ( filho ) =+1

Bal ( R ) =-1

Page 210: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

MudouAltura =false

{ fim }

Algoritmo 20.5 EE do Remove Quando BAL do Filho = 0

Exercício 20.15 Aplicar Algoritmos 20.4 ou 20.5

Aplique o Algoritmo 20.4 ou o Algoritmo 20.5 nos E=exemplos do Exercício 20.14 e desenhe passo a passo a sua execução.

Casos de Rebalanceamento do Remove – Caso ED

Já tratamos os casos em que o BAL do Filho (esquerdo) do nó que desbalanceou é -1 ou 0 (zero). Note nos exemplos do exercício 20.15 que o BAL do Filho é +1. Quando o BAL do filho for +1, aplicaremos o caso ED do remove.

Exercício 20.16 Aplicar Caso ED do Remove

As árvores abaixo indicam um nó que acabou de ser eliminado. Aplique o caso de rebalanceamento ED: mo-vimente os nós, desenhe a nova árvore e coloque o valor do BAL de cada nó antes e depois de rebalancear. Verifique se a altura da árvore mudou após a eliminação e rebalanceamento. Faça como no modelo - item (a). Respostas parciais na Unidade 21.

A)

Page 211: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

B)

C)

D)

Page 212: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Figura 20.20 Rebalanceamento ED do Remove

ALGORITMO { ED do Remove }

Filho =esq( R )

Neto =dir ( Filho)

Esq( r ) =Dir ( Neto )

Dir ( Neto ) =R

Dir ( Filho ) =esq ( Neto )

Esq ( Neto ) =Filho

Caso Bal (neto) for

0 : bal ( R ) =0

bal ( filho ) =0

bal ( neto ) =0

+1 bal ( r ) =0

bal ( filho ) =-1

Page 213: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

bal ( neto ) =0

-1 bal ( r ) =+1

bal ( filho ) =0

bal ( neto ) =0

MudouAltura =True

R =Neto

Algoritmo 20.6 Rebalanceamento ED do Remove

Exercício 20.17 Fazer os Casos Simétricos – Lado Direito

Fizemos os casos EE e ED do remove. Os casos DD e DE são simétricos. Faça os casos DD e DE do Remove. Identifique casos – por exemplo, faça os diagramas de generalização e os algoritmos.

Exercício 20.18 Algoritmo Remove para Árvore Balanceada

Ajuste o algoritmo remove para Árvore Binária de Busca (Unidade 17), garantindo agora que a árvore perma-necerá balanceada. Não se esqueça de que em cada nó agora temos um campo BAL. Não se esqueça também que é importante saber se em uma operação de remoção a altura da árvore mudou. Sugestão de resposta na Unidade 21.

Exercício 20.19 Implemente uma Árvore Balanceada

Implemente uma Árvore Binária de Busca Balanceada.

Page 214: Algoritmos Recursivos - FAI-UFSCar · Algoritmos Recursivos Prof. Fabiano Cutigi Ferrari Objetivos desta Unidade: Aprender o conceito de algoritmos recursivos e as técnicas necessárias

Comentário sobre a solução do Exercício 20.6 - Nova Árvore EE do Insere

A) 11 na raiz

B) 15 na raiz

C) 15 na raiz

D) Note que o nó 23 não está desbalanceado. O nó que desbalanceou com a inserção da chave 10 foi o nó 15. Logo, as 3 chaves principais são 15, 12 e 10, e a nova árvore está desenhada na figura abaixo. Para identificar o nó que desba-lanceou, siga “de baixo para cima”, a partir da chave que acabou de ser inserida. Considere a primeira chave que achar desbalanceada, nesse caminho “de baixo para cima”.

Comentário sobre a solução do Exercício 20.7 - Nova Árvore DD do Insere

A) 41 na raiz

B) 65 na raiz

C) 95 na raiz

D) Note que o nó 83 não está desbalanceado. O nó que desbalanceou com a inserção da chave 110 foi o nó 95. Logo, as 3 chaves principais são 95, 102 e 100, e a nova árvore está desenhada na figura abaixo. Para identificar o nó que desbalanceou, siga “de baixo para cima”, a partir da chave que acabou de ser inserida. Considere a primeira chave que achar desbalanceada, nesse caminho “de baixo para cima”.