45 #include "quickhvolume.h"
64 static double InExClusion(
point* zero,
point* one,
int n,
int* idx,
point* P);
88 C[
i][j] = C[i-1][j-1] + C[i-1][j];
101 C[
i][j] += C[
i][j-1];
108 static double InExClusion(
point* zero,
point* one,
int n,
int* idx,
point* PS)
126 intercept(&(PTS[i+1]), one, &(PS[idx[i]]));
128 res += HV(zero, &(PTS[i]));
134 memcpy(&counts[1], &C[n][0], (n+1)*
sizeof(
int));
141 C2P[
i] = counts[ones];
143 intercept(&(PTS[C2P[i]]), &(PTS[C2P[
Rbit(i)]]), &(PTS[C2P[
Rpop(i)]]));
145 res += HV(zero, &(PTS[C2P[i]]));
147 res -= HV(zero, &(PTS[C2P[i]]));
151 ones-=fastLog2(
Rbit(i));
188 T = InExClusion(zero, one, n, idx, PS);
196 H = HV(zero, &(PTS[C2P[i]]));
202 exHV[idx[fastLog2(
Rbit(j))]] += H;
207 ones-=fastLog2(
Rbit(i));
double exInExClusion(point *zero, point *one, int n, int *idx, point *PS, double *exHV)
This returns iterators for diferent type. WARNING, these objects are singleton, so new overwrites exi...
Simple point interface. Contains simple point manipulation functions.
struct point __attribute__((aligned(16))) point
All points must be aligned for SSE2.
Inclusion Exclusion Algorithm better than HSO for high d and small n.
Point is an array of coordinates, in a struct for simple and fast copy.