Example #1
0
void FMM2D::recalculate()
{
    if (!m_tree) {
        build_tree();
    }
    reset();
    upward_pass();
    downward_pass();
}
Example #2
0
void FMM2D::calculate(bool precond)
{
    reset();
    m_make_prec = precond;
    build_tree();
    upward_pass();
    downward_pass();
    m_make_prec = false;
}
Example #3
0
 BihTree(
     const InputIterator & first,
     const InputIterator & last,
     unsigned max_depth = 32,
     unsigned items_per_leaf = 1 ) :
     MAX_DEPTH(max_depth), ITEMS_PER_LEAF(items_per_leaf), m_range(), m_root(), m_depth(0), m_num_nodes(0)
 {
     m_range.insert(m_range.begin(),first,last);
     build_tree(m_root, m_range.begin(), m_range.end(), 0);
 }
Example #4
0
void build_tree(int root, int prev)
{
    for(int k = head[root]; k != -1; k = edge[k].next) {
        int v = edge[k].v;
        if(prev == v) continue;
        father[v] = root;
        build_tree(v, root);
        f[root] += f[v];
    }
}
Example #5
0
sv::id3_tree::id3_tree(std::vector<sample> d, std::vector<std::string> f) : data(std::move(d)), features(std::move(f))
{
	//map features to set of values
	for (std::size_t i = 0; i < features.size(); ++i)
	{
		for (const auto& s : data) { feature_to_values[features[i]].insert(s.feature_values[i]); }
	}

	root = build_tree(data, features);
}
 NumArray(vector<int> &nums) {
     this->nums = vector<int>(nums);
     n = (int)nums.size();
     
     if (n != 0){
         tree = new TreeNode[4*n];
         build_tree(1, 0, n-1);
         if (n < 15)
             print_tree();
     }
 }
Example #7
0
Node* build_tree(FILE* input){
    int bit = read_bit(input);
    if (bit == EOF){
	printf("%s\n", "Error: build_tree shouldn't encounter EOF");
    }
    if (bit == 1){
	char c = read_char(input);
	Node* node = my_malloc(sizeof(Node));
	node->left = NULL;
	node->right = NULL;
	node->next = NULL;
	node->char_val = c;
	return node;
    } else {
	Node* tree = my_malloc(sizeof(Node));
	tree->left = build_tree(input);
	tree->right = build_tree(input);
	return tree;
    }
}
Example #8
0
void build_tree(int now, int l, int r)
{
	if(l == r)
	{
		int v;
		std::scanf("%d", &v);
		node[now].ans = node[now].sum = v;
		node[now].ans.l = node[now].ans.r = l;
		node[now].left = node[now].right = node[now].ans;
		node_m[now] = node[now];
		return;
	}

	int m = (l + r) >> 1;
	int a = now << 1, b = a + 1;
	build_tree(a, l, m);
	build_tree(b, m + 1, r);
	merge(node[now], node[a], node[b], max_cmp);
	merge(node_m[now], node_m[a], node_m[b], min_cmp);
}
int main(int argc, char **argv)
{
    int **tree = build_tree();
    for(int i = TREE_SIZE-2; i >= 0; i--)
        for(int j = 0; j <= i; j++)
            tree[i][j] += MAX(tree[i+1][j], tree[i+1][j+1]);

    printf("%d\n", tree[0][0]);

    return 0;
}
Example #10
0
void
build_tree(int root, int left, int right)
{
	int mid;

	tree[root].left = left;
	tree[root].right = right;
	if (left == right)
	{
		tree[root].max = tree[root].min = num[left];
	}
	else
	{
		mid = (left + right) / 2;
		build_tree(root * 2, left, mid);
		build_tree(root * 2 + 1, mid + 1, right);
		tree[root].max = max(tree[root * 2].max, tree[root * 2 + 1].max);
		tree[root].min = min(tree[root * 2].min, tree[root * 2 + 1].min);
	}
}
void test_data_data_is_retained(void)
{
   int tree_data[] = { 4 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   TEST_ASSERT_NOT_NULL(tree);
   TEST_ASSERT_EQUAL_INT(4, tree->data);
   TEST_ASSERT_NULL(tree->left);
   TEST_ASSERT_NULL(tree->right);

   free_tree(tree);
}
Example #12
0
void kd_tree::build_tree(array_2d<double> &mm){
    
    array_1d<double> i_min,i_max;
    int i;
    
    for(i=0;i<mm.get_cols();i++){
        i_min.set(i,0.0);
        i_max.set(i,1.0);
    }
    
    build_tree(mm,i_min,i_max);
}
Example #13
0
	void quadtree::build_tree(const epng::png & source, std::unique_ptr<node> & subroot, uint64_t resolution, uint64_t x, uint64_t y)
	{
		subroot.reset(new node());

		if(resolution == 1){
			subroot->element = *source(x,y);
			return;
		}
		build_tree(source, subroot->northwest, resolution/2, x, y);
		build_tree(source, subroot->northeast, resolution/2, x+resolution/2, y);
		build_tree(source, subroot->southwest, resolution/2, x, y+resolution/2);
		build_tree(source, subroot->southeast, resolution/2, x+resolution/2, y+resolution/2);

		int tmp;
		tmp = (subroot->northwest->element.red + subroot->northeast->element.red + subroot->southwest->element.red + subroot->southeast->element.red)/4;
		subroot->element.red = tmp;
		tmp = (subroot->northwest->element.green + subroot->northeast->element.green + subroot->southwest->element.green + subroot->southeast->element.green)/4;
		subroot->element.green = tmp;
		tmp = (subroot->northwest->element.blue + subroot->northeast->element.blue + subroot->southwest->element.blue + subroot->southeast->element.blue)/4;
		subroot->element.blue = tmp;
	}
node * build_tree(int left,int right)
{
    char ch;
    int i;

    if(left > right) return NULL;

    ch = preorder[pre_index];

    for(i=0; inorder[i] != ch; i++);

    pre_index++;

    node *t= new node;

    t->c = inorder[i];
    t->left = build_tree(left,i-1);
    t->right = build_tree(i+1,right);

    return t;
}
Example #15
0
File: bfs.c Project: shylesh/mycode
int
main()
{
	NODE	*TPTR = NULL;
	q.nele=0;

	if ((TPTR = build_tree(5)) == NULL) {
		printf ("build tree failed\n");
		err_exit ("btree failed\n");
	}

	bfs(TPTR);
}
Example #16
0
int main_test(void){
    BiTree *T = NULL;
    
    init_tree(&T);
    
    process_input(T);
    
    build_tree(T);
    
    traverse_tree(T);
    
    return 0;
}
void test_sorted_data_can_sort_single_number(void)
{
   TEST_IGNORE();
   int tree_data[] = { 2 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   int expected[] = { 2 };
   int *actual = sorted_data(tree);
   TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));

   free_tree(tree);
   free(actual);
}
void test_sorted_data_can_sort_if_second_number_is_greater_than_first(void)
{
   TEST_IGNORE();
   int tree_data[] = { 2, 3 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   int expected[] = { 2, 3 };
   int *actual = sorted_data(tree);
   TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));

   free_tree(tree);
   free(actual);
}
void test_sorted_data_can_sort_complex_tree(void)
{
   TEST_IGNORE();
   int tree_data[] = { 2, 1, 3, 6, 7, 5 };
   node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));

   int expected[] = { 1, 2, 3, 5, 6, 7 };
   int *actual = sorted_data(tree);
   TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));

   free_tree(tree);
   free(actual);
}
Example #20
0
void build_tree(int node,int a,int b)
{
	if(a==b)
	{
		T[node].lval=node;
		T[node].rval=node;
		T[node].maxv=arr[a];
		T[node].sum=arr[a];
		return;
	}
	int m=(a+b)/2;
	build_tree(2*node,a,m);
	build_tree(2*node+1,m+1,b);

	T[node].maxv=max2(T[2*node].maxv,T[2*node+1].maxv);
	if(T[2*node+1].lval!=T[2*node+1].rval)
		T[node].sum=max3(T[2*node].maxv+T[2*node+1].maxv,T[2*node].sum,T[2*node+1].sum);
	else if(T[2*node+1].lval==T[2*node+1].rval)
		T[node].sum=max2(T[2*node].maxv+T[2*node+1].maxv,T[2*node].sum);
	T[node].lval=2*node;
	T[node].rval=2*node+1;
}
Example #21
0
static int read_offset_tree(LHAPM2Decoder *decoder,
                            unsigned int num_offsets)
{
	uint8_t offset_lengths[8];
	unsigned int off;
	unsigned int single_offset, num_codes;
	int len;

	if (!decoder->need_offset_tree) {
		return 1;
	}

	// Read 'num_offsets' 3-bit length values.  For each offset
	// value 'off', offset_lengths[off] is the length of the
	// code that will represent 'off', or 0 if it will not
	// appear within the tree.

	num_codes = 0;
	single_offset = 0;

	for (off = 0; off < num_offsets; ++off) {
		len = read_bits(&decoder->bit_stream_reader, 3);

		if (len < 0) {
			return 0;
		}

		offset_lengths[off] = (uint8_t) len;

		// Track how many actual codes were in the tree.

		if (len != 0) {
			single_offset = off;
			++num_codes;
		}
	}

	// If there was a single code, this is a single node tree.

	if (num_codes == 1) {
		set_tree_single(decoder->offset_tree, single_offset);
		return 1;
	}

	// Build the tree.

	build_tree(decoder->offset_tree, sizeof(decoder->offset_tree),
	           offset_lengths, num_offsets);

	return 1;
}
Example #22
0
static int acsmBuildMatchStateTrees( ACSM_STRUCT * acsm, 
                                     int (*build_tree)(void * id, void **existing_tree),
                                     int (*neg_list_func)(void *id, void **list) )
{
    int i, cnt = 0;
    ACSM_PATTERN * mlist;

    /* Find the states that have a MatchList */ 
    for (i = 0; i < acsm->acsmMaxStates; i++)
    {
        for ( mlist=acsm->acsmStateTable[i].MatchList;
              mlist!=NULL;
              mlist=mlist->next )
        {
            if (mlist->udata->id)
            {
                if (mlist->negative)
                {
                    neg_list_func(mlist->udata->id, &acsm->acsmStateTable[i].MatchList->neg_list);
                }
                else
                {
                    build_tree(mlist->udata->id, &acsm->acsmStateTable[i].MatchList->rule_option_tree);
                }
            }

            cnt++;
        }

        if (acsm->acsmStateTable[i].MatchList)
        {
            /* Last call to finalize the tree */
            build_tree(NULL, &acsm->acsmStateTable[i].MatchList->rule_option_tree);
        }
    }

    return cnt;
} 
  // 参考construct_binary_tree_from_preorder_and_inorder_traversal.cpp
  TreeNode* build_tree(vector<int> &inorder,
      int in_start,
      int in_end,
      vector<int> &postorder,
      int post_start,
      int post_end) {
    if (post_start > post_end) {
      return NULL;
    }
    else if (post_start == post_end) {
      return new TreeNode(postorder[post_start]);
    }

    int i = 0;

    for ( ; (in_start + i) <= in_end; ++i) {
      if (inorder[in_start + i] == postorder[post_end]) {
        break;
      }
    }

    TreeNode *root = new TreeNode(postorder[post_end]);

    root->left = build_tree(inorder,
        in_start,
        in_end + (i - 1),
        postorder,
        post_start,
        post_start + (i - 1));
    root->right = build_tree(inorder,
        in_start + (i + 1),
        in_end,
        postorder,
        post_start + i,
        post_end - 1);

    return root;
  }
KMCentersNode *KMCentersTree::build_tree(int start_ind,int end_ind,
  int level) {
  IMP_LOG(VERBOSE,"build tree for point indexes: " <<
          start_ind << " to " << end_ind << std::endl);
  if (end_ind-start_ind<=1){
    Ints curr_inds;
    for(int i=start_ind;i<=end_ind;i++) {
      curr_inds.push_back(i);
    }
    return new KMCentersNodeLeaf(level,*bnd_box_,centers_,curr_inds);
  }
  int cd=0; //the cutting dimension
  double cv;//the cutting value
  int n_lo; // number on low side of cut
  KMCentersNode *lo, *hi; // low and high children
  //split the data points along a dimension. The split data is stored in pidx
  split_by_mid_point(start_ind, end_ind, cd, cv, n_lo);
  IMP_LOG(VERBOSE,"splitting points with indexes : " << start_ind << " to "
   << end_ind << " the splitting dimension is: " << cd << " with value: "<< cv
   << " the last point for the left side is: " << n_lo << std::endl);
  KMPoint *lo_p,*hi_p;
  lo_p = bnd_box_->get_point(0);
  hi_p = bnd_box_->get_point(1);
  double lv = (*lo_p)[cd];
  double hv = (*hi_p)[cd];
  (*hi_p)[cd] = cv;
  //build left subtree from p_id[0,...,n_lo-1]
  lo = build_tree(start_ind,n_lo-1,level+1);
  (*hi_p)[cd] = hv;// restore bounds
  (*lo_p)[cd] = cv;// modify bounds for right subtree
  // build right subtree from p_id[n_lo..n-1]
  hi = build_tree(n_lo, end_ind,level+1);
  (*lo_p)[cd] = lv;
  // create the splitting node
  KMCentersNodeSplit *ptr =
    new KMCentersNodeSplit(level,*bnd_box_, centers_,cd, cv, lv, hv, lo, hi);
  return ptr;
}
Example #25
0
int build_tree(int node,int a,int b)
{

	if(a==b)
	{
		T[node].maxv=arr[a];
		return 1;
	}
	int m=(a+b)/2;
	hold=build_tree(2*node,a,m);
	hold=build_tree(2*node+1,m+1,b);
	if(hold==1)
	{
		T[node].maxv=T[2*node].maxv | T[2*node+1].maxv;
		return 0;
	}
	else if(hold==0)
	{
		T[node].maxv=T[2*node].maxv ^ T[2*node+1].maxv;
		return 1;
	}

}
Example #26
0
static void
build_tree (PopplerDocument   *document,
	    GtkTreeModel      *model,
	    GtkTreeIter       *parent,
	    PopplerLayersIter *iter)
{

	do {
		GtkTreeIter        tree_iter;
		PopplerLayersIter *child;
		PopplerLayer      *layer;
		gboolean           visible;
		gchar             *markup;
		gint               rb_group = 0;

		layer = poppler_layers_iter_get_layer (iter);
		if (layer) {
			markup = g_markup_escape_text (poppler_layer_get_title (layer), -1);
			visible = poppler_layer_is_visible (layer);
			rb_group = poppler_layer_get_radio_button_group_id (layer);
		} else {
			gchar *title;

			title = poppler_layers_iter_get_title (iter);
			markup = g_markup_escape_text (title, -1);
			g_free (title);

			visible = FALSE;
			layer = NULL;
		}

		gtk_tree_store_append (GTK_TREE_STORE (model), &tree_iter, parent);
		gtk_tree_store_set (GTK_TREE_STORE (model), &tree_iter,
				    LAYERS_TITLE_COLUMN, markup,
				    LAYERS_VISIBILITY_COLUMN, visible,
				    LAYERS_ENABLE_COLUMN, TRUE, /* FIXME */
				    LAYERS_SHOWTOGGLE_COLUMN, (layer != NULL),
				    LAYERS_RB_GROUP_COLUMN, rb_group,
				    LAYERS_LAYER_COLUMN, layer,
				    -1);
		if (layer)
			g_object_unref (layer);
		g_free (markup);

		child = poppler_layers_iter_get_child (iter);
		if (child)
			build_tree (document, model, &tree_iter, child);
		poppler_layers_iter_free (child);
	} while (poppler_layers_iter_next (iter));
}
struct TreeNode *sortedListToBST(struct ListNode *head)
{
	if (!head)
		return(NULL);
	
	int	*num, size;
	struct TreeNode *root;

	num = list_to_arr(head, &size);

	root = build_tree(num, 0, size - 1);
	free(num);
	return(root);
}
Example #28
0
File: lg_py.c Project: bluemoon/nlp
PyObject *build_tree(CNode *n, Linkage linkage) {
    CNode * m;
    int word_num = 1;
    PyObject *output;
    PyObject *temp;

    //PyObject *t2;
    //PyObject *t1;
    output = PyList_New(0);
    // sentence_get_word(Sentence sent, int wordnum)
    //static char * spacer=" ";

    if (n == NULL) {
        Py_INCREF(Py_None);
        return Py_None;
    }
    for (m=n->child; m!=NULL; m=m->next) {
        //PyObject *t1;
        //t1 = PyList_New(0);
        if (m->child == NULL) {
            temp = PyString_FromString(m->label);
            //PyList_Append(t1, temp);
        }
        else {
            temp = build_tree(m, linkage);
            //PyList_Append(t1, temp);
        }
        /*PyObject *temp_list;
        PyObject *temp2_list;
        temp_list = PyList_New(0);
        temp2_list = PyList_New(0);

        const char *t3 = linkage_get_link_llabel(linkage, word_num);
        const char *t4 = linkage_get_link_rlabel(linkage, word_num);

        t1 = PyString_FromString(t3);
        t2 = PyString_FromString(t4);
        PyList_Append(temp_list, t1);
        PyList_Append(temp_list, t2);
        PyList_Append(temp2_list, temp);
        PyList_Append(temp2_list, temp_list);
        //PyDict_SetItem(output, temp, t2);
        PyList_Append(output, temp2_list);
        */
        PyList_Append(output, temp);
        word_num++;
    }
    Py_XINCREF(output);
    return output;
}
Example #29
0
static int read_offset_table(LHANewDecoder *decoder)
{
	int i, n, len, code;
	uint8_t code_lengths[HISTORY_BITS];

	// How many codes?

	n = read_bits(&decoder->bit_stream_reader, OFFSET_BITS);

	if (n < 0) {
		return 0;
	}

	// n=0 is a special case, meaning only a single code that
	// is of zero length.

	if (n == 0) {
		code = read_bits(&decoder->bit_stream_reader, OFFSET_BITS);

		if (code < 0) {
			return 0;
		}

		set_tree_single(decoder->offset_tree, code);
		return 1;
	}

	// Enforce a hard limit on the number of codes.

	if (n > HISTORY_BITS) {
		n = HISTORY_BITS;
	}

	// Read the length of each code.

	for (i = 0; i < n; ++i) {
		len = read_length_value(decoder);

		if (len < 0) {
			return 0;
		}

		code_lengths[i] = len;
	}

	build_tree(decoder->offset_tree, MAX_TEMP_CODES * 2, code_lengths, n);

	return 1;
}
Example #30
0
void 
render(struct page *p)
{
    int depth;
    FILE *out;
    struct lacy_env env;
    struct page_stack p_stack;
    struct ut_str outfile;

    str_init(&curtok);

    if (NULL == p)
        return;

    str_init(&outfile);
    str_append_str(&outfile, conf.output_dir.s);
    str_append(&outfile, '/');
    str_append_str(&outfile, p->file_path);

    /* depth - 1 since we added output dir to path */
    depth = build_depth(outfile.s) - 1;
    if (NULL == (out = fopen(outfile.s, "w"))) 
        fatal("Unable to open: %: ", outfile.s);

    p_stack.size = 0;
    p_stack.pos = 0;
    /* Build Environment */
    env.depth = depth;
    env.p_stack = &p_stack;
    env.sym_tbl = NULL;

    env_build(p, &env);
    /* set stack back to top */
    p_stack.pos = 0;

    /* do it already */
    build_tree(&env);
    write_tree(out, &env);

    env_free(&env);
    fclose(out);

    str_free(&curtok);

    if (verbosity > 0) {
        printf("Rendered %s\n", outfile.s);
    }
    str_free(&outfile);
}