Árvore Binária de Busca Ótima



Documentos relacionados
ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

Otimização em Grafos

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

INF1010 Lista de Exercícios 2

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (5)

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (DPV 5; CLRS 4)

Aula 19 Árvores Rubro-Negras

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Aula 20: Árvores Binárias de Busca. Algoritmos de busca e inserção

Marina Andretta. 10 de outubro de Baseado no livro Introduction to Linear Optimization, de D. Bertsimas e J. N. Tsitsiklis.

Linguagem Haskell. Maria Adriana Vidigal de Lima

Tópicos Avançados em Algoritmos - exercícios de Prog. Din. com correcção parcial

Aula 13 Árvores Rubro-Negras

B-Árvores. Siang Wun Song - Universidade de São Paulo - IME/USP. MAC Estruturas de Dados

Programação Dinâmica. Prof. Anderson Almeida Ferreira. Adaptado do material elaborado por Andrea Iabrudi Tavares

Árvore Vermelho-Preta. Estrutura de Dados II Jairo Francisco de Souza

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Eduardo Camponogara. DAS-9003: Introdução a Algoritmos

DAINF - Departamento de Informática

Árvores balanceadas. Aleardo Manacero Jr.

Problema de seleção de atividades. Aula 14. Exemplo. Algoritmos Gulosos. Algoritmos Gulosos. Intervalo: par ordenado de números

Árvores Rubro-Negras. Árvores Rubro-Negras. (Vermelho-Preta) Estrutura da Árvore. Estrutura da Árvore

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

ESTRUTURA DE DADOS DCC013. Árvore Binária de Busca

Aula 10 Árvores Adelson-Velskii e Landis

Árvores & Árvores Binárias

Árvores Vermelho-Preto

Compressão Sem Perdas: Codificações Huffman e Aritmética. Adelar da Silva Queiróz Marcelo Teixeira Thiago da Silva Sodré

Algoritmos de Caminho Mínimo Parte 1

Aula 31: Encadeamento exterior. Modelo de encadeamento exterior. Complexidade do encadeamento exterior

AULA 13 PROJETO E ANÁLISE DE ALGORITMOS. Problema do caminho mais curto de uma única origem em grafos Karina Valdivia Delgado

Exercícios: Árvores. Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de estrutura de dados em linguagem C

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Árvores de Pesquisa. A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação.

Aula 08. Estruturas de dados Árvore e Grafo

ESTRUTURA DE DADOS E ALGORITMOS ÁRVORES BALANCEADAS. Cristina Boeres

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

UNIVERSIDADE DE SÃO PAULO ICMC SCC 202 Algoritmos e Estrutura de Dados I - 2º Semestre 2010 Profa. Sandra Maria Aluísio;

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de única origem. Subestrutura ótima. Propriedades de caminhos mais curtos

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15

Problema do Caixeiro Viajante

Estruturas de Dados II

AVALIAÇÃO DE CONHECIMENTO ESPECÍFICO

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

Universidade de São Paulo

Árvores Binárias de Busca (ABB) 18/11

Gabriel Coutinho DCC035 - Pesquisa Operacional Lista 6

Teoria dos Grafos Aula 24

Codificação de Huffman

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof a Karina Oliveira. Fonte: Prof a Ana Eliza

MCTA028 Programação Estruturada Aula 19 Custos de um algoritmo e funções de complexidade

B-tree. B-Trees. Estrutura do nodo da B-tree. Balanceamento. Disposição dos elementos ordenados na B-tree. Exemplo de uma B-tree de ordem 3

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Otimização em Grafos

AED1 - Árvores. Hebert Coelho. Instituto de Informática Universidade Federal de Goiás. HC AED1-Árvores 1/49

Aula 22: Formulações com número exponencial de variáveis

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Árvores AVL (Balanceadas) Profª.Drª. Roseli Ap. Francelin Romero Fonte: Profa. Patrícia Marchetti Revisão: Gedson Faria

Árvores Binárias de Busca (ABB) 18/11

Grafos: árvores geradoras mínimas. Graça Nunes

Linguagem C: Árvores AVL

Método Simplex. Marina Andretta ICMC-USP. 19 de outubro de 2016

Limite assintótico para a ordenação, Ordenação em tempo linear

Programação Linear. Dualidade

Árvores Genéricas de Busca

Formulação de Programação Linear Inteira para o Problema de Particionamento em Conjuntos Convexos

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

Teoria dos Grafos Aula 14

Problema do Caminho Mínimo

Complexidade de Algoritmos. Edson Prestes

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Transcrição:

MAC 5710 - Estruturas de Dados - 2008

Referência bibliográfica Os slides sobre este assunto são parcialmente baseados nas seções sobre árvore binária de busca ótima do capítulo 4 do livro N. Wirth. Algorithms + Data Structures = Programs. Prentice Hall, 1976.

Árvore binária de busca ótima Há situações em que sabemos com antecedência quais as chaves que serão buscadas e, mais ainda, com que freqüência ou probabilidade cada chave será buscada. Nesse caso, podemos construir uma árvore binária de busca ótima que será eficiente para a operação de busca. Inserções e remoções não são usualmente efetuadas na árvore assim construída pois elas podem modificar a sua estrutura. Caso inserções e remoções são permitidas, então se deve periodicamente reconstruir a árvore ótima. A melhor árvore binária de busca depende das probabilidades de acesso das chaves. Quando a distribuição dessas probabilidades não é uniforme, a melhor árvore binária de busca não é necessáriamente uma árvore binária perfeitamente balanceada. Intuitivamente, queremos colocar as chaves mais buscadas mais próximas ao topo da árvore binária. Vamos estudar como constuir uma árvore binária de busca ótima. Mas, antes, temos que definir o que se entende por árvore binária de busca ótima.

Comprimento de caminho ponderado de uma árvore Denotamos por comprimento de caminho h i de um nó k i o número de nós encontrados desde a raiz até o nó k i. Ele expressa o número de comparações realizadas para buscar uma chave no nó k i. Considere uma árvore binária de busca com n chaves k 1 < k 2 <... < k n. Suponha que se conhece a probabilidade de acesso de cada uma das chaves: sendo p i a probabilidade de acesso à chave k i, para 1 i n: n p i = 1 i=1

Comprimento de caminho ponderado de uma árvore O custo de busca P da árvore é expresso pelo comprimento de caminho ponderado da árvore, assim definida: P = n p i h i i=1 onde p i é a probabilidade de acesso à chave k i e h i é o comprimento de caminho de k i. Se toda chave tem igual probabilidade de ser buscada, então p i = 1/n, 1 i n e teremos o comprimento de caminho médio da árvore, já visto anteriormente: P = n p i h i = i=1 n i=1 h i n = 1 n n i=1 h i

Árvore binária de busca ótima Considere árvores binárias de busca com n chaves k 1 < k 2 <... < k n. Seja p i a probabilidade de acesso à chave k i, para 1 i n. Dentre todas tais árvores, é dita árvore binária de busca ótima aquela que minimiza o custo P: n P = p i h i i=1 onde h i é o comprimento de caminho de k i.

Exemplo de uma árvore binária de busca ótima Considere n = 3 e as 3 chaves k 1 = 100 k 2 = 200 k 3 = 300 com as respectivas probabilidades de acesso p 1 = 1 7 p 2 = 2 7 p 3 = 4 7. Vamos ilustrar as possíveis árvores binárias de busca e seu respectivo custo P.

Árvore 1 Custo P = 3 1 7 + 2 2 7 + 1 4 7 = 11 7 1 7 2 7 200 100 4 7 300

Árvore 2 Custo P = 3 2 7 + 2 1 7 + 1 4 7 = 12 7 1 7 100 4 7 2 7 200 300

Árvore 3 Custo P = 2 1 7 + 2 4 7 + 1 2 7 = 12 7 2 7 200 1 4 7 100 7 300

Árvore 4 Custo P = 3 2 7 + 2 4 7 + 1 1 7 = 15 7 1 7 100 2 7 4 7 300 200

Árvore 5 Custo P = 3 4 7 + 2 2 7 + 1 1 7 = 17 7 1 7 100 2 7 200 300 4 7

Obs. 1: A árvore ótima não sempre é balanceada Árvore 1 é a árvore ótima e não é balanceada. 1 7 2 7 200 100 4 7 300

Obs.2: A estratégia gulosa não funciona Pode parecer que basta adotar uma estratégia gulosa e começar colocando a chave de maior probabilidade de acesso na raiz. O exemplo mostra uma árvore ótima com as probabilidades de acesso em vermelho. A chave de maior probababilidade de acesso não está na raiz. 0,2300 0,4100 0,3400 0,1200

Busca de chaves ausentes na árvore Pode-se estranhar por que sempre a chave buscada tem que estar na árvore. Muitas vezes, o que procuramos não está na árvore. Quando buscamos uma chave ausente, caímos num ponteiro nil. Na figura, representamos pela cor vermelha os nós fictícios em que caem as buscas de chaves ausentes. Nessa formulação mais geral, nós internos representam chaves presentes e as folhas (nós fictícios vermelhos) representam intervalos de chaves ausentes. k 2 Uma árvore com 4 chaves k 1, k 2, k 3 e k 4 k 1 k 4 k 3

Uma formulação mais geral de árvore ótima Considere árvores binárias de busca com n chaves k 1 < k 2 <... < k n. Seja h i o comprimento de caminho da chave k i, 1 i n. Conhecemos as probabilidades, p i e q i, com n i=1 p i + n i=0 q i = 1, onde p i = a probabilidade de acesso à chave k i, para 1 i n. q 0 = a probabilidade de acesso a toda chave x, x < k 1. q n = a probabilidade de acesso a toda chave x, x > k n. q i = a probabilidade de acesso a toda chave x, k i < x < k i+1, 1 i < n. Uma árvore binária de busca ótima é aquela que minimiza o custo P, onde h i representa o comprimento de caminho do nó fictício em que caem buscas sem sucesso. P = n n p i h i + q i h i i=1 i=0

Para o exemplo da árvore com 4 chaves Uma árvore com 4 chaves k 1, k 2, k 3 e k 4 p 2 k 2 p 1 k 1 p 4 k 4 p 3 k 3 q 0 q 1 q 4 q 2 q 3 Uma árvore binária de busca ótima minimiza o custo P: P = 4 4 p i h i + q i h i i=1 i=0

Uso de freqüências no lugar de probabilidades Freqüências de acesso podem ser levantadas experimentalmente. Um modo equivalente é usar as freqüências no lugar das probabilidades. Sejam freqüências de acesso, a i e b i, com n i=1 a i + n i=0 b i = W, onde a i = a freqüência de acesso à chave k i, 1 i n. b 0 = a freqüência de acesso a toda chave x, x < k 1. b n = a freqüência de acesso a toda chave x, x > k n. b i = a freqüência de acesso a toda chave x, k i < x < k i+1, 1 i < n. Temos: p i = a i /W, 1 i n e q i = b i /W, 0 i n. A árvore binária de busca ótima então é aquela que minimiza P = n n a i h i + b i h i i=1 i=0

Como obter uma árvore binária de busca ótima No exemplo para n = 3 chaves, enumeramos todas as 5 árvores binárias possíveis e depois obtivemos a ótima. Pergunta: este método é viável? Qual a sua complexidade de tempo? Dado n, o número de árvores binárias possíveis com n nós é um número chamado ( ) número Catalan que vale: 2n C n = 1 n+1 = (2n)! n (n+1)!n! n C n n C n 0 1 13 742900 1 1 14 2674440 2 2 15 9694845 3 5 16 35357670 4 14 17 129644790 5 42 18 477638700 6 132 19 1767263190 7 429 20 6564120420 8 1430 21 24466267020 9 4862 22 91482563640 10 16796 23 343059613650 11 58786 24 1289904147324 12 208012 25 4861946401452

Como obter uma árvore binária de busca ótima No exemplo para n = 3 chaves, enumeramos todas as 5 árvores binárias possíveis e depois obtivemos a ótima. Pergunta: este método é viável? Qual a sua complexidade de tempo? Dado n, o número de árvores binárias possíveis com n nós é um número chamado ( ) número Catalan que vale: 2n C n = 1 n+1 = (2n)! n (n+1)!n! n C n n C n 0 1 13 742900 1 1 14 2674440 2 2 15 9694845 3 5 16 35357670 4 14 17 129644790 5 42 18 477638700 6 132 19 1767263190 7 429 20 6564120420 8 1430 21 24466267020 9 4862 22 91482563640 10 16796 23 343059613650 11 58786 24 1289904147324 12 208012 25 4861946401452

Como obter uma árvore binária de busca ótima No exemplo para n = 3 chaves, enumeramos todas as 5 árvores binárias possíveis e depois obtivemos a ótima. Pergunta: este método é viável? Qual a sua complexidade de tempo? Dado n, o número de árvores binárias possíveis com n nós é um número chamado ( ) número Catalan que vale: 2n C n = 1 n+1 = (2n)! n (n+1)!n! n C n n C n 0 1 13 742900 1 1 14 2674440 2 2 15 9694845 3 5 16 35357670 4 14 17 129644790 5 42 18 477638700 6 132 19 1767263190 7 429 20 6564120420 8 1430 21 24466267020 9 4862 22 91482563640 10 16796 23 343059613650 11 58786 24 1289904147324 12 208012 25 4861946401452

Método de programação dinâmica Em alguns algoritmos, a ineficiência se deve ao não reuso de resultados já calculados anteriormente. A idéia básica do método de programação dinâmica é o armazenamento e uso de soluções ótimas de subproblemas para obter a solução ótima do problema geral. Propriedade de árvores binárias de busca ótimas: Se uma árvore binária de busca é ótima, então as suas subárvores são ótimas. Se esta árvore Raiz é ótima = então a subárvore esq. L e a subárvore dir. R é ótima = = é ótima L R

Expressão de P em termos de P L e P R Seja W = n i=1 a i + n i=0 b i denominado o peso da árvore, i.e. o número total de buscas efetuadas, incluindo as com ou sem sucesso. P = P L = Raiz L R = P R Qualquer busca que segue para L ou para R passa pela raiz. Temos portanto P = P L + W + P R.

Exemplo que ilustra a relação P = P L + W + P R a 2 k 2 Seja uma árvore com 4 chaves k 1, k 2, k 3 e k 4 a 1 k 1 a 4 k 4 a 3 k 3 b 0 b 1 b 4 b 2 b 3 P = 2a 1 + a 2 + 3a 3 + 2a 4 + 3b 0 + 3b 1 + 4b 2 + 4b 3 + 3b 4 P L = a 1 + 2b 0 + 2b 1 e P R = 2a 3 + a 4 + 3b 2 + 3b 3 + 2b 4 P = P L + (a 1 + a 2 + a 3 + a 4 ) + (b 0 + b 1 + b 2 + b 3 + b 4 ) +P R }{{}}{{} P n i=1 a P n i i=0 b i W = n i=1 a i + n i=0 b i e o exemplo ilustra P = P L + W + P R.

Construção de uma árvore binária de busca ótima O método de programação dinâmica constrói uma árvore ótima a partir de subárvores ótimas. Vamos ilustrar o método com um pequeno exemplo. Sem perda de generalidade, vamos usar a formulação mais simples, sem considerar frequências de buscas de chaves ausentes. Sejam n = 5 chaves valendo 1, 2, 3, 4 e 5 com as respectivas freqüências de acesso: chave 1 2 3 4 5 freq. 10 4 20 16 2 Vamos construir uma árvore binária de busca ótima de 5 nós com as 5 chaves dadas.

Árvores com uma chave Chave k i 1 2 3 4 5 Freq. a i 10 4 20 16 2 Chave 1: A árvore ótima só tem a raiz onde fica a chave 1. P = 10. Chave 2: A árvore ótima só tem a raiz onde fica a chave 2. P = 4. Chave 3: A árvore ótima só tem a raiz onde fica a chave 3. P = 20. Chave 4: A árvore ótima só tem a raiz onde fica a chave 4. P = 16. Chave 5: A árvore ótima só tem a raiz onde fica a chave 5. P = 2.

Árvores com duas chaves Chaves 1 e 2: 1 na raiz. 1 W = 14 P = W + P L + P R = 18 menor P L = 0 = = P R = 4 chave 2 2 na raiz. 2 W = 14 P = W + P L + P R = 24 P L = 10 = chave = P R = 0 1

Árvores com duas chaves Chaves 2 e 3: 2 na raiz. 2 W = 24 P = W + P L + P R = 44 P L = 0 = = P R = 20 chave 3 3 na raiz. 3 W = 24 P = W + P L + P R = 28 menor P L = 4 = = P R = 0 chave 2

Árvores com duas chaves Chaves 3 e 4: 3 na raiz. 3 W = 36 P = W + P L + P R = 52 menor P L = 0 = = P R = 16 chave 4 4 na raiz. 4 W = 36 P = W + P L + P R = 56 P L = 20 = = P R = 0 chave 3

Árvores com duas chaves Chaves 4 e 5: 4 na raiz. 4 W = 18 P = W + P L + P R = 20 menor P L = 0 = = P R = 2 chave 5 5 na raiz. 5 W = 18 P = W + P L + P R = 34 P L = 16 = = P R = 0 chave 4

Árvores com três chaves Chaves 1, 2 e 3: 1 na raiz. 1 W = 34 P = W + P L + P R = 62 P L = 0 = = P R = 28 chaves 2 e 3 2 na raiz. 2 W = 34 P = W + P L + P R = 64 P L = 10 = = P R = 20 chave chave 1 3 3 na raiz. 3 W = 34 P = W + P L + P R = 52 menor P L = 18 = = P R = 0 chaves 1 e 2

Árvores com três chaves Chaves 2, 3 e 4: 2 na raiz. 2 W = 40 P = W + P L + P R = 92 P L = 0 = = P R = 52 chaves 3 e 4 3 na raiz. 3 W = 40 P = W + P L + P R = 60 menor P L = 4 = = P R = 16 chave chave 2 4 4 na raiz. 4 W = 40 P = W + P L + P R = 68 P L = 28 = = P R = 0 chaves 2 e 3

Árvores com três chaves Chaves 3, 4 e 5: 3 na raiz. 3 W = 38 P = W + P L + P R = 58 menor P L = 0 = = P R = 20 chaves 4 e 5 4 na raiz. 4 W = 38 P = W + P L + P R = 60 P L = 20 = = P R = 2 chave chave 3 5 5 na raiz. 5 W = 38 P = W + P L + P R = 90 P L = 52 = = P R = 0 chaves 3 e 4

Árvores com quatro chaves Chaves 1, 2, 3 e 4: 1 na raiz. 1 W = 50 P = W + P L + P R = 110 P L = 0 = = P R = 60 chaves 2, 3 e 4 2 na raiz. 2 W = 50 P = W + P L + P R = 112 P L = 10 = = P R = 52 chave 1 chaves 3 e 4

Árvores com quatro chaves Chaves 1, 2, 3 e 4: 3 na raiz. 3 W = 50 P = W + P L + P R = 84 menor P L = 18 = = P R = 16 chaves 1 e 2 chave 4 4 na raiz. 4 W = 50 P = W + P L + P R = 102 P L = 52 = = P R = 0 chaves 1, 2 e 3

Árvores com quatro chaves Chaves 2, 3, 4 e 5: 2 na raiz. 2 W = 42 P = W + P L + P R = 100 P L = 0 = = P R = 58 chaves 3, 4 e 5 3 na raiz. 3 W = 42 P = W + P L + P R = 66 menor P L = 4 = = P R = 20 chave 2 chaves 4 e 5

Árvores com quatro chaves Chaves 2, 3, 4 e 5: 4 na raiz. 4 W = 42 P = W + P L + P R = 72 P L = 28 = = P R = 2 chaves 2 e 3 chave 5 5 na raiz. 5 W = 42 P = W + P L + P R = 102 P L = 60 = = P R = 0 chaves 2, 3 e 4

Árvores com cinco chaves Chaves 1, 2, 3, 4 e 5: 1 na raiz. 1 W = 52 P = W + P L + P R = 114 P L = 0 = = P R = 62 chaves 2, 3, 4 e 5 2 na raiz. 2 W = 52 P = W + P L + P R = 120 P L = 10 = = P R = 58 chave chaves 1 3, 4 e 5 3 na raiz. 3 W = 52 P = W + P L + P R = 90 menor P L = 18 = = P R = 20 chaves chaves 1 e 2 4 e 5

Árvores com cinco chaves Chaves 1, 2, 3, 4 e 5: 4 na raiz. 4 W = 52 P = W + P L + P R = 106 P L = 52 = = P R = 2 chaves chave 1, 2 e 3 5 5 na raiz. 5 W = 52 P = W + P L + P R = 146 P L = 94 = = P R = 0 chaves 1, 2, 3 e 4

A árvore ótima obtida 3 W = 52 P = W + P L + P R = 90 P L = 18 = = P R = 20 chaves chaves 1 e 2 4 e 5 Basta recuperar a árvore ótima com chaves 1 e 2 e a árvore ótima com chaves 4 e 5. Temos: 3 1 4 2 5 Pode-se ver que o papel de W na quantidade P a ser minimizada é nulo, já que W entra em todas as comparações. Então podemos dispensar o uso de W na minimização de P.

Algoritmo para construir uma árvore de busca ótima Sejam dadas n chaves k 1 < k 2 <... < k n, com suas freq. de busca a i de chaves presentes e freq. de busca de b i de chaves ausentes, conforme já definidas. Denote por T ij uma árvore binária de busca ótima com as chaves k i+1, k i+2,..., k j, com peso w ij e caminho p ij definidos assim: w ii = b i, 0 i n w ij = w i(j 1) + a j + b j, 0 i < j n p ii = w ii, 0 i n p ij = w ij + min i<m j (p i(m 1) + p mj ), 0 i < j n. A finalidade é obter T 0n, que contém as chaves k 1, k 2,..., k n. w ij k m A raiz k m é qualquer chave de T ij De todas as árvores com k m na raiz escolhemos aquela que produz p ij (menor) p i(m 1) = = p mj

Algoritmo para construir uma árvore de busca ótima Seja T ij uma árvore binária de busca ótima com as chaves k i+1, k i+2,..., k j. A finalidade é obter T 0n. Seja h = j i, i j. Obtemos T 0n a partir de árvores ótimas menores. Exemplo para n = 5: T T 04 05 h = 5 T 15 h = 4 T 03 T 14 T 25 h = 3 T 02 T 13 T 24 T 35 h = 2 T 01 T 12 T 23 T 34 T 45 h = 1 T 00 T 11 T 22 T 33 T 44 T 55 h = 0

Algoritmo para construir uma árvore de busca ótima Dadas as freq. a i e b i, calculam-se os pesos w ij : w ii = b i, 0 i n w ij = w i(j 1) + a j + b j, 0 i < j n. Calculam-se p ij : p ii = w ii, 0 i n p ij = w ij + min i<m j (p i(m 1) + p mj ), 0 i < j n. Vamos ainda usar r ij para guardar a posição m que produz o mínimo p ij.

Algoritmo para construir uma árvore de busca ótima 1: for i 0 to n do 2: p ii b i 3: end for 4: for i 0 to n 1 do 5: j i + 1 6: p ij w ij + pij + p jj 7: r ij j 8: end for 9: for h 2 to n do 10: for i 0 to n h do 11: j i + h 12: Acharm e min = min 1<m j (p i(m 1) + p mj ) 13: p ij min + w ij 14: r ij m 15: end for 16: end for A complexidade de tempo do algoritmo de construção é O(n 3 ), mas pode ser reduzido para O(n 2 ) (Knuth - The Art of Computer Programming Vol. 3).

Uso da técnica de programação dinâmica O termo programação dinâmica foi usado por Richard Bellman. A utlizada dessa técnica pode ser mostrada em várias outras aplicações. Encontrar uma ordem de multiplicar matrizes M 1 M 2... M n que usa o menor número de operações escalares. Encontrar o menor caminho entre dois vértices de um grafo. Dadas duas seqüências de caracteres, transformar uma seqüência na outra usando operações de edição como substituição, inserção ou remoção. Essas aplicações são tratadas em cursos de Análise de Algoritmos.