⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 util.c

📁 多层权核k均值算法
💻 C
📖 第 1 页 / 共 2 页
字号:
}/************************************************************************** These functions return the index of the maximum element in a vector**************************************************************************/int idxamax_strd(int n, idxtype *x, int incx){  int i, max=0;  n *= incx;  for (i=incx; i<n; i+=incx)    max = (x[i] > x[max] ? i : max);  return max/incx;}/************************************************************************** These functions return the index of the maximum element in a vector**************************************************************************/int samax(int n, float *x){  int i, max=0;  for (i=1; i<n; i++)    max = (x[i] > x[max] ? i : max);  return max;}/************************************************************************** These functions return the index of the almost maximum element in a vector**************************************************************************/int samax2(int n, float *x){  int i, max1, max2;  if (x[0] > x[1]) {    max1 = 0;    max2 = 1;  }  else {    max1 = 1;    max2 = 0;  }  for (i=2; i<n; i++) {    if (x[i] > x[max1]) {      max2 = max1;      max1 = i;    }    else if (x[i] > x[max2])      max2 = i;  }  return max2;}/************************************************************************** These functions return the index of the minimum element in a vector**************************************************************************/int idxamin(int n, idxtype *x){  int i, min=0;  for (i=1; i<n; i++)    min = (x[i] < x[min] ? i : min);  return min;}/************************************************************************** These functions return the index of the minimum element in a vector**************************************************************************/int samin(int n, float *x){  int i, min=0;  for (i=1; i<n; i++)    min = (x[i] < x[min] ? i : min);  return min;}/************************************************************************** This function sums the entries in an array**************************************************************************/int idxsum(int n, idxtype *x){  int i, sum = 0;  for (i=0; i<n; i++)    sum += x[i];  return sum;}/************************************************************************** This function sums the entries in an array**************************************************************************/int idxsum_strd(int n, idxtype *x, int incx){  int i, sum = 0;  for (i=0; i<n; i++, x+=incx) {    sum += *x;  }  return sum;}/************************************************************************** This function sums the entries in an array**************************************************************************/void idxadd(int n, idxtype *x, idxtype *y){  for (n--; n>=0; n--)    y[n] += x[n];}/************************************************************************** This function sums the entries in an array**************************************************************************/int charsum(int n, char *x){  int i, sum = 0;  for (i=0; i<n; i++)    sum += x[i];  return sum;}/************************************************************************** This function sums the entries in an array**************************************************************************/int isum(int n, int *x){  int i, sum = 0;  for (i=0; i<n; i++)    sum += x[i];  return sum;}/************************************************************************** This function sums the entries in an array**************************************************************************/float ssum(int n, float *x){  int i;  float sum = 0.0;  for (i=0; i<n; i++)    sum += x[i];  return sum;}/************************************************************************** This function sums the entries in an array**************************************************************************/float ssum_strd(int n, float *x, int incx){  int i;  float sum = 0.0;  for (i=0; i<n; i++, x+=incx)    sum += *x;  return sum;}/************************************************************************** This function sums the entries in an array**************************************************************************/void sscale(int n, float alpha, float *x){  int i;  for (i=0; i<n; i++)    x[i] *= alpha;}/************************************************************************** This function computes a 2-norm**************************************************************************/float snorm2(int n, float *v){  int i;  float partial = 0;   for (i = 0; i<n; i++)    partial += v[i] * v[i];  return sqrt(partial);}/************************************************************************** This function computes a 2-norm**************************************************************************/float sdot(int n, float *x, float *y){  int i;  float partial = 0;   for (i = 0; i<n; i++)    partial += x[i] * y[i];  return partial;}/************************************************************************** This function computes a 2-norm**************************************************************************/void saxpy(int n, float alpha, float *x, int incx, float *y, int incy){  int i;   for (i=0; i<n; i++, x+=incx, y+=incy)     *y += alpha*(*x);}/************************************************************************** This file randomly permutes the contents of an array.* flag == 0, don't initialize perm* flag == 1, set p[i] = i **************************************************************************/void RandomPermute(int n, idxtype *p, int flag){  int i, u, v;  idxtype tmp;  if (flag == 1) {    for (i=0; i<n; i++)      p[i] = i;  }  if (n <= 4)    return;  for (i=0; i<n; i+=16) {    u = RandomInRangeFast(n-4);    v = RandomInRangeFast(n-4);    SWAP(p[v], p[u], tmp);    SWAP(p[v+1], p[u+1], tmp);    SWAP(p[v+2], p[u+2], tmp);    SWAP(p[v+3], p[u+3], tmp);  }}/************************************************************************** This function generates random initialization **************************************************************************/void RandomInit(int n, int k, idxtype *label){  int i, chunksize, j;  idxtype tmp;  int *p= imalloc(n, "Util: RandomInit\n");  RandomPermute(n, p, 1);  chunksize = n / k +1;  j=0;  for (i=0; i<n; i++){    label[p[i]] = j;    if ((i+1)% chunksize ==0)      j++;  }  free (p);}/************************************************************************** This function returns true if the a is a power of 2**************************************************************************/int ispow2(int a){  for (; a%2 != 1; a = a>>1);  return (a > 1 ? 0 : 1);}/************************************************************************** This function initializes the random number generator**************************************************************************/void InitRandom(int seed){  if (seed == -1) {#ifndef __VC__    srand48(7654321L);  #endif    srand(4321);    }  else {#ifndef __VC__    srand48(seed);  #endif    srand(seed);    }}/************************************************************************** This function returns the log2(x)**************************************************************************/int log2(int a){  int i;  for (i=1; a > 1; i++, a = a>>1);  return i-1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -