diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/random_heuristic.c | 26 | 
1 files changed, 20 insertions, 6 deletions
| diff --git a/src/random_heuristic.c b/src/random_heuristic.c index a2d0747..0076728 100644 --- a/src/random_heuristic.c +++ b/src/random_heuristic.c @@ -100,13 +100,13 @@ struct online_return random_heuristic_online(struct data * data, struct front_it    }    long int tree_size = 0;    for(struct tree_item * tree_node = tree; tree_node != NULL; tree_node = tree_node->next, tree_size++); +   +  /* Choose tree node randomly */ +  long int position = rand() % tree_size; +  struct tree_item * node = tree; +  for(int i = 0; i < position; i++,node=node->next);    do { -    /* Choose tree node randomly */ -    long int position = rand() % tree_size; -    struct tree_item * node = tree; -    for(int i = 0; i < position; i++,node=node->next); -          /* Check if node is leaf */      if(node->depth == data->N) {        front_last->next = new_front_item(node->values.p, node->values.w, front_last, NULL); @@ -127,9 +127,16 @@ struct online_return random_heuristic_online(struct data * data, struct front_it        /* Reduce tree_size */        tree_size--; +      if(tree != NULL) { +        /* Select new random node */ +        position = rand() % tree_size; +        node = tree; +        for(int i = 0; i < position; i++,node=node->next); +      } +        continue;      } -     +      /* Make left node (select item) */      struct tree_item * left = new_tree_item(        node->depth + 1, @@ -165,6 +172,13 @@ struct online_return random_heuristic_online(struct data * data, struct front_it      }      free(old); +    /* Choose left or right randomly for node */ +    if(rand() % 2 == 0) { +      node = left; +    } else { +      node = right; +    } +      /* Increment tree_size */      tree_size++;    } while(tree != NULL); | 
