同时, Börzsönyi 等人亦给出了生成这些类型测试数据集的源代码,这也成为后来进行“Skyline查询”研究的人最常使用的人工合成数据生成方法(尤其是Anti-Correlated数据集,例如文献[2]、[3]、[4])。原作者代码写于十几年前,而且是C、C++混合编程实现的,加之注释完全是用德文写的,使用起来还是有些困难。为了便于研究,笔者对其进行了微调。使其更符合C++ 11标准,如下所示:
#include
#include
#include
#include
#include
#define MAXINT 2147483647
#define sqr(a) ((a)*(a))
using namespace std;
int Statistics_Count;
double* Statistics_SumX;
double* Statistics_SumXsquared;
double* Statistics_SumProduct;
void InitStatistics(int Dimensions)
// ==============
// initialisiert Zählvariablen der Statistik
{
Statistics_SumX = new double[Dimensions];
Statistics_SumXsquared = new double[Dimensions];
Statistics_SumProduct = new double[Dimensions*Dimensions];
Statistics_Count = 0;
for (int d=0; d=1) goto again;
for (int d=0; d=1) goto again;
for (int d=0; d
有了上面这些函数,那么你在其他函数中做简单调用就能生成想要的测试数据集了。下面我们给出一个简单的例子,分别生成两个2D的含有500个点的数据集,一个是自相关的,一个是负相关的。代码如下
int main(int argc, char** argv)
{
//Verteilung = E(qually) | C(orrelated) | A(nti-correlated);
GenerateData(2,'A',500, "data_anti_corr");
GenerateData(2,'C',500, "data_correlate");
return 0;
}
上述代码会生成两个名为“data_anti_corr”和“data_correlate”的数据文件,为了更形象地展示所生成的数据集,我们用软件绘制了它们的散点图,如下所示,其中左图是自相关数据集,右图是负相关数据集。
参考文献
[1] Stephan Börzsönyi , Donald Kossmann , Konrad Stocker, The Skyline Operator, Proceedings 17th International Conference on Data Engineering: 421–430. , Heidelberg, Germany, 2001.
[2] Y. Tao, L. Ding, X. Lin, and J. Pei. Distance-based representative skyline. ICDE, 2009.
[3] D. Nanongkai, A. D. Sarma, A. Lall, R. J. Lipton, and J. Xu. Regret-Minimizing Representative Databases. The 36th International Conference on VLDB, September 13-17, 2010, Singapore.
[4] T. K. Faulkner, W. Brackenbury, A. Lall. k-Regret Queries with Nonlinear Utilities. The 42nd International Conference on VLDB, September 5-9, 2016, New Delhi, India.