Professional Documents
Culture Documents
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Estruturas de Dados
rvores Binrias de Pesquisa
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Dicionrio
Denio Um Dicionrio um tipo abstrato de dados para pesquisa. usado para recuperar informao a partir de uma grande massa de informao previamente armazenada A informao dividida em registros Cada registro possui uma chave a ser usada na pesquisa O objetivo da pesquisa encontrar uma ou mais ocorrncias de registros com chaves iguais chave de pesquisa Pesquisa com sucesso x Pesquisa sem sucesso
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Dicionrio
Operaes principais: Inicializar Pesquisar Inserir Retirar Outras operaes: Ordenar Unir ...
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Dicionrio
Estruturas mais utilizadas para implementar o TAD Dicionrio: lista (arranjo) rvore binria de pesquisa tabela hash A escolha da estrutura de dados e do mtodo de pesquisa associado dependem principalmente: da quantidade de dados envolvidos da frequncia de inseres e retiradas
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Pesquisa sequencial
Mtodo de pesquisa mais simples a partir do primeiro registro, pesquise sequencialmente at encontrar a chave procurada; ento pare.
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Operao P ESQUISAR int Pesquisar(TipoDicionario T, TipoChave x) { for(int i=1; i<=T.tamanho; i++) if (T.item[i].chave == x) return i; //Pesquisa com sucesso return 0; //Pesquisa sem sucesso }
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Pesquisa com sucesso: melhor caso: C (n) = 1 pior caso: C (n) = n caso mdio: C (n) = (n + 1)/2 Pesquisa sem sucesso: C (n) = n
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Pesquisa sequencial
Note que a complexidade a mesma se a pesquisa for feita de trs pra frente int Pesquisar(TipoDicionario T, TipoChave x) { for(int i=T.tamanho; i>0; i--) if (T.item[i].chave == x) return i; //Pesquisa com sucesso return 0; //Pesquisa sem sucesso }
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Pesquisa sequencial
int Pesquisar(TipoDicionario T, TipoChave x) { for(int i=T.tamanho; i>0 && T.item[i].chave!=x; i--); return i; }
Obs.: a pesquisa para no ndice 0 ou ao encontrar um item com a chave.
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Pesquisa sequencial
A pesquisa sequencial a melhor escolha para um dicionrio com poucos itens Note que o cdigo mostrado no suporta pesquisa por mais de uma ocorrncia... ...se for necessrio tal tipo de pesquisa, pode-se incluir um argumento a mais, para conter o ndice a partir do qual se quer pesquisar. Para encontrar outra ocorrncia, refazer a pesquisa a partir do item seguinte ao ltimo encontrado.
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Pesquisa binria
A pesquisa numa lista pode ser mais eciente se os itens forem mantidos em ordem Para pesquisar uma chave na lista: Compare a chave com a do item presente no meio da lista Se a chave menor ento pesquise na 1a metade da lista Se a chave maior ento pesquise na 2a metade da lista Repita o processo at encontrar a chave, ou car apenas um item e sua chave for diferente da pesquisada
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Exerccio #1 :D
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Pesquisa binria
Complexidade melhor caso: C (n) = 1 pior caso: C (n) = log n caso mdio: C (n) log n Em comparao com a pesquisa sequencial: Complexidade bem menor no pior caso e caso mdio Porm, o custo para manter o dicionrio ordenado alto... ... Insero e retirada podem causar movimentao de muitos itens (n no pior caso) Ento no deve ser usada em aplicaes muito dinmicas
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
rvore
rvore uma estrutura de dados muito eciente para armazenar informao. Adequada quando necessrio considerar todos ou uma combinao de: Acesso direto e sequencial ecientes Facilidade de insero e de retirada de itens Boa taxa de utilizao de memria Para cada item acima, existe uma estrutura mais eciente, porm com pior desempenho nas demais. A rvore apresenta um bom compromisso de todos os itens.
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
rvore
Denio Uma rvore coleo nita de n nodos (n 0). Se n = 0 dizemos que a rvore nula. Seno, a rvore possui: um nodo especial, chamado raiz uma partio dos demais nodos em T1 , T2 , . . . , Tk subrvores disjuntas
Obs.: note que todo nodo de uma rvore raiz de alguma subrvore. note ainda que cada subrvore Ti uma rvore, a denio recursiva!
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
rvore
** Desenho
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
rvore
Terminologia: grau de um nodo grau de uma rvore folha lho/pai ancestral/descendente nvel de um nodo altura de uma rvore
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
rvore
Uma rvore estabelece uma relao hierrquica entre os itens uma estrutura bastante usada em cincia da computao organizao de informaes em bancos de dados estrutura sinttica de programas fontes em compiladores tcnicas backtracking e branch-and-bound e muitas outras aplicaes entre elas, estrutura de dados eciente para dicionrios com grande volume de dados
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
rvore binria
Denio Uma rvore binria um rvore que pode ser nula ou ento possuir: um nodo especial, chamado raiz uma partio dos demais nodos em T1 e T2 , duas rvores binrias disjuntas denominadas subrvore esquerda e subrvore direita
Obs.: ou seja, uma rvore de grau (no mximo) 2.
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
rvore binria
** Desenho
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
** Desenho
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
//Pesquisa e retorna um item com a chave x pesquisada TipoItem* Pesquisa(TipoArvore a, TipoChave x) { if (a == NULL) return NULL; //sem sucesso if (x == a->item.chave) return &(a->item); //com sucesso if (x < a->item.chave) return Pesquisa(a->subArvEsq, x); //pesquisa na subarv if (x > a->item.chave) return Pesquisa(a->subArvDir, x); //pesquisa na subarv }
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
//Insere um item x na posicao apropriada da arvore a void Insere(TipoArvore &a, TipoItem x) { if (a == NULL) { //Encontrou local de insercao a = new TipoNodo; //Cria novo nodo: - a arvore aponta a->item = x; //- ele contem o item inserido a->subArvEsq = NULL;//- nao tem subarvore esquerda a->subArvDir = NULL;//- nem subarvore direita return; } if (x.chave < a->item.chave) return Insere(a->subArvEsq, x); //insere na subarvore e if (x.chave >= a->item.chave) return Insere(a->subArvDir, x); //insere na subarvore d }
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Exerccio #2 :(
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Complexidade melhor caso: C (n) = 1 pior caso: C (n) = altura da rvore... (no pior caso, n) A altura depende muito do formato (ordem de insero)!!! Se os itens forem bem distribudos nas subrvores, a altura pode ser log n, e seria esse o pior caso.
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
rvores balanceadas
Numa rvore completamente balanceada, a diferena de altura das subrvores esquerda e direita no mximo 1. Dessa forma a operao P ESQUISA tem pior caso na ordem de log n. Entretanto, manter a rvore completamente balanceada todo o tempo aumenta a complexidade das operaes I NSERE e R ETIRA Soluo: rvores quase balanceadas
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Exerccios de implementao
Exerccio #1 Implementar a funo P ESQUISA B INARIA em arranjo ordenado Exerccio #2 Implementar a funo R ETIRA da rvore binria de pesquisa
Introduo
Pesquisa sequencial
Pesquisa binria
rvore de pesquisa
rvores balanceadas
Exerccios
Exerccios de implementao
Exerccio #3 Implementar uma funo A LTURA, que retorna a altura de uma rvore binria de pesquisa Exerccio #4 Implementar uma funo C ONT F OLHAS, que retorna o nmero de folhas Exerccio #5 Implementar uma funo C ONT I NTERNOS, que retorna o nmero de ns internos (no folhas) Exerccio #6 Implementar uma funo R ETIRA M AIOR, que retira o item com maior chave