예제 #1
0
// the cols contains codevectors
double kmeansiter(Array<vec> &DB, mat &codebook)
{
  int    DIM = DB(0).length(), SIZE = codebook.cols(), T = DB.length();
  vec    x, xnum(SIZE);
  mat    xsum(DIM, SIZE);
  int    MinIndex, i, j, k;
  double   MinS, S, D, *xp, *cp;

  xsum.clear();
  xnum.clear();

  D = 1E20;
  D = 0;
  for (k = 0;k < T;k++) {
    x = DB(k);
    xp = x._data();
    MinS = 1E20;
    MinIndex = 0;
    for (i = 0;i < SIZE;i++) {
      cp = &codebook(0, i);
      S = sqr(xp[0] - cp[0]);
      for (j = 1;j < DIM;j++) {
        S += sqr(xp[j] - cp[j]);
        if (S >= MinS) goto sune;
      }
      MinS = S;
      MinIndex = i;
    sune:
    void();
    }
    D += MinS;
    cp = &xsum(0, MinIndex);
    for (j = 0;j < DIM;j++) {
      cp[j] += xp[j];
    }
    xnum(MinIndex)++;
  }
  for (i = 0;i < SIZE;i++) {
    for (j = 0;j < DIM;j++) {
      codebook(j, i) = xsum(j, i) / xnum(i);
    }
  }
  return D;
}
예제 #2
0
파일: libevil.c 프로젝트: amarts/libevil
static void
md5str_to_md5sum (const char *str, unsigned char *sum)
{
        int  i = 0;
        int  j = 0;
        int  ch = 0;

        for (i = 0; i < 32; i++) {
                if (!(i % 2)) {
                        ch = xnum (str[i]);
                        continue;
                }
                ch <<= 4;
                ch += xnum (str[i]);

                sum[j] = ch;
                j++;
        }
}