00001
00011 #include <GKlib.h>
00012
00013
00014
00015
00016
00017
00018
00019
00020 void gk_RandomPermute(size_t n, int *p, int flag)
00021 {
00022 gk_idx_t i, u, v;
00023 int tmp;
00024
00025 if (flag == 1) {
00026 for (i=0; i<n; i++)
00027 p[i] = i;
00028 }
00029
00030 for (i=0; i<n/2; i++) {
00031 v = RandomInRange(n);
00032 u = RandomInRange(n);
00033 gk_SWAP(p[v], p[u], tmp);
00034 }
00035 }
00036
00037
00038
00061
00062 void gk_array2csr(size_t n, size_t range, int *array, int *ptr, int *ind)
00063 {
00064 gk_idx_t i;
00065
00066 gk_iset(range+1, 0, ptr);
00067
00068 for (i=0; i<n; i++)
00069 ptr[array[i]]++;
00070
00071
00072 MAKECSR(i, range, ptr);
00073 for (i=0; i<n; i++)
00074 ind[ptr[array[i]]++] = i;
00075 SHIFTCSR(i, range, ptr);
00076 }
00077
00078
00079
00080
00081
00082
00083 int gk_log2(int a)
00084 {
00085 gk_idx_t i;
00086
00087 for (i=1; a > 1; i++, a = a>>1);
00088 return i-1;
00089 }
00090
00091
00092
00093
00094
00095 int gk_ispow2(int a)
00096 {
00097 return (a == (1<<gk_log2(a)));
00098 }
00099
00100
00101
00102
00103
00104 float gk_flog2(float a)
00105 {
00106 return log(a)/log(2.0);
00107 }
00108