void svoGNGEuDel(svo_gng_eu_t *gng_eu) { if (gng_eu->beta_n) BOR_FREE(gng_eu->beta_n); if (gng_eu->beta_lambda_n) BOR_FREE(gng_eu->beta_lambda_n); if (gng_eu->net){ borNetDel2(gng_eu->net, nodeFinalDel, gng_eu, delEdge, gng_eu); } if (gng_eu->err_heap) borPairHeapDel(gng_eu->err_heap); if (gng_eu->nn) borNNDel(gng_eu->nn); if (gng_eu->params.dim == 2){ borVec2Del((bor_vec2_t *)gng_eu->tmpv); }else if (gng_eu->params.dim == 3){ borVec3Del((bor_vec3_t *)gng_eu->tmpv); }else{ borVecDel(gng_eu->tmpv); } BOR_FREE(gng_eu); }
static void checkCorrect3(int ID, size_t num) { el_t *els, *el; int *ids; bor_pairheap_t *heap; bor_pairheap_node_t *n; size_t i; FILE *fout1, *fout2; char fn[300]; bor_rand_t r; borRandInit(&r); sprintf(fn, "regressions/tmp.TSPairHeap.rand-%d.out", ID); fout1 = fopen(fn, "w"); sprintf(fn, "regressions/TSPairHeap.rand-%d.out", ID); fout2 = fopen(fn, "w"); els = randomEls(num); ids = BOR_ALLOC_ARR(int, num); heap = borPairHeapNew(ltEl, NULL); for (i = 0; i < num; i++){ borPairHeapAdd(heap, &els[i].node); } for (i = 0; i < num; i += 10){ els[i].val += borRand(&r, 1, 100); borPairHeapUpdate(heap, &els[i].node); } i = 0; while (!borPairHeapEmpty(heap)){ n = borPairHeapExtractMin(heap); el = bor_container_of(n, el_t, node); fprintf(fout1, "%d\n", el->val); el = bor_container_of(n, el_t, node); ids[i] = el->id; i++; } qsort(els, num, sizeof(el_t), cmpIncEl); for (i = 0; i < num; i++){ fprintf(fout2, "%d\n", els[i].val); } borPairHeapDel(heap); free(els); free(ids); fclose(fout1); fclose(fout2); }
static void _svoGNGInit(svo_gng_t *gng) { const void *is; svo_gng_node_t *n1 = NULL, *n2 = NULL; size_t i; bor_real_t maxbeta; gng->cycle = 1L; // initialize error heap if (gng->err_heap) borPairHeapDel(gng->err_heap); gng->err_heap = borPairHeapNew(errHeapLT, (void *)gng); // precompute beta^n if (gng->beta_n) BOR_FREE(gng->beta_n); gng->beta_n = BOR_ALLOC_ARR(bor_real_t, gng->params.lambda); gng->beta_n[0] = gng->params.beta; for (i = 1; i < gng->params.lambda; i++){ gng->beta_n[i] = gng->beta_n[i - 1] * gng->params.beta; } // precompute beta^(n * lambda) if (gng->beta_lambda_n) BOR_FREE(gng->beta_lambda_n); maxbeta = gng->beta_n[gng->params.lambda - 1]; gng->beta_lambda_n_len = 1000; gng->beta_lambda_n = BOR_ALLOC_ARR(bor_real_t, gng->beta_lambda_n_len); gng->beta_lambda_n[0] = maxbeta; for (i = 1; i < gng->beta_lambda_n_len; i++){ gng->beta_lambda_n[i] = gng->beta_lambda_n[i - 1] * maxbeta; } if (gng->ops.init){ OPS(gng, init)(&n1, &n2, OPS_DATA(gng, init)); }else{ is = OPS(gng, input_signal)(OPS_DATA(gng, input_signal)); n1 = OPS(gng, new_node)(is, OPS_DATA(gng, new_node)); is = OPS(gng, input_signal)(OPS_DATA(gng, input_signal)); n2 = OPS(gng, new_node)(is, OPS_DATA(gng, new_node)); } nodeAdd(gng, n1); nodeAdd(gng, n2); edgeNew(gng, n1, n2); }
void svoGNGDel(svo_gng_t *gng) { if (gng->beta_n) BOR_FREE(gng->beta_n); if (gng->beta_lambda_n) BOR_FREE(gng->beta_lambda_n); if (gng->net){ borNetDel2(gng->net, nodeFinalDel, gng, delEdge, gng); } if (gng->err_heap) borPairHeapDel(gng->err_heap); BOR_FREE(gng); }