skyline查询——bitmap算法

本文介绍了一种名为位图(Bitmap)的高效算法,该算法由Kian-Lee Tan于2002年提出,用于处理Skyline查询。通过将数据点的各个维度值转化为位串,并组合成位图,进而进行与运算来判断是否为SP点。文中还提供了一个具体的实例和MATLAB代码来演示算法的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

位图(Bitmap)算法最先由Kian-Lee Tan在2002年提出,相比于之前该算法的一个创新之处在于只需要把数据点的为所有维度值转化为一个位串,把所有的数据点转化位向量合起来即形成位图。然后进行与运算就判断是否为SP点。
为了更加形象的展示这个算法的流程,笔者简单的演示这个算法流程:
如下表所示的10个数据点

数据点 坐标 位向量
p1 (2,5) (11111110,111110000)
p2 (3,6) (11111100,111100000)
p3 (5,8) (11110000,111000000)
p4 (4,4) (11111000,111111000)
p5 (2,10)(11111110,100000000)
p6 (9,2) (10000000,111111110)
p7 (1,9) (11111111,110000000)
p8 (7,3) (11100000,111111100)
p9 (8,1) (11000000,111111111)
p10 (5,5) (11110000,111110000)
其转换规则如下:
待测数据集是由d维数据点组成的数据集,任意一个数据点p(p1,p2…pd),假设在某i维(1≤i≤d)上有ki个不同属性值,数据集在i维上有ki个不同的值。将他们从大到小排列pi1> pi2>…> piki,没个数据点中第i维的值转化ki个位串,将其投影在[0…1]中,其转化规则是:数据点p在第i维的值为pi,用value(pi)代表pi在上面排第value(pi)位,则根据算法中的规则,从最高位到value(pi)位赋值1,从value(pi)-1位开始的赋值0形成一个位串,将d个位串合起来就形成一个位向量,将所有数据点转换成位向量即可变成一张位图。
把上表的数据的两个维度转化成位图即如下

   d1                   d2

9 8 7 5 4 3 2 1 10 9 8 6 5 4 3 2 1
1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0
1 1 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0
1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0
1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0

接下来就可以来寻找每个点的列位串并进行算法流程演示。
如p1点的坐标值(2,5),把A定义为p1点第一维度坐标值的列位串,把B定义为p1点第二维度坐标值的列位串,首先确定p1点在一维上的值为2,在bitmap中找到第一维度上的“2”,然后按列取串即可得A。同理在第二维度“5”中按列取串即可得到B。如图所示取第一个数据点的列串。
第一个数据点的列位串

可以采用MATLAB编写了这个算法,这个算法中有比较多的按列取串等,在矩阵中可以比较容易的实现。而且MATLAB中有较多的函数可以直接进行排序等。

close all;
clear;
clc;
tic
m=500;
n=2;
flag=0;
a=1;
flag_bitmap=0;
%point=[2,5;3,6;5,8;4,4;2,10;9,2;1,9;7,3;8,1;5,5];
point=100*rand(m,n);%生成30行2列的位于(0,1)的数据点在乘100
point_1=point(:,1);
point_2=point(:,2);
point_1_sort=unique(point_1);
point_2_sort=unique(point_2);
point_1_sort=sort(point_1_sort,'descend');
point_2_sort=sort(point_2_sort,'descend');
len_point1=length(point_1_sort);
len_point2=length(point_2_sort);
for i=1:m
        for j=1:len_point1
            if((point_1(i)~=point_1_sort(j)) && (flag==0))
                bitmap_1(i,j)=1;
            else
                    if(point_1(i)==point_1_sort(j))
                        bitmap_1(i,j)=1;
                        flag=1;
                    else
                        if((point_1(i)~=point_1_sort(j)) && (flag==1))
                                bitmap_1(i,j)=0;
                        end
                    end
            end
        end
        flag=0;
end
flag=0;
for i=1:m
        for j=1:len_point2
            if((point_2(i)~=point_2_sort(j)) && (flag==0))
                bitmap_2(i,j)=1;
            else
                    if(point_2(i)==point_2_sort(j))
                        bitmap_2(i,j)=1;
                        flag=1;
                    else
                        if((point_2(i)~=point_2_sort(j)) && (flag==1))
                                bitmap_2(i,j)=0;
                        end
                    end
            end
        end
        flag=0;
end
for i=1:m
    for j=1:len_point1
        if(point_1(i)==point_1_sort(j))
            temp_1=j;
        end
    end
    for j=1:len_point2
        if(point_2(i)==point_2_sort(j))
            temp_2=j;
        end
    end
    for k=1:m
        temp_A=bitmap_1(k,temp_1);
        temp_B=bitmap_2(k,temp_2);
        temp_C=temp_A & temp_B;
        if(temp_C==1)
            flag_bitmap=flag_bitmap+1;
        end
    end
    if(flag_bitmap==1)
            final(a,1)=point(i,1);
            final(a,2)=point(i,2);
            a=a+1;
    end
    flag_bitmap=0;
end
final
plot(point(:,1),point(:,2),'*');
hold on
plot(final(:,1),final(:,2),'ro');
legend('all point','skyline point');
toc

下面是仿真结果:
这里写图片描述

[1] Borzsony S, Kossmann D, Stocker K. The Skyline operator[C]// International Conference on Data Engineering, 2001. Proceedings. IEEE Xplore, 2001:421-430.
[2] Kossmann D, Ramsak F, Rost S. Shooting stars in the sky: an online algorithm for skyline queries[C]// VLDB 2002, Proceedings of, International Conference on Very Large Data Bases, August 20-23, 2002, Hong Kong, China. DBLP, 2002:275-286.
[3] 朱琳, 关佶红, 周水庚. Skyline计算研究综述[J]. 计算机工程与应用, 2008, 44(6):160-165.
[4] 魏小娟, 杨婧, 李翠平,等. Skyline查询处理[J]. 软件学报, 2008, 19(6):1386-1400.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值