并行后缀数组构建与弱双模拟的研究
1. 并行后缀数组构建
1.1 不同输入类型的归并排序时间
在并行计算中,对不同输入类型进行归并排序时,其运行时间会有所不同。例如,对于DNA输入,当大小为32k时,运行时间会出现突然的跳跃。这是因为这个特定样本中包含29次子串“TTTTTTTT”的出现,而其他DNA样本中该子串的出现次数不超过6次。相比之下,文本输入样本中不存在这种长度的重复子串。
1.2 分段归并排序
扫描原语可应用于被划分为连续块(称为段)的向量。段的定义使用标记来标记段的边界。如果给定输入向量V中有m个这样的标记,原语将并行执行m + 1次,每次针对V中的一个段。在实现中,每个段被视为一个桶,桶的内容是共享公共前缀的后缀的索引。通过分段归并排序对桶进行细化,直到每个桶只包含一个后缀索引。
段边界的定义规则如下:任何与右侧相邻虚拟处理器具有不同“-name”的虚拟处理器表示一个段的结束。通过对每个(虚拟)处理器重新编号,使得每个段的第一个处理器编号为0,从而实现对所有段并行应用归并排序的效果。每个虚拟处理器的新处理器编号“new iproc”取决于其段的起始位置和原始(虚拟)处理器编号。
算法RADIX步骤
-
步骤1
:每个后缀si由其q - 字符串q(i)表示。通过对每个q - 字符串的第一个k - 分量k1应用归并排序过程,计算部分后缀数组“part sa”。每个q - 字符串与其表示的后缀的索引和相关的lcp值一起重新定位到新的排序位置。对于j = 1::bn/2‘c,执行以下子步骤:
- 步骤2a :使用分量kj作为键,标记“part sa”中所有位置t,使得“part sa[t]”的k - 分量不等于“part sa[t + 1]”的k - 分量。这将数组“part sa”划分为段,使得具有相同k - 分量的所有位置属于同一段或等价类。
- 步骤2b :计算每个段的大小。如果所有段的大小都为1,则计算整个输入的lcp值并终止计算。否则,对于包含在大小为1的段中的所有位置,将kj的值存储在K中,j - 1存储在J中,并将该位置标记为“非活动”。
- 步骤2c :对于所有大小大于1的“活动”段,使用分量kj + 1作为排序键应用归并排序过程。从每个q(i)中移除kj,并将剩余的q - 字符串发送到其新的排序位置。
1.3 结论
提出了一种用于并行构建后缀数组数据结构的算法。经验结果表明,PRAM公告板技术用于命名和排序子串时,对于实际输入大小,所需的主内存超过了MasPar MP - 2的可用内存。这部分是因为还维护了用于计算最长公共前缀信息的表。理论时间复杂度从O(log²n)“降低”到O(kn/p log n),其中k < log n是主内存可以容纳的bb迭代次数,p是处理元素(PE)的数量。
公告板可用于减小输入大小并创建每个后缀的更简洁表示,即q - 字符串。q - 字符串中的每个字符表示长度为2‘(0 ≤ ‘ < log n)的子串。对于DNA和英文文本,q - 字符串的长度约为n/4。然后使用基数排序完成后缀数组的构建。假设PE数组的主内存容纳n个整数值,一轮基数排序使用分段归并排序实现,需要O(n/p log²m log log m)时间,其中m < n是当前轮次中要排序的最大段或桶的大小。所需的基数排序轮数取决于输入中最长重复子串的长度:对于DNA和英文文本,发现最多需要3轮即可从排序中消除除一小部分q - 字符串之外的所有字符串。
下面是一个简单的mermaid流程图,展示算法RADIX的主要步骤:
graph TD;
A[开始] --> B[步骤1: 计算部分后缀数组part sa];
B --> C{j = 1::bn/2‘c};
C -- 是 --> D[步骤2a: 划分段];
D --> E[步骤2b: 计算段大小];
E -- 所有段大小为1 --> F[计算lcp值并终止];
E -- 存在段大小>1 --> G[步骤2c: 对活动段排序];
G --> C;
C -- 否 --> H[结束];
2. 弱双模拟与开放映射
2.1 引言
最近,通过开放映射(开放态射)提出了双模拟的范畴推广,使得能够在一系列不同的并行计算模型中统一定义类似双模拟的等价关系。这种设置适用于定义强双模拟和弱双模拟、跟踪等价、测试等价和事件结构的双模拟等。开放映射可以理解为见证双模拟的箭头,因此范畴中的两个对象A和B如果通过开放映射的跨度相关联,则它们是双相似的。
2.2 从开放映射定义双模拟
设U是计算模型的范畴,在其中选择一个观察对象的子范畴P(不一定是满子范畴),P也称为路径子范畴,因为它旨在包含计算要遵循的“路径”。从观察对象O 2 |P|到对象A的任何态射p : O ! A被理解为A中的可观察计算。模型之间的态射h : A ! B可以直观地看作是A在B中的模拟,因为h将A中的每个计算p : O ! A转换为B中的计算p; h : O ! B。
定义2.1(开放映射和双相似性)
- 态射h : A ! B在M中是P - 开放的,如果对于P中的任何态射m : O ! O0和U中的两个计算p : O ! A和p0 : O0 ! B,当正方形“O - p -> A - h -> B”和“O - m -> O0 - p0 -> B”交换(即p; h = m; p0)时,存在U中的对角态射r : O0 ! A,使得两个三角形交换(即p = m; r和p0 = r; h)。
- 两个对象A和B是P - 双相似的,记为A P B,如果在M中存在如“C - f -> A”和“C - g -> B”的P - 开放映射的跨度。当上下文明确时,省略前缀P - 。如果没有其他说明,假设U = M。
2.3 强双模拟
有标记的过渡系统(在集合L上,用于给过渡标记)是一个三元组T = (S; i; {a -!}a2L),由一组状态S、一个初始状态i 2 S和一组过渡关系{a -!} S×S组成。态射是“结构保持”的函数,将状态映射到状态。如果存在强双模拟,则两个过渡系统T1和T2是强双相似的。强双相似性在TSL范畴中与BranL - 双相似性一致,其中BranL是由有限动作序列组成的过渡系统的满子范畴。BranL - 开放态射满足合适的之字形条件。
2.4 弱双模拟
考虑在字母表L上的过渡系统,假设L包含一个特殊的动作“”,表示沉默或不可观察的动作。弱双模拟比强双模拟限制更少,允许动作a由形式为“ -! : : : -! a -! -! : : : -!”的序列模拟,即由任意数量的“”动作前后跟随的a。而且,“”动作根本不需要被模拟。
弱双模拟的定义
设T1和T2是过渡系统,弱双模拟是S1 × S2上的任何关系,使得i1i2,并且当s1s2时,对于每个动作a 2 L:
1. 如果s1 a -! s01在T1中,则存在s2 ba =) s02在T2中,并且s01s02。
2. 如果s2 a -! s02在T2中,则存在s1 ba =) s01在T1中,并且s01s02。
如果存在这样的关系,则称T1和T2是弱双相似的。为了处理弱双相似性,选择过渡系统的范畴WTSL,其态射“ : T1 ! T2”是函数“ : S1 ! S2”,使得“(i1) = i2”且“s a -! s0”意味着“(s) ba =) (s0)”。这些态射称为弱态射,而通常的过渡系统态射称为强态射。显然,由强态射组成的范畴TSL是WTSL的子范畴。
作为弱双模拟的路径子范畴,再次选择有限线性过渡系统的子范畴BranL以及它们之间的强态射。令人惊讶的是,这与强双模拟的路径子范畴相同。
下面是一个表格,对比强双模拟和弱双模拟的特点:
| 双模拟类型 | 动作模拟 | 特殊动作处理 | 适用范畴 |
| ---- | ---- | ---- | ---- |
| 强双模拟 | 动作严格对应 | 无特殊处理 | TSL |
| 弱双模拟 | 动作可由含“”序列模拟 | “”动作可不模拟 | WTSL |
2.5 弱双模拟的刻画
我们的目标是证明在WTSL范畴中,BranL - 开放态射的跨度定义了弱双相似性,而无需明确给出开放性的具体表述。这一证明基于开放态射诱导的双相似性可以通过伴随关系进行传递这一观察。
开放映射与伴随关系的性质
- 引理4.1 :对于范畴M和N之间的任意伴随关系F a G,以及M的任意子范畴P,N中的态射h是F(P) - 开放的,当且仅当G(h)在M中是P - 开放的。
- 引理4.2 :假设上述伴随关系是反射的(即右伴随G : N ! M是满且忠实的),则在范畴N中A F (P) B,当且仅当在范畴G(N)中G(A) P G(B)。
下面是引理4.2的证明步骤:
1.
正向证明
:假设A和B在N中是F(P) - 双相似的,即它们通过N中的F(P) - 开放态射的跨度“A - f -> C - g -> B”相关联。通过对C、f和g应用G的像,可以轻松构造出P - 开放态射的跨度。根据引理4.1,形成跨度“G(A) - G(f) -> G(C) - G(g) -> G(B)”的两个态射都是P - 开放的,因此G(A)和G(B)是P - 双相似的。
2.
反向证明
:设A和B是N中的任意对象,使得G(A)和G(B)在G(N)中是P - 双相似的。这意味着G(A)和G(B)通过P - 开放态射的跨度“G(A) - f -> C - g -> G(B)”相关联,并且存在N中的某些态射(设为f’和g’),它们被G映射为f和g。设C’和D’分别是f’和g’的定义域。由于G(C’) = G(D’)且G是满且忠实的,它反映同构,因此可以得出C’ ≅ D’,并得到跨度“A - f’ -> C’ ≅ D’ - g’ -> B”。此外,根据引理4.1,f’和g’是F(P) - 开放的,因此A F (P) B。
构造伴随关系
现在我们要在范畴TSL和WTSL之间构造一个伴随关系。定义一个自函子W : TSL ! TSL,对于过渡系统T = (S; i; {a -!}a2L),W(T) = (S; i; {ba =) }a2L),即W(T)具有相同的状态,但有更多的过渡,这些额外的过渡都是形式为“s ba =) s0”的。对于态射f : W(T1) ! W(T2),W(f) = f。
可以很容易地验证,配备两个自然变换“ : IdTSL -> W”和“ : W² -> W”(其中“T (s) = s”,“T (s) = s”)的函子W构成一个单子,即满足单子定律。考虑这个单子的Kleisli范畴,它与TSL具有相同的对象,并且从T1到T2的态射是TSL中所有从T1到W(T2)的态射。这样就自然得到了TSL和Kleisli范畴之间的规范伴随关系。
证明伴随关系是反射的
引理4.3
:这个伴随关系是反射的。
证明:我们将证明余单位“””是一个自然同构,即T ≅ W(T)在Kleisli范畴中。为此,我们将证明以下两个态射“l := T ; W(T ) : T -> W(T)”和“r := “T = idW(T ) : W(T) -> T”在Kleisli范畴中复合为恒等态射。
1. 首先观察到“W(T ) = W(T )”。
2. 利用这个等式和单子定律,很容易证明(在TSL中复合)“l; W(r); T = T ; W(T ); T = T”和“r; W(l); W(T ) = idW(T ); W(T ); W(W(T )); W(T ) = W(T ) = W(T )”,即l和r在两种情况下复合都得到Kleisli范畴中的恒等态射,这些恒等态射通常是单子的单位。
得出结论
可以看出,我们所考虑的Kleisli范畴正是由弱态射组成的范畴WTSL。现在,将引理4.2应用于TSL和WTSL之间的伴随关系,得到以下结论:
命题4.4
:弱双相似性与WTSL范畴中的BranL - 双相似性一致。
证明:设FW a GW表示伴随关系的函子,左伴随FW : TSL -> WTSL。注意到FW(f) = f,因此FW(BranL) = BranL。根据引理4.2,两个过渡系统T和U在WTSL中通过BranL - 开放态射的跨度相关联,当且仅当“W(T)和W(U)在GW(WTSL)中通过BranL - 开放态射的跨度相关联”。另一方面,注意到弱双模拟可以等价地定义(通过在定义3.1中替换要求1和2),这意味着T和U是弱双相似的,当且仅当W(T)和W(U)是强双相似的。
下面是一个mermaid流程图,展示从TSL和WTSL的伴随关系到证明弱双相似性与BranL - 双相似性一致的过程:
graph TD;
A[定义函子W: TSL -> TSL] --> B[构造Kleisli范畴];
B --> C[得到TSL和Kleisli范畴的伴随关系];
C --> D{伴随关系是否反射};
D -- 是 --> E[Kleisli范畴为WTSL];
E --> F[应用引理4.2];
F --> G[得出弱双相似性与BranL - 双相似性一致];
D -- 否 --> H[无法得出结论];
综上所述,我们通过并行计算中的后缀数组构建和范畴论中的弱双模拟与开放映射的研究,深入探讨了不同领域的算法和理论。在并行后缀数组构建中,我们了解了不同输入类型的归并排序特点以及分段归并排序的算法步骤和复杂度分析。在弱双模拟与开放映射的研究中,我们通过开放映射的范畴推广,建立了强双模拟和弱双模拟之间的联系,并证明了弱双相似性与WTSL范畴中的BranL - 双相似性一致。这些研究成果不仅丰富了我们对算法和理论的理解,也为实际应用提供了重要的参考。
4311

被折叠的 条评论
为什么被折叠?



