注:本人不是主修大数据的,所以都是本人的一些粗浅理解~
文章标题:用预处理让大数据中查询方法变得可行
作者:樊文飞,Floris Geerts,Frank Neven
1. 介绍(Introduction)
在普通数据库中,我们可以采用一些直观的查询方法就能够很快的获得数据。能够在PTIME(多项式时间, Polynomial-time, )内得到回应的查询,我们称之为是可处理的查询。
而在大数据中,我们需要一些额外的策略让数据的查询变得可处理。为什么?
若我们有一个1PB的数据集,假设使用扫描速度为6GB/s的硬盘进行线性扫描,那么所需要的时间是1.9天。
所以我们就可以采用构建索引的方式,把成本放在预处理中,这样规避线性扫描,可以在几秒内获得结果。
例1. 假设我们有一个查询类(指一组相关的查询的集合,通常由共同的特征或属性。),对于一个关系𝐷上的查询
∈
,
∈
,在其中找出一个元组𝑡∈𝐷,例如𝑡𝐴=𝑐t[A]=c,其中𝐴是𝐷的一个属性,𝑐为一个常数。我们可以在一次性的预处理步骤中对𝐷的𝐴列值构建一个B+树,这样我们就可以利用B+树上的索引,在𝑂(log|𝐷|)时间中便可以完成对
的查询。
除了上述的预处理方式,还有其他的预处理方式比如:
保留查询的答案而不是保留数据本身的查询的保留压缩方案;
构建视图,使得可以使用这些视图回答查询而不需要访问原始大数据;
有界增量算法:在对原始数据进行一次查询评估(作为预处理)后,根据数据的变化递增地评估查询,以使查询评估的成本取决于变化的大小,而不是原始大数据的大小。
在大数据背景下,我们需要知道哪些查询类是可处理的?预处理对其中的多少数据是有效的?PTIME查询类在预处理后在大数据中是否同样适用?如果不是,是否可以转换为可处理的?其中是否存在完备问题(如果你能够在多项式时间内解决一个完备问题,那么你可以在多项式时间内解决类中的所有问题。)?
贡献(Contribution)
(1) Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询:我们提出了Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询概念。假设有一个查询类𝒬,其中的查询都是对数据库𝐷进行操作。如果存在一个多项式Π(·),对𝐷都可以在时间Π(|𝐷|)(|D|为数据量)内被转化为𝐷'(完成查询),那么可以说查询𝒬是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。而且,对于所有的查询𝒬∈𝑄,𝑄(𝐷)也可以像 𝑄(𝐷')把复杂度降到NC(多项式对数时间)之内。我们用Π𝑇表示所有Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询类的集合。
上述中,想要达到效果需要对数据库𝐷进行预处理,让它的查询时间在PTIME之内。再通过并行计算,让查询速度在NC内。
对于复杂类(P类:多项式时间可解问题、NP类:非确定性多项式时间可解问题、NP-完全类:若能够在多项式时间内解决一个NP完全问题,那么您可以在多项式时间内解决所有NP类问题、不可判定类),我们主要是针对布尔查询语言进行试验。
NC (Parallel poly-logarithmic time ,并行多对数时间):是计算复杂性理论中的一个概念,它描述了一种并行计算模型中的计算时间复杂度。NC 表示"Nick's Class"。其中计算问题被分为多个子问题,并且这些子问题可以在并行处理器上同时进行处理。问题的并行计算时间复杂度是多项式级别的对数。
(2)属于Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的查询类:
关系选择查询;
图上的可达性查询;
静态数组上的最小范围查询;
计算树和有向无环图(DAGs)中的最低公共祖先的查询;
以及一类用于广度深度搜索的图查询。
(3)我们还会使用NC约化让查询变为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。有一些查询本身不是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,但是可以通过NC约化的方式对数据进行重构并对查询部分进行划分。
例2.在广度深度搜索中,有向图输入为𝐺=(𝑉,𝐸), 𝑉中一对节点(𝑢,𝑣)。由节点编号引发的图𝐺中的广度深度搜索中,节点𝑢是否在节点𝑣之前被访问?
在BDS中有两种对决策语言(一种用于描述搜索算法的形式化语言。 )的分解方式。他们将(𝑢,𝑣)作为查询部分,𝐺表示为数据部分, 用
定义经过预处理的查询;𝛾′把𝐺和(𝑢,𝑣)都作为查询。
经过预处理的是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,而不经过预处理的𝛾′也可以通过重构变为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。
符号定义
首先正式定义Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询类(),然后介绍可以定义的决策问题和查询类Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒
和
。
假设一个有限字母表Σ的符号来编码数据和查询。数据可以编码为一个字符串𝐷∈Σ*,对于查询𝑄也是同理。一个字符串𝑥∈Σ∗的长度可以表示为|𝑥|。因此|𝐷|(或者|𝑄|)可以是数据库𝐷(或者查询𝑄 )的大小。
定义语言对(查询语言和编程语言的组合)为𝑆,是Σ* ×Σ*的子集,我们可以用𝑆来编码布尔查询类𝒬,数据库𝐷用来定义𝒬,且𝑄(𝐷)一定为真。换句话说, 𝑆可以表示成一个二元关系,当且仅当𝑄(𝐷) 为真时,𝐷𝑄∈𝑆。
我们用描述约化的过程:
如果𝐴 B(A转化成了B),且𝐵在
中,那么𝐴也在
中。
如果𝐴B, 𝐵
C,那么𝐴
𝐶。
NC约化允许我们将我们的问题约化到另一个我们知道如何解决的问题。
(4)的完备问题。我们预设BDS问题对于
来说是一个完备问题,而BDS问题是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。所以如果问题可以通过分解简化为BDS问题,那么他就是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。
(5)我们将NC约化进行变形,形成了F约化。F约化会将查询类𝒬变为𝒬’,将𝒬的数据集变为𝒬’的数据集,从而无需重构。
2. 背景和相关工作(Background and Related Work)
P和NC:
P表示P类问题,包括那些可以在多项式时间内解决的问题。NC表示NC类问题,是与并行计算相关的复杂性类别,它包括那些可以在多项式时间内在并行计算模型中解决的问题,时间复杂度是。NC中的问题通常被认为是高度并行可行的,即可以在并行计算机上高效解决。
并行和分布式处理(实际应用):
大规模并行(MP)计算模型,以更好地捕捉在具有大量服务器(数量在数万个数量级)的情况下的计算,其中关键的瓶颈是同步步骤或轮次的数量。
MapReduce模拟PRAM的研究,该研究显示了大量NC算法可以在MapReduce框架中实现,而且如果一个NC算法需要t时间,那么它对应的MapReduce版本需要𝑂(𝑡) MapReduce轮次。还有试图通过要求使用log𝑛处理器而不是 来修改PRAM模型的尝试。
预处理:
数据库人员通常会通过构建索引、创建视图和压缩数据等方式对数据进行预处理。对于一个复杂性类别𝐶,如果问题的每个实例都可以分成一个固定部分𝑥和一个可变部分𝑦,并且在通过多项式大小的函数𝑓(·)对𝑥进行预处理后,求解〈f(x),y〉就在类别𝐶中,则称该问题可以编译成𝐶;
在参数化复杂性理论中,固定参数可处理性可以通过核化来进行刻画,核化将参数化问题的给定实例在PTIME内规约到一个大小仅与参数有关而与原始实例的大小无关的实例。这里核化可以看作是一种预处理。
3. 大数据上的可处理查询(Tractable Queries on Big Data)
定义1:定义𝑆是𝒬的语言对,所有的D,𝒬∈Σ,和PTIME预处理函数Π:Σ∗→Σ,存在语言对𝑆’,当且仅当Π(𝐷)𝑄∈𝑆′时,𝐷,𝑄∈𝑆,且𝑆′〈Π(D),Q〉∈S′时,〈D,Q〉∈S,且S′属于NC时,那么语言𝑆是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的。通过PTIME预处理函数ΠΠ可以将𝑆转化为𝑆′时,且𝑆′是NC时, 𝑆是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。
例3. 的语言对
表示为(𝐷,(𝐴,𝑐)),其中𝐷表示关系,𝐴是𝐷的一个属性,𝑐是常数,存在一个元组 𝑡∈𝐷 ,其中𝑡[𝐴]=𝑐。在例1中,是通过B+树的方式,确定它是否能在𝑂(log|𝐷|)时间中便可以完成对
的查询。而在这里,我们给定一个有向图𝐺,存在一个查询
∈
,查询𝐺中是否存在从𝑠到𝑡的路径,其中𝑠和𝑡是𝐺中的节点。这类查询属于图可达性问题(GAP)。分类之后,可知它是log-space约化的NL-complete(非确定性对数空间)类型。
的语言
一个对(𝐺,(𝑆,𝑡)),表示𝐺中存在一条从𝑠到𝑡的路径。因为𝑁𝐿⊆𝑁𝐶,所以
是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。
利用预处理,我们可以首先计算一个矩阵记录𝐺中所有节点对之间的可达性,然后使用该矩阵在𝑂(1)时间内回答𝐺上定义的所有查询 。因此,在预处理之后,我们需要恒定的时间来回答
中的每个查询,而不是NL。
一个问题被归类为NL类,如果存在一个非确定性图灵机,可以在对数空间内解决该问题。“NL” 表示非确定性对数空间。
把问题变成Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒
对于决策问题,可以被表示为语言L⊆Σ∗,我们通过将决策问题视为成对的语言来确定预处理是否可以帮助我们解决大数据上的决策问题。
首先我们需要将问题进行分解,确定哪一部分需要预处理。我们可以尝试将问题分解成三个NC函数:,
, 𝜌(∙,∙)。对于所有的𝑥∈𝐿,如果𝜌(
,
)=𝑥,那么语言𝐿是可以被分解的:
𝛾=,
,𝜌表示
=(
,
,𝜌)表示L的分解
={
,
|x∈𝐿}作为(𝐿,𝛾)的语言对
={
|𝑥∈𝐿}作为(𝐿,𝛾)的数据集
={
|𝑥∈𝐿}作为(𝐿,𝛾)的查询集
也就是将数据部分𝐷变为,查询部分𝑄变为
,𝜌是一个从
和
恢复到原始实例𝑥的逆函数。
例4. 对于决策问题,定义一个关系𝐷,和𝐷的属性𝐴,和一个常数𝑐,是否存在一个元组t∈D,其中𝑡[𝐴]=𝑐。我们可以把这个问题分解为(
,
, 𝜌)。对于问题中的每个实例𝑥=(𝐷,𝐴,𝑐),
就是关系D,
就是(𝐴,𝑐)对。𝜌可以将
和
映射回𝑥。这种分解并不只限制在决策问题中。
定义2:如果对于一个决策问题𝐿来说存在分解𝛾=(,
,𝜌 ),并且语言对𝑆(𝐿,𝛾)是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,那么𝐿是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。我们用Π
表示Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的所有决策问题。也就是说,在𝐿可以被分解成数据和查询两部分, 𝐿可能存在多个因子分解,只要其中一个可以将所有实例转化为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,那么𝐿就是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,因为因子分解允许我们有效地确定L中实例的隶属关系。
我们是否可以通过更改其数据和查询部分使其成为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,类似于决策问题的情况?
我们需要将查询类视为决策问题,利用定义2,对于每个决策问题𝐿,都存在一个语言对,和类
。相反,对于查询类𝒬,还存在一个查询问题
。当
属于一个复杂类C时,𝒬的语言对
也属于𝐶,分解
是可以被𝑄和𝐷直接定义的,从而也可使
变为
。
定义3: 如果问题能变为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的决策问题,就可以做出一系列的查询𝒬是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的。我们用表示Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的所有查询类集合。也就是说当
中的𝒬可以被分解成数据和查询部分时,那么
是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。
描述了,
,
三者的关系。使用P表示所有可以在PTIME内的决策问题类。
4. Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒示例(Π-Tractable Cases)
1. 选择查询:在例1中,通过点查询的是在
中。这可以扩展到范围选择查询。例:有一实例𝐷和模式𝑅,范围选择查询是为了查找是否存在元组𝑡∈𝐷使得
,其中A是R的属性,
,
是常数。我们可以通过构建B+树来对𝐷进行预处理。由此在𝐷上的范围选择查询可以在𝑂(log|𝐷|)得到回答。
2. 列表搜索:例:决策问题:输入:无序列表𝑀和元素𝑒,问:𝑒会在𝑀中出现吗?这个问题属于
。可以将
分解为
,使得
中的实例𝑥=(𝑀,𝑒),
,
。由此语言对
由对(𝑀,𝑒)组成。我们可以定义一个预处理函数Π(∙)在𝑂(|𝑀|log|𝑀|)时间内将𝑀变成有序列表。从而对于所有的查询𝑒,通过二分查找来确定𝑒是否在𝑀中。
3. 最小范围查询:例:问题:输入:一个数组𝐴[1,𝑛]和常数𝑖和𝑗,其中1≤𝑖≤𝑗≤𝑛。问题:找出〖
?
返回的是子数组𝐴[𝑖,𝑗]的最小元素的位置。
可以被分解为数组𝐴[1,𝑛]和查询
。我们可以对数组𝐴[1,𝑛]建立一个O(n)的A[1,n]的辅助结构,让
可以利用该结构在𝑂(1)时间内回答。
4. 最低公共祖先:例:问题:输入:一个有向无环图𝐺,和节点𝑢,𝑣在𝐺中。问题:找出最低公共祖先
?这也是一个搜索问题。G可以被预处理,通过计算𝐺中的所有对节点的LCA,然后给定任意节点对都可以在𝑂(1)中找到。
5. 压缩查询:对于一类查询𝒬,我们通过找到一个有效的压缩函数来找到一个小型的数据库来预处理D,使得所有的查询都可以在较小的查询
中获得答案。与无损压缩相比,他是相对于查询而言的,只保留的查询所有的相关信息。
6. 视图回答查询:使用视图就是将查询𝒬重新表述为,使得𝒬和
是等价的。而对于所有的数据库D,Q(D)=
。当𝒬都可以使用视图来回答时,如果满足(1)视图可以在PTIME中创建和具体化;(2)
可以在并行多对数时间中得到计算。那么𝒬就是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。
7. 增量评价:在查询类𝒬中的查询𝑄,在预处理时,会对𝑄(D)进行一次计算。而当数据库D更新∆𝐷时,我们不需要重新计算𝑄(D⊕∆𝐷),而是增量计算∆𝐷使𝑄(D⊕∆𝐷)= 𝑄(D)。在实际中,∆𝐷通常很小,这样会变得高效很多。
8. 电路值问题(CVP):输入:有一个布尔电路α,和他的编码,和一系列输入
…
,和最后的指定输出𝑦。问题:对于输入
…
来说,α的输出𝑦时正确的吗?布尔电路类似于DAG,也是一个P完备问题,它可以被分解,但是在大数据中会有一定的限制。
9. 顶点覆盖(VC):输入:图𝐺=(𝑉,𝐸),和一个正整数𝐾≤|𝑉|,问题:对于𝐺来说,是否存在一个大小≤𝐾的顶点覆盖?顶点覆盖存在一个集合𝑉′⊆𝑉,使得每个节点(𝑢,𝑣)∈𝐸, 𝑢和𝑣至少有一个在𝑉′中。VC问题是一个NP完备问题。
5. 有分解的NC约化(NC Reducibility with Factorizations)
NC约化:如果问题A可以在非确定性并行计算模型(例如NC类问题)中以多项式时间内解决,并且存在一个多项式时间的约化算法,可以将问题B转化为问题A,那么我们称问题B在NC约化下约化到问题A。这意味着问题B可以被转化为问题A,并且在非确定性并行计算模型中,问题A的高效解决方法可以用来解决问题B。
在研究Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒时,需要研究几个问题:给定一个查询类𝒬,如果他不是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,通过转换可以变为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒吗?如果可以,我们应该使用什么样的转换?能否将一个决策问题转化为?
中是否存在完备问题?
这些问题会在下面的两部分进行回答。
对于决策问题的约化
对于决策问题,可以有多约化方式,可以把一个问题中的不同实例映射到另一个问题的单个实例。
定义4:一个问题语言可以NC约化到
,可以被写成
。如果对于
和
存在分解
和
,还存在NC函数α(∙)和β(∙),对于Σ∗中所有的D和Q来说,使得当且仅当
时,
。
与PTIME约化不同的是,NC约化时根据两个NC函数而不是PTIME函数去定义的;而且表示如果
的其中一个分解
可以约化为任意一个
,那么数据和查询部分就可以分别转化。
1. 在中,约化关系也是可传递的。
2. 对于所有问题的和
,如果
并且
在
之中,如果
是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒那么
也是。
对于查询类的约化
我们已经知道了查询类𝒬和决策问题的关系,所有我们可以类似的方式定义查询类的
。
对于查询类和
分别对应
分别对应决策问题有
和
,如果
可以约化成
,那么
可以约化成
,可以写作
。
如果,那么
。
对于所有的查询类,
,
:
如果,
,那么
;
如果,
属于
,那么
也属于
。也就是说如果
,
是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,那么
也是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。
6.
的完备问题(A Complete Problem for
)
接下来让我们来探究是否存在一个的完备问题。
我们可以给出结论是有完备问题的,但是完备问题不是容易找出。
定义6:问题𝐿是-hard,如果对于在
中的所有的决策问题𝐿′ ,
。如果问题𝐿是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒并且是
-hard ,那么𝐿是
的完备问题。
如果对于所有的查询类𝑄′都在中,那么𝑄′
𝑄,查询类𝒬是
-hard。如果𝒬是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒并且是
-hard ,那么𝒬是
的完备问题。
如果我们存在一个的完备问题𝐿 ,给定了一个问题𝐿′,我们可以通过检查是否𝐿′
𝐿来确定是否𝐿′ϵ
.
由上可知,P中的问题都是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,所有的PTIME中的查询类都可以通过NC约化变成Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。
困难问题是一类问题,它们至少与某个复杂性类别内的一个问题等难。也就是说,如果一个问题是困难问题,那么它至少和该复杂性类别内的某个问题一样难。在P类问题中,困难问题是NP问题,这意味着如果P = NP,那么P类问题中的所有问题都可以在多项式时间内解决。
无法变成Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的问题:除非P=NP, 里
里没有NP完备问题。换句话说,像3SAT问题和VC问题不管使用什么分解方法,都是无法转变为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。
7.保持约化的分解(Factorization Preserving Reductions)
NC约化允许我们在中通过重构的方法将查询类
转化为
。这样就会产生一个问题就是如果将
的查询部分
转化为
的查询部分
,同时保留原来的查询类
和
会发生什么?我们希望保留固定查询类的约化形式。这种约化方式我们称之为F-约化。
由前几节可知, 如果没有合适的分解,在大数据上做PTIME查询也许是不可行的。而判断Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒需要判断一个前提条件是P是否=NC。
NC约化和F约化的比较
NC约化(非确定性并行多项式时间约化):
NC约化是一种更强的约化关系,其中问题A可以在非确定性并行多项式时间内约化为问题B。这意味着存在一个非确定性并行多项式时间算法,可以将问题A的实例映射到问题B的实例,从而问题A可以在非确定性并行多项式时间内转化为问题B。
NC约化通常用于研究并行计算的复杂性,并且与非确定性并行计算模型(例如NC类问题)有关。这种约化关系考虑了并行计算的因素,而不仅仅是多项式时间内的计算。
F约化(多项式时间约化):
F-约化是一种弱约化关系,其中问题A可以在多项式时间内约化为问题B。这意味着存在一个多项式时间算法,可以将问题A的实例映射到问题B的实例,从而问题A可以在多项式时间内转化为问题B。
F-约化通常用于研究问题的复杂性类别之间的关系,例如,证明一个问题是NP完全问题时,通常需要将其F-约化到一个已知的NP完全问题。
F约化
F约化是针对语言和查询类上,不是在决策问题上。如果存在NC函数α(∙),β(∙),所有的D和Q都在Σ∗中,当且仅当∈
时,
,那么语言
是F可约化的。
如果,则
可以F-约化为
,写作
,其中𝑆是𝑄的语言对。
和NC约化相比,F约化不允许对和
进行重构。对于决策性问题
和
,F约化由
和
定义。
对于任意的语言对,
,
,如果
,
那么
;
如果
并且
和
在
中,那么
和
等价。
PTIME和Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询
在NC约化下,所有PTIME查询类都可以通过约化生成Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询类来达到Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。相比之下,当涉及到F –约化时,这不再是可能的。
除非P=NC,P中存在一个查询类但不是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,而且它不能F约化为任何Π-tractable查询类。
所以和P的区别是:虽然Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询类必须在P中,但PTIME查询类不一定是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒; P中的任何查询类Q都可以通过
约化成Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。在不允许重构的情况下, 也就是
被使用时,除非P=NC,Q可能不会转化为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。
F-约化下的完备问题
如果𝑄′𝑄对于所有的𝑄′∈
,那么𝑄对于
时F-约化是困难的。如果𝑄是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒而且对于F-约化是困难的,那他对于F-约化就是完备的。
在F-约化中很难找到一类查询对于是完备的。
8.结论
这是利用预处理范式在大数据上进行可处理查询的第一次尝试。提出了Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒概念,来描述大数据上可行的查询,还介绍了可以变为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的决策问题和查询类,我们展示了几个查询类和决策问题是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。还介绍了两种形式的NC约化(和
),并证明了他们是可传递的,并且和它们的对应的查询类(
和
)的集合兼容。
主要的结论有以下:
1. 𝑁𝐶 ⊆⊆ 𝑃,除非P=NC,
∈𝑃,并不是所有的PTIME查询是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒
2. P中的所有查询都可以通过变为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒
待解决的问题有:
1. 虽然NC是目前最流行并行时间复杂度模型,但是基于NC的PRAM可能不精确。
2. 在中,完备查询类是和P是否=NC相关的,这还是一个开放性问题。
3.到目前为止,我们在研究Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒时只考虑了布尔查询和决策问题
4. 我们只研究了两种形式的还原。
5.使用预处理的查询求值方面还有许多悬而未决的问题。给定一个可以生成Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的问题,我们如何确定一个适当地选择要预处理的数据集的分解,以便可以在并行多对数时间中解决问题实例?如果给定的问题无法解决Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,我们是否仍然可以预处理其数据集,以便可以开发近似并行的多对数时间算法来解决该问题?