示例#1
0
static void merge_init_Tdt(int k1, int k2, merge_alpha_t *M) {
  int d, k;
  /*
   *   build local store
   */
  M->Tdt = u16vec(ddN.DT); 
  M->TdT = u16vec(ddN.DT); 
  M->Ndt = u16vec(ddN.DT);
  if ( !M->Ndt || !M->TdT || !M->Tdt  )
    yap_quit("Out of memory in likemerge()\n");

  /*
   *  initialise all data entries to simple sum
   */
  M->TDt = ddS.TDt[k1] + ddS.TDt[k2];
  for (d=0; d<ddN.DT; d++) {
    M->Tdt[d] = ddS.Tdt[d][k1] + ddS.Tdt[d][k2];
    M->Ndt[d] = ddS.Ndt[d][k1] + ddS.Ndt[d][k2];
    M->TdT[d] = 0;
    for (k=0; k<ddN.T; k++)
      M->TdT[d] += ddS.Tdt[d][k];
    assert(M->Tdt[d]<=M->Ndt[d]);
  }
  M->TDTm = ddS.TDT - M->TDt;
#ifndef NDEBUG
  for (d=0; d<ddN.DT; d++) {
    assert(M->Tdt[d]<=M->Ndt[d]);
  }
#endif
}
示例#2
0
static void merge_init_Twt(int k1, int k2, merge_beta_t *M) {
  int w;
  /*
   *   build local store
   */
  M->Twt = u16vec(ddN.W); 
  M->TwT = u32vec(ddN.W); 
  M->Nwt = u32vec(ddN.W);
  if ( !M->Nwt || !M->TwT || !M->Twt  )
    yap_quit("Out of memory in likemerge()\n");

  /*
   *  initialise all data entries to simple sum
   */
  M->NWt = ddS.NWt[k1] + ddS.NWt[k2];
  M->TWt = ddS.TWt[k1] + ddS.TWt[k2];
  for (w=0; w<ddN.W; w++) {
    M->Twt[w] = ddS.Twt[w][k1] + ddS.Twt[w][k2];
    M->Nwt[w] = ddS.Nwt[w][k1] + ddS.Nwt[w][k2];
    M->TwT[w] = ddS.TwT[w];
  }
  M->TWTm = ddS.TWT - M->TWt;
#ifndef NDEBUG
  for (w=0; w<ddN.W; w++) {
    assert(M->Twt[w]<=M->Nwt[w]);
  }
#endif
}
示例#3
0
/*
 *  place all topic k2 data in topic k1
 */
double likemerge(int k1, int k2) {
  int t, d, k;
  /*
   *   storing/saving
   */
  uint32_t TDt;
  uint16_t *Tdt;
  /*
   *  cache
   */
  uint16_t *TdT;
  uint16_t *Ndt;
  /*
   *    sorting on moves
   */
  uint16_t *Tdt_up;
  uint16_t *Tdt_down;
  float *score_up;
  float *score_down;
  float base_up;
  float base_down;

  double likelihood = 0;

  if ( k1<=0 || k2<=0 ) 
    return 0.0;
 
  /*
   *    we save all the old values relevant to topic k1,
   *    and overwrite temporarily so we can use standard
   *    routines/scoring functions
   */
  Tdt = u16vec(ddN.DT); 
  TdT = u16vec(ddN.DT);
  Ndt = u16vec(ddN.DT);
  Tdt_up = u16vec(ddN.DT);
  Tdt_down = u16vec(ddN.DT);
  score_up = u16vec(ddN.DT);
  score_down = u16vec(ddN.DT);
  if ( !score_down || !score_up || !Ndt || !TdT ||
       !Tdt || !Tdt_up || !Tdt_down )
    yap_quit("Out of memory in likemerge()\n");

  /*
   *  initialise
   */
  TDt = 0; ???????????????
  for (d=0; d<ddN.DT; d++) {