diff options
| author | ziejd2 | 2021-10-11 16:00:02 -0500 |
|---|---|---|
| committer | ziejd2 | 2021-10-11 16:00:02 -0500 |
| commit | 566a4de3fcc9b90da036dbf385044319c11a2b6a (patch) | |
| tree | 15c23be0643f41128f11cf9bb378ed505e259a6b /sourcecodes/k-best/src/ls_LOO.c | |
| parent | a20784bad5cfa214ce23d16695d0064571bae9c3 (diff) | |
| parent | 73ba58868451b5fc6611e1feaa9b63f17b6cd19d (diff) | |
| download | BNW-566a4de3fcc9b90da036dbf385044319c11a2b6a.tar.gz | |
Resolved merge conflict
Diffstat (limited to 'sourcecodes/k-best/src/ls_LOO.c')
| -rw-r--r-- | sourcecodes/k-best/src/ls_LOO.c | 152 |
1 files changed, 0 insertions, 152 deletions
diff --git a/sourcecodes/k-best/src/ls_LOO.c b/sourcecodes/k-best/src/ls_LOO.c deleted file mode 100644 index 57a1fae4..00000000 --- a/sourcecodes/k-best/src/ls_LOO.c +++ /dev/null @@ -1,152 +0,0 @@ -#include <stdlib.h> -#include <string.h> -#include <math.h> -#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<vc_v; ++v) { - int freq = freqp[v]; - if (freq) { - pcfreq += freq; - if(freq<nof_freq2s){ - ++freq2mem[freq]; - } else { - res += freq * log(ess_per_cc + freq - 1); - } - } - } - - if(pcfreq<nof_freq2s){ - ++freq2mem2[pcfreq]; - } else { - res -= pcfreq * log(ess_per_pcc + pcfreq); - } - } - - { - int i; - - for(i=1;i<nof_freq2s;++i){ - int freq2 = freq2mem[i]; - if(freq2) res += freq2 * i * log(ess_per_cc + i - 1); - } - - for(i=1;i<nof_freq2s;++i){ - int freq2 = freq2mem2[i]; - if(freq2) res -= freq2 * i * log(ess_per_pcc + i); - } - - } - - return res > 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<vc_v; ++v) { - int freq = freqp[v]; - if (freq) { - pcfreq += freq; - ++freq2mem[freq]; - } - } - ++freq2mem2[pcfreq]; - } - - { - int i; - - for(i=1;i<nof_freq2s;++i){ - int freq2 = freq2mem[i]; - if(freq2) res += freq2 * i * log(ess_per_cc + i - 1); - } - - for(i=1;i<nof_freq2s;++i){ - int freq2 = freq2mem2[i]; - if(freq2) res -= freq2 * i * log(ess_per_pcc + i); - } - - } - - return res > 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<BIG_LOO_DATA){ - sf = loo_score; - nof_freq2s = N+1; - } else { - sf = big_loo_score; - nof_freq2s = BIG_LOO_DATA; - } - - freq2mem = malloc(nof_freq2s * sizeof(int)); - freq2mem2 = malloc(nof_freq2s * sizeof(int)); - - return sf; -} - -void free_LOO_scorer(){ - if(freq2mem) free(freq2mem); - if(freq2mem2) free(freq2mem2); -} |
