阅读日记——“Making Queries Tractable on Big Data with Preprocessing”

注:本人不是主修大数据的,所以都是本人的一些粗浅理解~ 

文章标题:用预处理让大数据中查询方法变得可行

作者:樊文飞,Floris Geerts,Frank Neven

1. 介绍(Introduction)

在普通数据库中,我们可以采用一些直观的查询方法就能够很快的获得数据。能够在PTIME多项式时间, Polynomial-time, n^{k})内得到回应的查询,我们称之为是可处理的查询。

而在大数据中,我们需要一些额外的策略让数据的查询变得可处理。为什么?

若我们有一个1PB的数据集,假设使用扫描速度为6GB/s的硬盘进行线性扫描,那么所需要的时间是1.9天。

所以我们就可以采用构建索引的方式,把成本放在预处理中,这样规避线性扫描,可以在几秒内获得结果。

1. 假设我们有一个查询类(指一组相关的查询的集合,通常由共同的特征或属性。)Q_{1}对于一个关系𝐷上的查询\varrho_{1}Q_{1}\varrho_{1}Q_{1}在其中找出一个元组𝑡𝐷,例如𝑡𝐴=𝑐t[A]=c,其中𝐴𝐷的一个属性,𝑐为一个常数。我们可以在一次性的预处理步骤中对𝐷𝐴列值构建一个B+树,这样我们就可以利用B+树上的索引,在𝑂(log⁡|𝐷|)时间中便可以完成对\varrho_{1}的查询。

除了上述的预处理方式,还有其他的预处理方式比如:

保留查询的答案而不是保留数据本身的查询的保留压缩方案;

构建视图,使得可以使用这些视图回答查询而不需要访问原始大数据;

有界增量算法:在对原始数据进行一次查询评估(作为预处理)后,根据数据的变化递增地评估查询,以使查询评估的成本取决于变化的大小,而不是原始大数据的大小。

在大数据背景下,我们需要知道哪些查询类是可处理的?预处理对其中的多少数据是有效的?PTIME查询类在预处理后在大数据中是否同样适用?如果不是,是否可以转换为可处理的?其中是否存在完备问题(如果你能够在多项式时间内解决一个完备问题,那么你可以在多项式时间内解决类中的所有问题。)?

贡献(Contribution)

(1) Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询:我们提出了Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询概念。假设有一个查询类𝒬,其中的查询都是对数据库𝐷进行操作。如果存在一个多项式Π(·),对𝐷都可以在时间Π(|𝐷|)|D|为数据量)内被转化为𝐷'(完成查询),那么可以说查询𝒬是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。而且,对于所有的查询𝒬∈𝑄,𝑄(𝐷)也可以像 𝑄(𝐷')把复杂度降到NC(多项式对数时间)之内。我们用Π𝑇Q^{0}表示所有Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询类的集合。

上述中,想要达到效果需要对数据库𝐷进行预处理,让它的查询时间在PTIME之内。再通过并行计算,让查询速度在NC内。

对于复杂类(P类:多项式时间可解问题、NP类:非确定性多项式时间可解问题、NP-完全类:若能够在多项式时间内解决一个NP完全问题,那么您可以在多项式时间内解决所有NP类问题、不可判定类),我们主要是针对布尔查询语言进行试验。

NC  (Parallel poly-logarithmic time ,并行多对数时间):是计算复杂性理论中的一个概念,它描述了一种并行计算模型中的计算时间复杂度。NC 表示"Nick's Class"。其中计算问题被分为多个子问题,并且这些子问题可以在并行处理器上同时进行处理。问题的并行计算时间复杂度是多项式级别的对数O(\log_{k}n)

(2)属于Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的查询类:

关系选择查询;

图上的可达性查询;

静态数组上的最小范围查询;

计算树和有向无环图(DAGs)中的最低公共祖先的查询;

以及一类用于广度深度搜索的图查询。

(3)我们还会使用NC约化让查询变为Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。有一些查询本身不是Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,但是可以通过NC约化的方式对数据进行重构并对查询部分进行划分。

例2.在广度深度搜索中,有向图输入为𝐺=(𝑉,𝐸), 𝑉中一对节点(𝑢,𝑣)。由节点编号引发的图𝐺中的广度深度搜索中,节点𝑢是否在节点𝑣之前被访问?

BDS中有两种对决策语言(一种用于描述搜索算法的形式化语言。 )L_{BDS}的分解方式。他们将(𝑢,𝑣)作为查询部分,𝐺表示为数据部分, \gamma_{BDS}定义经过预处理的查询;𝛾𝐺(𝑢,𝑣)都作为查询。

经过预处理的\gamma_{BDS}Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,而不经过预处理的𝛾也可以通过重构变为Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒

符号定义

首先正式定义Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询类(\Pi T_{Q}^{0}),然后介绍可以定义的决策问题和查询类Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒 \Pi T_{P}^{0}\Pi T_{Q}^{0}

假设一个有限字母表Σ的符号来编码数据和查询。数据可以编码为一个字符串𝐷∈Σ*,对于查询𝑄也是同理。一个字符串𝑥Σ的长度可以表示为|𝑥|。因此|𝐷|(或者|𝑄|)可以是数据库𝐷(或者查询𝑄 )的大小。

定义语言对(查询语言和编程语言的组合)为𝑆,是Σ* ×Σ*的子集,我们可以用𝑆来编码布尔查询类𝒬,数据库𝐷用来定义𝒬,且𝑄(𝐷)一定为真。换句话说, 𝑆可以表示成一个二元关系,当且仅当𝑄(𝐷) 为真时𝐷𝑄𝑆

我们用\leqslant _{fa}^{NC}描述约化的过程:

        如果𝐴\leqslant _{fa}^{NC} BA转化成了B),且𝐵\Pi T_{P}中,那么𝐴也在\Pi T_{P}中。

        如果𝐴\leqslant _{fa}^{NC}B 𝐵\leqslant _{fa}^{NC}C,那么𝐴\leqslant _{fa}^{NC}𝐶

NC约化允许我们将我们的问题约化到另一个我们知道如何解决的问题。

(4)\Pi T_{P}的完备问题。我们预设BDS问题对于\Pi T_{P}来说是一个完备问题,而BDS问题是Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。所以如果问题可以通过分解简化为BDS问题,那么他就是Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒

(5)我们将NC约化进行变形,形成了F约化。F约化会将查询类𝒬变为𝒬’,将𝒬的数据集变为𝒬’的数据集,从而无需重构。

2. 背景和相关工作(Background and Related Work)

PNC

P表示P类问题,包括那些可以在多项式时间内解决的问题。NC表示NC类问题,是与并行计算相关的复杂性类别,它包括那些可以在多项式时间内在并行计算模型中解决的问题,时间复杂度是O(log^{O(1)}n)NC中的问题通常被认为是高度并行可行的,即可以在并行计算机上高效解决。 

并行和分布式处理(实际应用):

大规模并行(MP)计算模型,以更好地捕捉在具有大量服务器(数量在数万个数量级)的情况下的计算,其中关键的瓶颈是同步步骤或轮次的数量。

MapReduce模拟PRAM的研究,该研究显示了大量NC算法可以在MapReduce框架中实现,而且如果一个NC算法需要t时间,那么它对应的MapReduce版本需要𝑂(𝑡) MapReduce轮次。还有试图通过要求使用log⁡𝑛处理器而不是 n^{O(1)}来修改PRAM模型的尝试。

预处理:

数据库人员通常会通过构建索引、创建视图和压缩数据等方式对数据进行预处理。对于一个复杂性类别𝐶,如果问题的每个实例都可以分成一个固定部分𝑥和一个可变部分𝑦,并且在通过多项式大小的函数𝑓(·)对𝑥进行预处理后,求解f(x),y〉就在类别𝐶中,则称该问题可以编译成𝐶;

在参数化复杂性理论中,固定参数可处理性可以通过核化来进行刻画,核化将参数化问题的给定实例在PTIME内规约到一个大小仅与参数有关而与原始实例的大小无关的实例。这里核化可以看作是一种预处理

3. 大数据上的可处理查询(Tractable Queries on Big Data)

定义1:定义𝑆𝒬的语言对,所有的D,𝒬Σ,和PTIME预处理函数Π:ΣΣ存在语言对𝑆当且仅当Π(𝐷)𝑄𝑆′时𝐷,𝑄𝑆且𝑆′Π(D),Q〉∈S′时,〈D,Q〉∈SS′属于NC时,那么语言𝑆Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的。通过PTIME预处理函数ΠΠ可以将𝑆转化为𝑆,且𝑆′NC时, 𝑆是Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。

例3. Q_{1}的语言对S_{1}表示为(𝐷,(𝐴𝑐)),其中𝐷表示关系,𝐴𝐷的一个属性,𝑐是常数,存在一个元组 𝑡∈𝐷 ,其中𝑡[𝐴]=𝑐。在例1中,是通过B+树的方式,确定它是否能在𝑂(log|𝐷|)时间中便可以完成对Q_{1}的查询。而在这里,我们给定一个有向图𝐺,存在一个查询\varrho _{2}Q_{2},查询𝐺中是否存在从𝑠𝑡的路径,其中𝑠𝑡𝐺中的节点。这类查询属于图可达性问题(GAP)。分类之后,可知它是log-space约化的NL-complete(非确定性对数空间)类型。 \varrho _{2}的语言S _{2}一个对𝐺,(𝑆𝑡)),表示𝐺中存在一条从𝑠𝑡的路径。因为𝑁𝐿𝑁𝐶,所以\varrho _{2}是Π𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。

利用预处理,我们可以首先计算一个矩阵记录𝐺中所有节点对之间的可达性,然后使用该矩阵在𝑂(1)时间内回答𝐺上定义的所有查询\varrho _{2} 。因此,在预处理之后,我们需要恒定的时间来回答\varrho _{2}中的每个查询,而不是NL

一个问题被归类为NL类,如果存在一个非确定性图灵机,可以在对数空间内解决该问题。“NL” 表示非确定性对数空间。

把问题变成Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒

对于决策问题,可以被表示为语言LΣ,我们通过将决策问题视为成对的语言来确定预处理是否可以帮助我们解决大数据上的决策问题。

首先我们需要将问题进行分解,确定哪一部分需要预处理。我们可以尝试将问题分解成三个NC函数:\pi _{1}(\cdot ),\pi _{2}(\cdot )𝜌(,∙)。对于所有的𝑥𝐿,如果𝜌(\pi _{1}(x ),\pi _{2}(x))=𝑥,那么语言𝐿是可以被分解的:

𝛾=\pi _{1}(\cdot ),\pi _{2}(\cdot ),𝜌表示L_{\gamma }=(\pi _{1}(\cdot ),\pi _{2}(\cdot ),𝜌)表示L的分解

S_{(L,\gamma )}={\pi _{1}(x),\pi _{2}(x)|x𝐿}作为𝐿,𝛾的语言对

L_{(D,\gamma )}={\pi _{1}(x)|𝑥𝐿}作为𝐿,𝛾的数据集

L_{(Q,\gamma )}={\pi _{2}(x)|𝑥𝐿}作为𝐿,𝛾的查询集

也就是将数据部分𝐷变为\pi _{1}(x),查询部分𝑄变为\pi _{2}(x)𝜌是一个从\pi _{1}(x)\pi _{2}(x)恢复到原始实例𝑥的逆函数。

例4. 对于决策问题L_{s},定义一个关系𝐷,和𝐷的属性𝐴,和一个常数𝑐,是否存在一个元组t∈D,其中𝑡[𝐴]=𝑐。我们可以把这个问题分解为(\pi _{1},\pi _{2}𝜌)。对于问题中的每个实例𝑥=(𝐷,𝐴,𝑐) \pi _{1}(x)就是关系D \pi _{2}(x)就是(𝐴,𝑐)对。𝜌可以将\pi _{1}(x)\pi _{2}(x)映射回𝑥。这种分解并不只限制在决策问题中。

定义2:如果对于一个决策问题𝐿来说存在分解𝛾=(\pi _{1}(\cdot ),\pi _{2}(\cdot ),𝜌 ),并且语言对𝑆(𝐿,𝛾)Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,那么𝐿Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。我们用ΠT_{P}表示Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的所有决策问题。也就是说,在𝐿可以被分解成数据和查询两部分, 𝐿可能存在多个因子分解,只要其中一个可以将所有实例转化为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,那么𝐿就是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,因为因子分解允许我们有效地确定L中实例的隶属关系。

我们是否可以通过更改其数据和查询部分使其成为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,类似于决策问题的情况?

我们需要将查询类视为决策问题,利用定义2,对于每个决策问题𝐿,都存在一个语言对S_{(L,\gamma )},和类L_{(D,\gamma )}相反,对于查询类𝒬,还存在一个查询问题L_{Q}。当L_{Q}属于一个复杂类C时,𝒬的语言对S_{Q}也属于𝐶,分解\gamma _{L_{Q}}是可以被𝑄𝐷直接定义的,从而也可使S_Q变为S_{(L_Q,\gamma _{L_{Q}})}

定义3: 如果问题能变为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的决策问题,就可以做出一系列的查询𝒬Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的。我们用\Pi T_{Q}表示Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的所有查询类集合。也就是说当\Pi T_{Q}中的𝒬可以被分解成数据和查询部分时,那么S_{L_{Q},\gamma} 是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。

描述了\Pi T_{Q}\Pi T_{P}\Pi T_{Q}^0三者的关系。使用P表示所有可以在PTIME内的决策问题类。

4. Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒示例(Π-Tractable Cases)

1. 选择查询:在例1中,通过点查询的Q_1是在\Pi T_{Q}^0中。这可以扩展到范围选择查询。例:有一实例𝐷和模式𝑅,范围选择查询是为了查找是否存在元组𝑡𝐷使得c_1\leqslant t[A]\leqslant c_2,其中AR的属性,c_1c_2是常数。我们可以通过构建B+树来对𝐷进行预处理。由此在𝐷上的范围选择查询可以在𝑂(log|𝐷|)得到回答。

2. 列表搜索:例:决策问题L_1:输入:无序列表𝑀和元素𝑒,问:𝑒会在𝑀中出现吗?这个问题属于\Pi T_{P}。可以将L_1分解为\gamma _1=(\pi _1,\pi _2,\gamma),使得L_1中的实例𝑥=(𝑀,𝑒)\pi _1(x)=M, \pi _2(x)=e。由此语言对S_{L{1},\gamma {1}}由对(𝑀,𝑒)组成。我们可以定义一个预处理函数Π()𝑂(|𝑀|log⁡|𝑀|)时间内将𝑀变成有序列表。从而对于所有的查询𝑒,通过二分查找来确定𝑒是否在𝑀中。

3. 最小范围查询:例:问题L_2:输入:一个数组𝐴[1,𝑛]和常数𝑖𝑗,其中1𝑖𝑗𝑛。问题:找出RMQ_{A}(i,j)=argmin_{(i\leqslant k\leqslant j)}A[k]RMQ_{A}(i,j)返回的是子数组𝐴[𝑖,𝑗]的最小元素的位置。 L_2可以被分解为数组𝐴[1,𝑛]和查询RMQ_{A}(i,j)。我们可以对数组𝐴[1,𝑛]建立一个O(n)A[1,n]的辅助结构,让RMQ_{A}(i,j)可以利用该结构在𝑂(1)时间内回答。

4. 最低公共祖先:例:问题L_3:输入:一个有向无环图𝐺,和节点𝑢𝑣𝐺中。问题:找出最低公共祖先LCA_{(\mu,\upsilon)}?这也是一个搜索问题。G可以被预处理,通过计算𝐺中的所有对节点的LCA,然后给定任意节点对都可以在𝑂(1)中找到。

5. 压缩查询:对于一类查询𝒬,我们通过找到一个有效的压缩函数来找到一个小型的数据库D_c来预处理D,使得所有的查询都可以在较小的查询D_c中获得答案。与无损压缩相比,他是相对于查询而言的,只保留的查询所有的相关信息。

6. 视图回答查询:使用视图就是将查询𝒬重新表述为Q_0使得𝒬Q_0是等价的。而对于所有的数据库DQ(D)= Q_{0}(D)。当𝒬都可以使用视图来回答时,如果满足(1)视图可以在PTIME中创建和具体化;(2Q_{0}(D)可以在并行多对数时间中得到计算。那么𝒬就是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。

7. 增量评价:在查询类𝒬中的查询𝑄,在预处理时,会对𝑄(D)进行一次计算。而当数据库D更新𝐷时,我们不需要重新计算𝑄(D𝐷),而是增量计算𝐷使𝑄(D𝐷)= 𝑄(D)。在实际中,𝐷通常很小,这样会变得高效很多。

8. 电路值问题(CVP):输入:有一个布尔电路α,和他的编码\bar{\alpha },和一系列输入x_1x_n,和最后的指定输出𝑦。问题:对于输入x_1x_n来说,α的输出𝑦时正确的吗?布尔电路类似于DAG,也是一个P完备问题,它可以被分解,但是在大数据中会有一定的限制。

9. 顶点覆盖(VC):输入:图𝐺=(𝑉,𝐸),和一个正整数𝐾≤|𝑉|,问题:对于𝐺来说,是否存在一个大小𝐾的顶点覆盖?顶点覆盖存在一个集合𝑉′⊆𝑉,使得每个节点(𝑢,𝑣)𝐸 𝑢𝑣至少有一个在𝑉中。VC问题是一个NP完备问题。

5. 有分解的NC约化(NC Reducibility with Factorizations)

NC约化:如果问题A可以在非确定性并行计算模型(例如NC类问题)中以多项式时间内解决,并且存在一个多项式时间的约化算法,可以将问题B转化为问题A,那么我们称问题BNC约化下约化到问题A。这意味着问题B可以被转化为问题A,并且在非确定性并行计算模型中,问题A的高效解决方法可以用来解决问题B

在研究Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒时,需要研究几个问题:给定一个查询类𝒬,如果他不是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,通过转换可以变为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒吗?如果可以,我们应该使用什么样的转换?能否将一个决策问题转化为\Pi T_{P}\Pi T_{P}中是否存在完备问题?

这些问题会在下面的两部分进行回答。

对于决策问题的约化

对于决策问题,可以有多约化方式,可以把一个问题中的不同实例映射到另一个问题的单个实例。

定义4:一个问题语言L_1可以NC约化到L_2,可以被写成L_{1} \leqslant_{fa}^{NC}L_2。如果对于L_1L_2存在分解\gamma _1=(\pi _{1}^{1},\pi _{2}^{1},\rho _1)\gamma _2=(\pi _{1}^{2},\pi _{2}^{2},\rho _2),还存在NC函数α(∙)和β(∙),对于Σ中所有的DQ来说,使得当且仅当\left \langle \alpha (D),\beta (Q) \right \rangle时,\left \langle D,Q \right \rangle\in S_{(L_1,\gamma _1)}

与PTIME约化不同的是,NC约化时根据两个NC函数而不是PTIME函数去定义的;而且L_{1} \leqslant_{fa}^{NC}L_2表示如果L_1的其中一个分解\gamma _1可以约化为任意一个\gamma _2,那么数据和查询部分就可以分别转化。

1. 在\leqslant_{fa}^{NC}中,约化关系也是可传递的。

2. 对于所有问题的L_1L_2,如果L_{1} \leqslant_{fa}^{NC}L_2并且L_2\Pi T_{P}之中,如果L_2是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒那么L_1也是。

对于查询类的约化 

我们已经知道了查询类𝒬和决策问题L_Q的关系,所有我们可以类似的方式定义查询类的\leqslant_{fa}^{NC}

对于查询类Q_1Q_2分别对应Q_2分别对应决策问题有L_{Q_1}L_{Q_2},如果L_{Q_1}可以约化成L_{Q_2},那么Q_1可以约化成Q_2,可以写作Q_1\leqslant_{fa}^{NC}Q_2

如果L_{Q_1}\leqslant_{fa}^{NC}L_{Q_2},那么Q_1\leqslant_{fa}^{NC}Q_2

对于所有的查询类Q_1Q_2Q_3

如果Q_1\leqslant_{fa}^{NC}Q_2 Q_2\leqslant_{fa}^{NC}Q_3,那么Q_1\leqslant_{fa}^{NC}Q_3

如果Q_1\leqslant_{fa}^{NC}Q_2 Q_2属于\Pi T_{Q}那么Q_1也属于\Pi T_{Q}。也就是说如果Q_1 \leqslant_{fa}^{NC}Q_2 Q_2Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,那么Q_1也是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。

6. \Pi T_{P}的完备问题(A Complete Problem for \Pi T_{P})

接下来让我们来探究是否存在一个\Pi T_{P}的完备问题。

我们可以给出结论是有完备问题的,但是完备问题不是容易找出。

定义6:问题𝐿\Pi T_{P}-hard如果对于在\Pi T_{P}中的所有的决策问题𝐿 ,L'\leqslant_{fa}^{NC}L如果问题𝐿Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒并且是\Pi T_{P}-hard ,那么𝐿\Pi T_{P}的完备问题。

 如果对于所有的查询类𝑄都在\Pi T_{Q}中,那么𝑄 \leqslant_{fa}^{NC}𝑄查询类𝒬\Pi T_{P}-hard。如果𝒬Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒并且是\Pi T_{Q}-hard ,那么𝒬\Pi T_{Q}的完备问题。

如果我们存在一个\Pi T_{P}的完备问题𝐿 ,给定了一个问题𝐿,我们可以通过检查是否𝐿 \leqslant_{fa}^{NC}𝐿来确定是否𝐿ϵ\Pi T_{P}.

由上可知,P中的问题都是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,所有的PTIME中的查询类都可以通过NC约化变成Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。

困难问题是一类问题,它们至少与某个复杂性类别内的一个问题等难。也就是说,如果一个问题是困难问题,那么它至少和该复杂性类别内的某个问题一样难。在P类问题中,困难问题是NP问题,这意味着如果P = NP,那么P类问题中的所有问题都可以在多项式时间内解决。

无法变成Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的问题:除非P=NP\Pi T_{P}T_{P}没有NP完备问题。换句话说,像3SAT问题和VC问题不管使用什么分解方法,都是无法转变为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。

7.保持约化的分解(Factorization Preserving Reductions)

NC约化允许我们在\Pi T_{Q}中通过重构的方法将查询类Q_1 转化为Q_2。这样就会产生一个问题就是如果将S_1的查询部分Q_1转化为S_2的查询部分Q_2,同时保留原来的查询类Q_1Q_2会发生什么?我们希望保留固定查询类的约化形式。这种约化方式我们称之为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函数α(∙),β(∙),所有的DQ都在Σ中,当且仅当\left \langle \alpha (D),\beta (Q) \right \rangleS_2时,\left \langle D,Q \right \rangle\in S_{1},那么语言S_1F可约化的。

如果S_1\leqslant_{F}^{NC}S_2,则Q_1可以F-约化为Q_2,写作Q_1\leqslant_{F}^{NC}Q_2,其中𝑆𝑄的语言对。

和NC约化相比,F约化不允许对S_1S_2进行重构。对于决策性问题L_1L_2 ,F约化由\gamma _1\gamma _2定义

对于任意的语言对S_1S_2 S_3,如果S_1\leqslant_{F}^{NC}S_2 S_2\leqslant_{F}^{NC}S_3那么S_1\leqslant_{F}^{NC}S_3

如果S_1 \leqslant_{F}^{NC}S_2并且S_1S_2 \Pi T_{Q}^{0},那么\leqslant_{F}^{NC}\Pi T_{Q}^{0}等价。

PTIMEΠ−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询

在NC约化下,所有PTIME查询类都可以通过约化生成Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询类来达到Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。相比之下,当涉及到F –约化时,这不再是可能的。

除非P=NCP中存在一个查询类但不是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,而且它不能F约化为任何Π-tractable查询类。

所以\Pi T_{Q}^{0}和P的区别是:虽然Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒查询类必须在P中,但PTIME查询类不一定是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒; P中的任何查询类Q都可以通过\leqslant_{F}^{NC}约化成Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。在不允许重构的情况下, 也就是\leqslant_{F}^{NC}被使用时,除非P=NCQ可能不会转化为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。

F-约化下的完备问题

如果𝑄′\leqslant_{F}^{NC}𝑄对于所有的𝑄′∈\Pi T_{Q}^{0},那么𝑄对于\Pi T_{Q}^{0}F-约化是困难的。如果𝑄Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒而且对于F-约化是困难的,那他对于F-约化就是完备的。

F-约化中很难找到一类查询对于\Pi T_{Q}^{0}是完备的。

8.结论

这是利用预处理范式在大数据上进行可处理查询的第一次尝试。提出了Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒概念,来描述大数据上可行的查询,还介绍了可以变为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的决策问题和查询类,我们展示了几个查询类和决策问题是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒。还介绍了两种形式的NC约化(\leqslant_{fa}^{NC}\leqslant_{F}^{NC}),并证明了他们是可传递的,并且和它们的对应的查询类(\Pi T_{Q}\Pi T_{Q}^{0})的集合兼容。

主要的结论有以下:

1. 𝑁𝐶 ⊆\Pi T_{Q}^{0}⊆ 𝑃除非P=NC \Pi T_{Q}^{0}𝑃,并不是所有的PTIME查询是Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒

2. P中的所有查询都可以通过\leqslant_{fa}^{NC}变为Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒

待解决的问题有:

1. 虽然NC是目前最流行并行时间复杂度模型,但是基于NCPRAM可能不精确。

2. 在\leqslant_{F}^{NC}中,完备查询类是和P是否=NC相关的,这还是一个开放性问题。

3.到目前为止,我们在研究Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒时只考虑了布尔查询和决策问题

4. 我们只研究了两种形式的还原。

5.使用预处理的查询求值方面还有许多悬而未决的问题。给定一个可以生成Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒的问题,我们如何确定一个适当地选择要预处理的数据集的分解,以便可以在并行多对数时间中解决问题实例?如果给定的问题无法解决Π−𝑡𝑟𝑎𝑐𝑡𝑎𝑏𝑙𝑒,我们是否仍然可以预处理其数据集,以便可以开发近似并行的多对数时间算法来解决该问题?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值