/js-mst

Javascript m-ary search tree

Primary LanguageJavaScript

The intention of this code is to proove or test the speed/performance
of search trees. In this case, the keys are strings.

My intention is to use it in an autocomplete input field but not asking to
the server every time.

There have been 2 different aproaches:

 * BST: binary search tree
  Has demonstrated a low performance, not so much in retrieve as in insertion.
  You can pass the tests of BST if you want to compare.
  
  In a first implementation of BST, we detected that the creation of the nodes as 
  prototype Objects was being expensive, so the nodes were changed to hashes "{}".
  
  This reduced the cost of creating nodes to a half.
 
 * MST: m-ary search tree
  The reason to try that was to reduce the navigation cost. When we are looking
  for a character in the position p, we must navigate through the neighbours till
  find the node of that char.
  In the mst, each node has a hash that points to the node of that char. This 
  implementation is suposed to be faster as a hash hit is implemented in machine
  code in the browser, so should be faster than a script code.
  
The results have shown that mst is better.

Inserting 80k words in the bst costs 7 seconds.
Inserting 80k words in the mst costs 3 seconds.
  
  This tests were taken in a FF 3.0.5
  (Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) 
    Gecko/2008121621 Ubuntu/8.04 (hardy) Firefox/3.0.5)
  The computer has a Intel Core 2 Duo T5550
  
The tests on Internet Explorer 6 were done in a virtualized installation
on the same machine as FF3. Some code adaptions were made.
The results were really slow. Possibly afected by the virtualization.

For instance:
  Adding 8k words (not 80k) in the mst cost 48 seconds. See that its a tenth of 
  the size of the test on FF and the results are really worse. 
  Pending a test on a non virtualized environment.

=== Giving a chance to Google Closure Compiler

Recently Google has released a javascript suite which includes a javascript 
compiler which reduces the code and rewrites the code reducing the size and doing
some code optimizations.

URL: http://code.google.com/closure/

Applying the compiler on the MST source needed some rewritting but it finally passed
the tests.

The results have been disapointing as has not been any important performance 
improvement even aplying the advanced optimizations.

Probably the code cannot be optimized any more and the time spent is what it needs
to do the work expected.