Vous êtes sur la page 1sur 5

rvore B + em JavaScript

Introduo
Eu vinha pensando em escrever uma aplicao B + Tree desde que me deparei com eles em
um curso de computao na universidade. Eu no tenho certeza de que h um uso prtico
para uma verso JavaScript, mas ele tem a vantagem de que fcil apresentar de forma
interativa online. Os meus principais objetivos para a rotina eram de que ele deve ser:

Pure JavaScript
Eu no queria uma verso que contou com todos os quadros adicionais, bibliotecas ou add-on
arquivos.

Rpido
Como uma funo de utilidade no h ponto de t-lo se no for razoavelmente eficiente.

Completo
Existem centenas de "inserir apenas" solues B-rvore, mas eu queria que a minha para ter
uma funo de eliminao adequada (em oposio ao mais normal "preguioso de excluso"),
bem como o fornecimento de funes que tornam a rvore utilizvel, como Seek, Procure
Perto, Skip, Goto, gotop, GoBottom.

Compreensvel
Existem solues que usam procedimentos recursivas obscuros e complexos. Para alm de
exibir toda a rvore, onde recurso funciona bem, isto no um problema que bem
adequado para isso. Nos casos em que voc precisa para percorrer a rvore de executar o
mesmo processo em diferentes nveis (de insero e supresso) voc j identificou o caminho
necessrio quando procurou a folha apropriada no incio. Um loop funciona to bem sem a
sobrecarga adicional de chamadas de funes recursivas.

Eu escrevi algumas notas e uma detalhada tutorial de insero / excluso para explicar mais
detalhadamente como funciona o trabalho. E se voc no quiser ler tudo isso e s quer brincar
com ele, aqui a tela de demonstrao.

Atuao
A pgina de demonstrao tem uma opo para encontrar o tempo total para inserir e
procurar um determinado nmero de teclas numricas aleatrias. Usando este eu encontrei o
seguinte para ser velocidades tpicas com Firefox 20 no meu Windows 7, i7-2600 3.4GHz PC:
Eu tambm testei com 10.000.000 chaves e encontrou inseres levou cerca de 23 segundos
para que ordem 8 e 12 segundos para o fim 100, mas nesse ponto o navegador tornou-se
instvel. Para ser honesto, porm, se voc tiver que muitas chaves e voc estiver usando
JavaScript que voc pode querer repensar a sua abordagem!

Embora estes testes e outras rotinas na pgina de demonstrao apenas utilizar nmeros
inteiros para as chaves, isso s acontece porque a exibio dos resultados muito mais fcil
quando as teclas so bastante curto. A B + Tree rotinas si pode aceitar teclas de caracteres
tambm. Claro, uma rvore deve sempre usar as teclas de um nico tipo para garantir que
voc obtenha resultados previsveis quando compar-los.

o JavaScript
Nota: no cortar e colar a partir de aqui, como todo o <caracteres sero substitudos por "<".
Use o link download abaixo ou View Source na pgina de demonstrao em seu lugar. Embora
o cdigo parece muito longo, voc vai notar um monte de que se refere actualizao dos
indicadores de status (por exemplo this.eof) ao invs do real B + Tree.
Limitaes
Para alm da limitao do nmero de teclas mencionados acima, existem tambm algumas
outras restries:

Ordem
A rvore deve ser construdo com um pedido mnimo de 3 (ou seja, pelo menos duas chaves
em cada folha e n). Eu no acho que isso no era razovel, caso contrrio, no realmente
uma rvore B +.

Duplicar chaves
As rotinas no permitem chaves duplicadas. Se voc realmente precisa desta facilidade, eu
acho que a melhor forma de incorpor-lo seria mudar os ponteiros de registros em cada tecla
folha em um array ou uma lista ligada. Seria muito mais fcil e mais eficaz do que permitindo
duplicatas na estrutura real B rvore.

Concorrncia
Desde JavaScript um nico usurio, nica lngua rosca eu no precisa se preocupar com
concordncia em tudo.

Programa demonstrativo
A tela de demonstrao mostra a rvore com cada n interno na cor marrom, cada folha em
verde e a chave atual em vermelho. Ele tambm exibe o status bandeiras fim de arquivo (EOF)
e encontrado, que so atualizadas aps cada operao. Ele fornece as seguintes operaes:

Criar nova rvore
Antes que voc pode fazer qualquer coisa que voc tem que construir uma nova rvore,
especificando a ordem requerida. O pedido mnimo 3.

Inserir
Isto ir adicionar um valor de chave especificado para a rvore.

Excluir
Se um valor de chave dada isso vai apagar essa chave do arquivo. Se nenhuma tecla for dado,
a chave atual excludo.

Busque / Buscar Perto
A rvore procurado para a chave especificada. Se ele no for encontrado, Procure voltar
Encontrado como falso e eof como verdadeira, enquanto Procure Perto ir retornar o mais
elevado seguinte valor da chave, se houver.

Pular
Se nenhuma contagem dada ento a prxima chave feita a chave atual. Caso contrrio, o
nmero especificado de chaves so pulados. A contagem pode ser, por exemplo positiva ou
negativa Skip (-1) ir saltar para a chave anterior. Ir e Ir (1) so idnticos.

Goto
A tecla actual seleccionado pela contagem a partir do incio da rvore (ou a partir do final do
ficheiro, se o parmetro negativo).

Superior / inferior
A primeira ou a ltima chave na rvore definido como a chave atual. Top e Goto (1) so
idnticos, Inferior e Goto (-1) so idnticas.

Pacote
Insero e excluso de chaves em uma rvore pode significar que existem muitos ns que no
so completamente cheio. Este processo ir comprimir a rvore como em poucas folhas e ns
quanto possvel.

Hide / Show Da caixa
A tela de demonstrao mostra como a ltima operao mudou a rvore, mostrando que a
rvore era como antes e aps essa operao. s vezes mais fcil s para ver a rvore
resultante sem o uso de espao vendo a rvore original, de modo que essas opes permitem
que voc alternar a exibio.

Mostrar histria
Isto ir exibir a srie de comandos que voc digitou para chegar ao estado atual.
provavelmente mais til em modo off-line, onde voc pode alterar o arquivo html como ento
voc pode cortar e colar no script Hardcoded (veja abaixo) para recriar a rvore novamente
mais tarde.

Executar script
O arquivo html tem uma funo chamada Hardcoded que ir executar uma srie de comandos
pr-definidos. Se voc estiver testando mudanas, isto til para recriar a rvore de teste
inicial.

Piscina aleatria Init
Uma matriz com o nmero especificado de chaves aleatrias criado. Nenhuma mudana
feita para a rvore.

Adicionar chaves aleatrias
Uma vez que a piscina aleatria foi criado, voc pode inserir um determinado nmero de
chaves que a piscina na rvore.

Temporizador Chave aleatria
Isto vai criar uma associao aleatria com o nmero especificado de chaves e, em seguida,
construir uma nova rvore e inserir toda a piscina na rvore. O tempo total necessrio para a
construo e insero exibido. Apesar de uma nova rvore construda, voc ainda deve
usar a opo Criar Novo rvore acima primeiro, pois isso especifica que ordem rvore que
voc deseja usar para o teste. Para evitar tempos de espera do navegador (onde o navegador
ir mostrar "no responde"), os horrios para at 2.000.000 de chaves so realizadas em um
loop e qualquer coisa acima disso dividido em grupos de 1.000.000 de chaves.

Note que a execuo isso vrias vezes mostrar vezes progressivamente mais lentas. Eu acho
que isso porque o navegador tem que gastar tempo de execuo de um processo de coleta
de lixo para limpar a rvore anterior, por isso a melhor maneira de timing fechar o navegador
e execute o arquivo html do Explorador de cada vez.

Baixar
Se voc quiser usar essas rotinas off-line, voc pode baixar este arquivo:

ZipBtree.zip
Este contm dois arquivos: btree.html e btree.js. O arquivo html contm todas as funes de
JavaScript e CSS relacionadas com a tela de demonstrao eo arquivo js tem as funes reais
de manipulao btree.

Sinta-se livre para usar isso como quiser, mas por favor, no afirmam que ele seja o seu
prprio trabalho, e se voc us-lo em uma aplicao real por favor me avise para que eu possa
v-lo em uso. Se voc encontrar quaisquer erros que voc pode denunci-los usando a seo
de comentrios abaixo ou na pgina de contato.

Vous aimerez peut-être aussi