let run_test dim num_points s n =
let data = random_data dim num_points in
let t_balanced = create_balanced data in
let t_unbalanced = fold_left (fun t (x,y) -> add x y t) empty data in
let total_balanced = ref 0. in
let total_unbalanced = ref 0. in
for i = 1 to n do
let x = random_float_list dim in
let nearest_dist =
let dists = map (fun p -> dist x (fst p)) data in
match select (<) 1 dists with
| ((nearest_dist :: _), _) -> nearest_dist in
let balanced_dist =
match hd (find_k_nearest t_balanced 1 s x) with
| (d, _, _) -> d in
let unbalanced_dist =
match hd (find_k_nearest t_unbalanced 1 s x) with
| (d, _, _) -> d in
total_balanced := !total_balanced +. (balanced_dist /. nearest_dist);
total_unbalanced := !total_unbalanced +. (unbalanced_dist /. nearest_dist)
done;
print_float (!total_balanced /. (float_of_int n));
print_string "\t";
print_float (!total_unbalanced /. (float_of_int n));
print_string "\n"