Skyline查询实验数据点的生成

在此前的文章里,我们介绍了Skyline查询的基本概念,并给出了一种基于NN的Skyline查询算法。Skyline查询是多维度数据库中一种非常重要的point query,它最初由 Börzsönyi 等人于2001年提出。在 Börzsönyi 等人于2001年发表的论文[1] 中,作者同时给出了三种分布类型的用于Skyline查询实验的数据集生成方法。如下图所示,这三种数据分布类型分别是独立分布数据集(下图左),正相关分布数据集(下图中)以及负相关(下图右)数据集合。

Skyline查询实验数据点的生成_第1张图片

同时, 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”的数据文件,为了更形象地展示所生成的数据集,我们用软件绘制了它们的散点图,如下所示,其中左图是自相关数据集,右图是负相关数据集。

Skyline查询实验数据点的生成_第2张图片      Skyline查询实验数据点的生成_第3张图片



参考文献

[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.


(本文完)

你可能感兴趣的:(编程语言与程序设计)