From c4f926438dcb8abe805e910399940f79ff643c4b Mon Sep 17 00:00:00 2001 From: ziejd2 Date: Thu, 14 Sep 2017 15:39:41 -0500 Subject: Add files via upload --- sourcecodes/k-best/src/ls_LOO.c | 152 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 sourcecodes/k-best/src/ls_LOO.c (limited to 'sourcecodes/k-best/src/ls_LOO.c') diff --git a/sourcecodes/k-best/src/ls_LOO.c b/sourcecodes/k-best/src/ls_LOO.c new file mode 100644 index 00000000..57a1fae4 --- /dev/null +++ b/sourcecodes/k-best/src/ls_LOO.c @@ -0,0 +1,152 @@ +#include +#include +#include +#include "get_local_scores.h" +#include "ls_LOO.h" + +extern int* nof_vals; +extern int N; + +static score_t ess; +static int splitess; + +static int* freq2mem = NULL; +static int* freq2mem2 = NULL; +static int nof_freq2s; + + +#define BIG_LOO_DATA (1<<10) + +/* LOO */ + +score_t big_loo_score(int i, varset_t psi, int nof_freqs){ + + int vc_v = nof_vals[i]; + score_t pcc = get_nof_cfgs(psi); + score_t ess_per_pcc = splitess ? (ess / pcc) : (ess*vc_v); + score_t ess_per_cc = splitess ? (ess_per_pcc / vc_v) : ess; + + int* freqp = freqmem; + int* end_freqp = freqp + nof_freqs * vc_v; + + score_t res = - log(N); + + memset(freq2mem, 0, nof_freq2s*sizeof(int)); /* could reset later */ + memset(freq2mem2, 0, nof_freq2s*sizeof(int)); /* could reset later */ + + for(;freqp < end_freqp; freqp += vc_v) { + int pcfreq = 0; + int v; + for(v = 0; v 0.0 ? 0.0 : res; +} + + +score_t loo_score(int i, varset_t psi, int nof_freqs){ + + int vc_v = nof_vals[i]; + score_t pcc = get_nof_cfgs(psi); + + score_t ess_per_pcc = splitess ? (ess / pcc) : (ess*vc_v); + score_t ess_per_cc = splitess ? (ess_per_pcc / vc_v) : ess; + + int* freqp = freqmem; + int* end_freqp = freqp + nof_freqs * vc_v; + + score_t res = -log(N); + + memset(freq2mem, 0, nof_freq2s*sizeof(int)); /* could reset later */ + memset(freq2mem2, 0, nof_freq2s*sizeof(int)); /* could reset later */ + + for(;freqp < end_freqp; freqp += vc_v) { + int pcfreq = 0; + int v; + for(v = 0; v 0.0 ? 0.0 : res; +} + + + +scorefun init_LOO_scorer(char* arg){ + + scorefun sf; + int arglen = strlen(arg); + + ess = atof(arg); + splitess = arg[arglen-1] == 'l'; + + if (N