丁翔加州大学河滨xding047@ucr.edu严顾加州大学河滨ygu@cs.ucr.edu仪涵太阳加州大学


20世纪50年代提出的动态规划(DP)的思想是目前最重要的算法技术之一。然而,与此同时,许多基本的和顺序简单的问题变得更加具挑战性,并且需要一个(接近)有效的解决方案(即,最优顺序解决方案最多是一个多对数因子)。事实上,顺序DP算法采用了许多先进的优化,如决策单调性或特殊的数据结构,并比直接的解实现更好的工作。许多这样的优化本质上是顺序的,这给并行算法实现相同的工作界带来了额外的挑战。本文的目标是通过并行化经典的、高度优化的和实用的顺序算法来实现(几乎)高效工作的并行DP算法。我们展示了一个通用的框架,称为并行DP算法的警戒线算法,并使用它来解决几个经典的问题。我们选择的问题包括最长递增子序列(LIS)、稀疏最长公共子序列(LCS)、凸/凹广义最小权值子序列(LWS)、O动态规划(DP)的概念自理查德·贝尔曼在理查德世纪50年代[13]提出以来,已被广泛应用于算法设计中,是最重要的算法技术之一。它包括经典教科书和基础算法类,并广泛应用于研究和工业。本文的目标是在并行化经典的、高度优化的和实用的顺序算法的基础上,实现(几乎)高效的工作(定义如下)和并行DP算法。在高水平上,DP算法通过递归来计算一组状态(由整数标记)的DP值。递归指定了一组从状态��到状态��的转换,即如何使用��[��]来计算��[��]1。我们在��上称��为决策。��[��]然后通过取所有决策中的最佳(最小值或最大值)来计算,我们称之为��上的最佳决策。在本文中,我们将使用��∗来表示状态��的最佳决策。我们将在第二秒中介绍更多关于DP的概念。 2.我们可以把这些状态和转换看作是一个有向的无环状态1,更一般地说,一个转换可以从多个其他状态计算出��[��]。本文中的所有算法都只需要这样图(DAG),我们称之为DP DAG。在这个DAG中,每个顶点都是一个状态,一个边��到��表示从��到��的过渡。由于这样的边表明计算��[��]在逻辑上需要��[��],所以我们也称之为依赖关系,并说��依赖于��。按顺序,我们可以基于拓扑顺序计算所有状态。为简单起见,我们总是假设状态的(整数)顺序是一个有效的拓扑顺序。不幸的是,许多DP算法(甚至是一些简单的顺序算法)很难并行化,特别是很难实现工作效率(工作渐进地匹配最佳顺序算法),甚至接近工作效率(通过一个多对数因子)。我们注意到,在今天拥有数十到数百个处理器的多核机器上,实现低工作是设计实际并行算法的最关键的目标之一。对于实现工作效率的并行DP算法,一个特别有趣和有点讽刺的挑战是,顺序算法是非常好的优化。在许多情况下,优化的DP算法不需要处理DP DAG;som中的所有边(过渡)一个典型的DP优化在理论上既优雅又实用,它是决策单调性(DM)。在高水平上,DM表示两个状态��和��>��必须有他们的最佳决策,��∗≥��∗,称为凸情况2,或凹情况,其中��∗≤��∗或��∗≥��(见图1)。因此,在找到状态��的最佳决策时,可以根据已知的最佳决策缩小��∗的可能范围,从而避免处理所有转换。DM在序列设置(如[35,39,41,42,59,59,60])中得到了广泛的研究,并且也与四边形不等式[93,94]和Monge性质[75]等概念密切相关。因此,在许多应用[1,2,18,40,63,74,90]中,使用DM比朴素DP算法保存多项式因子。然而,在平行的背景下,在我们所知道的关于[22,24,30,43,51,66,77]的论文中,大多数来自90年代,很少有人利用DM来减少工作。事实上,它们都不是工作效率高的,而且它们大多数都有多项式开销,这限制了它们在当今多核机器上的潜在适用性。唯一的接近工作效率的结果是[22,24]的焦点图1:凸和凹决策单调性。 (a).凸性:对于两个州的��<��,他们的最佳决定满足��∗≤��∗。 (b).一致性:对于两个状态��<��,他们的最佳决策满足��∗≤��∗或��∗≥��。跳过与顺序设置相同的一组“无用”转换。其次,许多经典的DM序列DP算法依赖于高效的数据结构,如单调队列,它们本质上是顺序的。并行地实现相同的工作绑定还需要仔细地重新设计底层数据结构。在本文中,我们研究了并行DP算法,以实现与高度优化的序列算法相同的工作。给定一个具有一定优化的顺序算法Γ,我们的工作效率的目标是处理(渐近地)与Γ中相同数量的转换和状态。关于并行性,我们希望实现由Γ处理的转换所显示的最佳可能的并行性。我们在第二秒中正式确定了我们的目标。2.3.我们的解决方案是基于一个算法框架,通常几乎适用于所有的DP算法。我们称这个框架为警戒线算法。在高级上,我们的框架指定h在此范围内并行化顺序算法,我们将在相应的部分中回顾每个问题的文献。DP也被广泛地并行研究。有大量关于在不同的模型中优化各种目标的文献,如PRAM中的跨度(时间)(如[6,9,11,43,51,66,67,69,70,73,77]),外部内存/理想缓存模型中的I/O成本(例如,[26-26,56,83]),MPC模型[12,21,47,54]中的轮,或BSP模型[5,64,65]。然而,本文要么只考虑了DP中没有优化的算法,要么就产生了多项式的工作开销,除了一个特定问题的[22,24]。相反,我们的论文试图并行化高效和实用的顺序算法,同时保持较低的工作。其他一些工作试图使用DP(例如,[3,10,19,57,72,89])并行化某些类型的DP或应用程序。另外,我们的工作旨在提供一种并行化几乎所有DP算法的通用方法。2模型和框架我们在具有二叉[8,17,20]的经典多线程模型中使用工作跨度模型。我们假设有一组共享内存的线程。每个线程就像一个顺序的RAM加上a for而跨度(深度)��是DAG中最长的路径。在实践中,我们可以使用work��和span��使用随机的工作窃取调度器[20,46]��/��处理器(��)执行高概率的计算。如果并行算法的工作是��(��),那么它的工作效率很高,其中��是最著名的或相应的顺序算法的工作,如果它的工作是��˜(��),则几乎是工作效率的。我们使用��˜(·)来隐藏多段日志(��),其中��是输入大小。2.1动态规划的基本概念DP算法通过将优化问题分解为子问题,记忆子问题的答案,并使用这些问题来找到原始问题的答案。子问题通常由整数进行索引,称为状态。在明确的上下文下,我们直接使用��来指代“状态��”。状态的DP值可由边界条件(即初始值)确定,或由DP递归所指定的其他状态确定。本文以以下形式研究复发:��[��]=min/max����,��(��[��])(1),其中��是��的一个决定。函数����,��(·)表示如何使用状态��的DP值进行更新


已经最终确定了,否则还没有准备好。一个朴素的DP算法将基于一个拓扑顺序来处理所有的转换和状态。DP优化。许多算法可以通过跳过DAG中的顶点和/或边来优化计算,而不是直接计算递归性。我们称这种算法为优化的DP算法。例如,给定一个输入序列��[1..��],优化的LIS算法[62]维护一个数据结构,以精确地找到��(log��)代价中每个状态的最佳决策,并且只处理��(��)转换,而不是递归所建议的��(��2)。类似地,给定两个输入序列��[1..��]和��[1..��],,优化后的LCS算法只需要处理所有状态��[��,��],其中��[��]=��[��],而不是复发中的��(����)状态。另一个典型的优化是决策单调性,即先前状态的最佳决策可以缩小以后状态的最佳决策范围,从而跳过转换并节省工作。典型的例子包括凹/凸的广义LWS。燕麦(见Sec。5.1),GAP(见第二节。5.2),等。我们将讨论所有这些问题2.2我们现在讨论了并行化顺序DP算法的目标。我们的主要目标是实现(渐近地)与优化的顺序算法相同的计算。更正式地说,对于计算具有一定优化的递归��的序列算法Γ,我们定义了��优化的DAG,表示为��Γ=(��Γ,��Γ),如下。��Γ与��上的DP DAG相同,有一些边高亮显示:对于所有由Γ处理的边,我们在��Γ中高亮显示它们,并称它们为有效边。我们称其他的边为法线边。这些有效的边可用于完全完成计算。连续DP算法Γ,我们希望其忠实和最好的并行化Λ:过程相同的有效边��Γ和与Γ实现相同的工作,和跨度��Γ的有效深度成正比,定义为最大数量的有效边��Γ在任何路径。也就是说,如果我们的目标是并行化Γ并执行相同的计算,那么并行算法Λ必须处理由Γ处理的所有边��→��。这个means��只有在j最终确定后才能最终确定,所以跨度与有效深度相关联为deLCS长度��(但对于其他算法可能不同),我们的目标是实现��˜(��)跨度,以实现完美的并行化。请注意,序列算法的“完美并行化”并不直接表明同一问题的工作或跨度边界的最优性。可以通过重新设计递归和/或具有更浅深度的边或序列算法来实现更好的边界。我们的重点不是找到或重新设计一个不同的DAG来获得新的优化,而是提供现有的带有优化的序列算法的并行化。在下面,我们首先提出了我们的新算法框架:警戒线算法,它为一般的DP算法提供了一个正确的,尽管不一定是有效的并行化。在此基础上,对于每个具体的问题,我们将展示如何实现低工作,这是在Sec中讨论的。4和5,可以是非常重要的。2.3我们的想法是基于适用于DP算法的相位并行框架[78](见下文)。Shen等人的相位并行框架旨在识别(尽可能多地)不相互依赖的操作我们称这时循环的每次迭代都是一轮。我们将在��中被处理的状态集称为在��中的边界,称为F��。虽然相位并行框架为实现并行提供了并行的高级方法,但它没有说明如何这样做(即,如何在每一轮中识别就绪状态)。我们现在介绍我们的警戒线算法,它使用一种新的方法来识别每一轮的边界F��,特别是对于DP计算��Γ。警戒线算法识别未准备好的暂定状态,并在它们上设置哨兵;然后它用所有的哨兵勾勒出一个警戒线来标记边界边界。我们将通过以下步骤来总结该算法。请注意,每个步骤都可以并行处理。步骤1:将所有状态标记为暂定状态,并根据边界条件初始化它们。步骤2:如果一个临时状态��可以成功地放松另一个临时状态��(即,将��[��]更新到一个更好的值),则在状态��上设置一个哨点。这样的哨兵意味着州��的所有后代(包括)都没有准备好。我们说,在这种情况下,这个州和它的所有后代都被哨兵阻止了。因此,如果没有任何哨兵,一个状态就准备好了




图2:LIS/LCS问题和警戒线算法的说明。子图(a):每个元素的DP值为LIS的输入序列。子图(b):输入序列在二维平面上的几何视图,每个元素表示为(��,����)。子图(c):此输入上对应的LCS—答案是从(0,0)到(8,8)的最长路径。子图(d):计算第二个警戒线的过程。准备状态被标记在阴影的灰色区域。警戒线是由原始输入中具有LIS=2的三个单元格决定的。子图(e):一种一般的LCS情况,其中每条对角线都可以是一条红色的边。子图(f):我们的LCS算法的一个执行示例。为了简单起见,这里我们只显示未准备好的状态然后标记,其DP值必须最终确定。我们将归纳性地展示这一点。在开始时,准备状态是那些在DAG中内度为零的状态,它们的真实DP值由边界情况指定。显然,它们的DP值不能被其他状态放松,它们将在我们的算法中被识别为准备就绪。它们的DP值也可以通过步骤1中的边界来计算。因此,我们的算法在第一轮测试中是正确的。假设算法在��个圆之前是正确的。我们将展示��+1也正确地找到准备状态和它们的DP值。相反,假设在步骤2中确定的状态��还没有其真正的DP值。这意味着��的最佳决策并没有将��放宽到最终值。让��=成为最好的选择[��]。注意,��不能确定:如果是这样,在步骤4中��标记为完成之前,在步骤3中,它必须放松��。因此,��是试探性的。在这种情况下,让��0=��和state����是��≥1的状态����−1的最佳决策,也就是说,我们追逐最佳决策链,得到��=��0,��1=best[��0]等的状态列表。让我们找到第一个��,这样��[����]不是真正的DP值,而��[����+1]是真正的DP val有效地设置警戒线。最长递增子序列(LIS)。我们首先使用LIS作为一个示例。给定一个输入序列����,LIS计算��[��]的最大值,这样:��[��]=max{1,max��<��,����<������[��]+1}(2)我们使用��作为输入大小,��作为输出LIS长度。直接计算这个递归率需要做��(��2)的工作。依次地,我们可以逐个处理所有状态,并使用二元搜索结构计算max��<��,����<������[��],给出��(��log��)总代价[62]。二进制搜索精确地找到每个状态的最佳决策,只处理��转换。许多并行的LIS解决方案也被提出为[23,45,64,65,78]。我们将展示,使用我们的警戒线算法框架求解LIS将本质上给出一个现有的算法[45],并且是序列��(��log��)算法的完美并行化。基于警戒线算法,边界情况是将所有暂定的DP值设为1。然后,我们将尝试使用当前的暂定DP值来进行放松。在这种情况下,对于一个状态��,只要有任何其他状态��<��与����<����,��[��]可以放松到一个更好的值2。因此,所有的准备就绪状态都是这样的



使��在所有常见子序列中具有最长的长度。LIS问题可以简化为LCS问题,首先将所有输入元素重新标记1..��根据它们的总顺序,然后找到这个新序列和序列之间的LCS��=1,2,…,��。插图见图2(a)-(c)。LCS在顺序[7,38,48,53,62]和并行[6,11,25,32,73,84,91]中都得到了广泛的研究。The standard DP solution defines each state ��[��, ��] as the LCS for ��[1..��] and ��[1..��], and uses the following recurrence: ��[��, ��] = ⎧⎪⎪⎨ ⎪⎪ ⎩ 0, if �� = 0 or �� = 0 ��[�� − 1, �� − 1] + 1, if ��[��] = ��[��] max{��[�� − 1, ��], ��[��, �� − 1] }, otherwise.(3)这些转换对应于网格上的水平边、垂直边和对角线边(参见图2(c)中的一个示例)。对这个递归的一个已知的顺序优化(即稀疏化)[7,38,48,53]是观察到只有与��[��]=��[��]的对角线边对应的边是有用的。计算等价于找到从左下到右上的最长路径对应于这些有效的(红色)边,并且所有其他边和状态都可以跳过所有其他边和状态。这可能会导致一个se这些转换对应于网格上的水平、垂直和对角线边(参见图2(c)中的一个示例)。对这个递归的一个已知的顺序优化(即稀疏化)[7,38,48,53]是观察到只有与��[��]=��[��]的对角线边对应的边是有用的。计算等价于找到从左下到右上的最长路径对应于这些有效(红色)边,并且所有其他边和状态都可以跳过所有其他边和状态。这可能导致一个具有��(��log��)代价的顺序算法,其中��是对的数量(��,��),这样��[��]=��[��]。对于LIS,正是��=��有这样的有效边。我们将展示如何使用警戒线算法来并行化这个优化。从��[��,��]=0的边界开始,我们观察到具有��[��]=��[��]的任何状态的DP值��[��,��]都可以更新为更好的值。因此,我们将在每个国家设立一个哨兵,表明它们应该更新。所有这些哨兵都会阻挡网格的右上角。这样,阻塞区域被明显地标记为楼梯区域,如图2(d).所示因此,整个地区都在冷杉的范围内

有趣的是,据我们所知,这是第一个并行的LCS算法,它将��(����)工作和��(min(��,��))跨度用于稀疏LCS问题(即��=��(����)和��=��(min(��,��)))。同时,该算法非常简单——我们提供了我们在[33]中的实现,并在Sec中进行了实验研究。 6.另一个有趣的发现是,我们的算法意味着如何将LCS映射到LIS(以前只知道另一个方向是已知的)。给定两个输入字符串��和��,如果我们通过增加��(主键)和减少��(次键)来对����=����的所有(��,��)对进行排序,那么LCS等价于这个排序列表的次键(��(s))上的LIS。我们将在下一节中展示更复杂的DP算法的并行化。我们的LCS算法将是Sec中引入的更复杂的并行GAP算法中的一个子程序。5.2.4我们讨论了凸/凹广义最小权值子序列(GLWS)问题,这是决策单调性(DM)最经典的情况之一。Given a cost function ��(��,��) for integers 0 ≤ �� < �� ≤ �� and ��[0], the GLWS problem computes ��[��] = min 0≤��<�� {��[��] + ��(��,��)}对于1≤��≤��,其中��[��]=��(��[��],��)可以在常量时间内计算。当��[��]=��(LWS)问题[49][��]是一种特情况。这里我们使用一般情况��[��]=��(��[��],��),它具有相同的顺序工作绑定[35,36,39,41,42,59],因为在许多应用程序中都需要通用版本(参见Sec中的示例。 5).GLWS问题也被Galil和Park [42]称为1D/1D DP。GLWS问题与其他重要问题(例如,断线[63]、最优字母树[69]和一些计算几何问题[1])高度相关。GLWS的本质是基于空间接近度对一维对象列表进行聚类,并将所有聚类的总加权和最小化。作为一个直观的例子,考虑选择道路上的村庄子集(已知它们的坐标)来建造邮局,以减少总成本,其中��(��,��)是使用一个邮局为��+1到��村庄服务的成本。这就产生了一个GLWS问题,即��[��]是服务于第一个��村庄和��[��]=��[��]的最低成本。DP重复列举了所有可能的决策��,以便最后一个邮局服务于

在本节中,我们将展示如何使用警戒线算法来并行化一个著名的顺序GLWS算法与��(��log��)的工作,该算法适用于凸和凹DM。虽然在这里有效地应用警戒线算法需要许多复杂的算法技术,但我们的并行算法(Alg。1)仍然实用,它确实在一个很宽的参数范围内优于序列算法(见秒。6岁的细节)。它也是稍后在秒中展示的许多其他算法的关键构建块。 5.我们从初步算法和经典的顺序算法开始,然后讨论如何使用警戒线算法来并行化它。由于凸算法在实践中使用得更多,所以我们将在描述算法中使用凸情况,并在Sec中讨论凹情况。4.3.4.1初步的凸性、一致性和决策单调性。代价函数��的可凸性由Monge条件[75]定义。如果对于所有的��<��<��<��,��,��,��)+��(��,��)≤��(��,��)+��,+��,��,��),我们说��满足凸Monge条件(也称为四边形不等式[93])。(5)我们说��满足凹的Monge条件(也称为逆四边形i另一个与Monge条件密切相关的条件是总单调性[2]。如果对于��<��和��<��,��(��,��)≥��(��,��)⇒��(��,��)≥��(��,��).,我们假设一个��×��矩阵��是凸的,并且是完全单调的如果对于��<��和��<��,��(��,��)≤��(��,��)⇒��(��,��)≤��(��,��).,我们说一个��×��矩阵��是凹的,并且是完全单调的设����为列索引,这样��[��,����]是行��中的最小值。��的凸完全单调性意味着��1≤��2≤……≤����,而在凹的情况下,��1≥��2≥……≥����[42]。另外,如果��是凸完全单调的,那么��的任何子矩阵��也是凸完全单调的。凸凹蒙格条件是凸凹全单调性的充分但非必要条件。在GLWS中,我们称����,��=��[��]+��(��,��)为从��到��的过渡。凸凹决策的单调性等价于����,��的凸凹全单调性。注意,如果��满足凸/凹Monge条件,那么����,��也满足。但��的凸/-凹全单调性并不能保证����,��的凸全单调性。在本文中,我们假设凸/凹蒙氏条件然而,为��迭代维护和更新这个大小为��的数组需要二次工作。请注意,在计算��[��]后,最佳[��+1..��]在凸情况下必须是非递减的,而在凹情况下[42]必须是非递增的。因此,该算法维护了最佳[��+1..��]的三元组列表([��,��],��),这表明��和��之间的所有状态都有最佳决策��,即∀��‘∈[��,��],best[��’]=��。该列表由一个单调队列来维护,这是一个基于双端队列的经典数据结构,并且本质上是顺序的。在第��次迭代中,我们可以直接从队列中找到状态��的决策。在获得��[��]后,可以在��(log��)摊余成本中更新单调队列,以将��作为以后所有状态的最佳决策。总的来说,该算法需要花费��(��log��)的工作。在这里,我们可以参考原始论文来了解该算法的细节。我们将这个算法称为Γlws。利用DM,Γlws只处理每个状态��与其最佳决策之间的转换。该算法的DAG��Γlws包括所有��<��的法线边��→��,以及精确的��效应4.2并行凸GLWS我们首先给出了凸GLWS的并行算法。我们将使用上面提到的“邮局”问题作为一个运行的示例来解释这些概念,但我们的算法适用于一般情况。根据相位并行算法的思想,对于当前的最终状态,目标是找到所有的准备状态作为边界,在那里它们的真实DP值可以从最终的状态中计算出来。我们将使用我们的警戒线算法来寻找每一轮的边界。天真地说,复发表明一个状态依赖于它之前的所有状态。但是,请注意,只要一个国家的最佳决定已经最终确定,它基本上就已经准备好了。对于凸的情况,我们将使用如下所示的事实。事实:第4.1节。在凸GLWS中,让��={��:��>��∧best[��]≤��},它是不迟于状态��的状态集;那么��是从��+1开始的连续状态范围。这是顺序设置中的一个已知事实(可以通过归纳法来证明)。说明相并行算法中每一轮的边界是一个连续的状态范围。基于这一想法,我们将保持每一轮的最后最终状态。然后在下一个所有的三元组([��,��],��)按顺序排列,这表明��和��之间的所有状态在��上都有最好的决策。这种数据结构对于保证找到下一个边界的效率至关重要,而且还必须在每一轮会议结束后使用新的DP值进行更新(第4行)。4.2.1寻找警戒线。为了在每一轮测试中找到就绪状态,我们使用了警戒线算法。也就是说,对于现在所有的状态,我们可以尝试使用暂定状态来更新其他暂定DP值。一旦我们找到任何可以更新��的��,我们就在��设置一个哨兵。在所有的哨兵中,最小的(最左边的)将给出警戒线的最终位置。但是,请注意,我们不能对所有的状态对(��,��)进行详尽的检查。首先,现在检查所有可能的��>可能会在工作中产生巨大的开销,因为以后的大多数状态都没有准备好。理想情况下,算法应该检查警戒线的位置(但这将是一个鸡问题)。为了处理这个问题,我们的想法是使用前缀加倍(参见Alg中的Find警戒线函数。1),它试图扩展


图3:将警戒线算法应用于具有凸代价函数的邮局问题的示例。圆圈(州)是村庄。箭头是各州之间的最佳决定。最终的答案是四个邮局,分别为13、47、89、10、12个村庄服务。下面的子内容说明了FindCordon中的前缀加倍方案。通过2个��−1状态在每个子步��中增加��。如果整个批已经准备好了——也就是说,[现在+1,现在+2��)中没有状态可以相互放松,所有哨兵都在批之外——我们尝试更大的步骤,并将警戒线扩展到现在+2��+1。在此过程中,我们将保持警戒线作为迄今为止最左边的哨兵。一旦我们发现警戒线在批次内,这意味着这批还没有完全准备好。因此,该过程停止,并将警戒线的当前值返回给主算法。使用前缀加倍,并行算法可以检查比准备状态更多的状态,但“浪费”状态的数量最多是在这一轮中最终确定的“有用”状态的两倍。因此,处理状态的总数是��(然后我们讨论避免检查所有状态��的方法)。��>��,当��设置哨兵时。由D


州��[现在+1..警戒线−1],我们需要相应地更新��,以为[警戒线,��]的所有州获得新的最佳决定。我们使用分治法的方法来做到这一点。函数查找间隔(����,����,����,����)找到范围内[����,����]状态的所有最佳决策三元组,最佳决策在范围内[����,����]。请注意,我们只需要对所有州在设置警戒线后的最佳决定。所有这些州都必须在[现在的+1,−1警戒线]中有他们目前的最佳决定(如果他们的最佳决定在现在之前,他们必须在这一轮中做好准备,并被纳入边境)。因此,在根级别上,我们称查找间隔(现在是+1,警戒线−1,警戒线,��)。在查找间隔中,我们首先计算����=best[����],其中����=(����+����)/2,即在中间的状态的最佳决策。通过(凸)DM,��∈[����,����−1]的最佳决策在[����,����],中,��∈[����+1,����]的最佳决策在[����,����].中我们将同时处理这两个子问题。为了并行收集所有([��,��],��)三元组,我们在递归中构建了一个自下而上的基于树的结构。最后,我们将树变平为一个数组,并合并相邻的区间,如果是


4.3并行凹GLWS为了将算法扩展到凹的情况,我们需要进行一些修改。在FindCordon中,如果��可以更新��,那么��必须能够更新��+1。因此,在Alg中的第15行。1,我们检查��是否可以更新��+1。如果是这样,我们在��+1上设了一个哨兵。其他的修改是在查找间隔中。首先,由于凹,当我们发现����是����在第27行的最佳决定时,我们需要交换第一和第二递归调用中的最后两个参数,即状态����+1到����的最佳决策范围必须在����之前,而����到����−1必须在����之后。更涉及修改凹GLWS是我们得到数组��发现间隔后,我们必须合并它与旧数组��之前发现间隔只考虑最好的决策[现在+1,警戒线−1],但在凹的情况下,这些州也可能有更好的决策使用状态。假设我们已经生成了数组��new存储([��,��],��)三元组,并且我们希望将其与��old合并。��old和��new都包含了各州的最佳决定[警戒线]。��]。不同之处在于,��old中的��s来自[0..现在],而��s i


是找到一个切割点��,在那里[警戒线]的最佳决策。��]来自��new,而[��+ 1,��]的最佳决策来自��old。算法2:在��new do 2����←中找到切割点��1并行的����([����,����],����),从��old中搜索����的最佳决策。3二进制搜索最后一个([����,����],����),得到��[����]+��(����,����)<��[����]+��(����,����)。4二进制搜索��old中的第一个([����,����],����),从而得到��[����]+��(����,����)<��[����]+��(����,����)。5二进制搜索[����,����]中的最后一个��,使��[����]+��(����,��)<��[����]+��(����,��)。6返回��,这里我们显示Alg。2在��(ℎlog��)工作和��(log��)span中找到��,其中ℎ=|��new|是边界大小。对于��new中的所有����,我们对其存储在��old中的最佳决策进行预处理。此步骤requires��(ℎlog��)工作和��(log��)span。然后,我们在��new中进行搜索,以找到��所在的区间。在这一步之后,��new中只有一个区间([����,����],����)是很有趣的。然后我们可以在��old中进行二值搜索来找到精确的��。注意,即使代价函数是凸的,该方法也可以很容易地修改为合并��old和��new。4.4理论分析


引理4.3。GLWS的警戒线算法使��(��log��)同时适用于凸和凹的情况。证明。结合引理4.1和4.2(以及第二节中的讨论。4.3),每一轮的工作都是��(ℎlog��),其中ℎ=claze−现在的−1是边界规模。由于所有回合的边界大小ℎ加起来为��,因此整个算法都有��(��log��)工作。□然后我们证明了凸和凹情况下的轮数是��Γlws的有效深度。回想一下,DAG��Γlws包括所有状态��和��<��之间的法线边,以及状态��与其最佳决策之间的有效边。有效深度深度(��ˆ,��Γlws)是任意路径中有效边数最多的路径。引理4.4。GLWS的警戒线算法在��轮中完成,其中��是��ˆ(��Γlws)


证明。将状态��的有效深度��ˆ(��)定义为以��结束的路径的最大有效边数。我们将归纳地证明一个状态��处于��圆的边界。��具有有效的深度��。基本情况(边界情况)的成立微不足道。假设对��−1的结论是正确的。我们首先证明“如果”方向,即如果一个状态��有有效深度��,它必须在圆��的边界。这相当于表明从现在到��,所有州都没有哨兵。相反,假设有一个州��∈(现在,��]与一个哨兵,这是由州��∈(现在,��]。这意味着��对��来说是一个比之前所有州都更好的决定,这表明��现在的最佳决定是��∗≥。基于诱导假设,��∗的有效深度必须大于��−1。因此,��ˆ(��)=��ˆ(��∗)+1>��−1+1=��,这意味着��ˆ(��)至少是��+1。根据递归性,从��到��有一条正常的边,所以��ˆ(��)≥��+1,导致了一个矛盾。然后证明了“仅当”条件,即当一个状态��在第��个圆的边界上时,它必须具有有效的深度��。归纳法假说表明,所有的状态都具有有效的部门我们现在表明,我们的算法框架可以用于并行化各种经典的顺序DP算法。特别是,对于最优字母树(OAT)问题(秒。5.1),我们部分回答了Larmore等人[69]对合理输入实例的一个长期开放问题(例如,范围��多对数(��)中的正整数权重)。对于GAP的问题(第二节。5.2),我们展示了第一个具有非平凡并行性的近似高效工作的算法。更有趣的是,该算法结合了凸GLWS和稀疏LCS算法中的所有技术。5.1并行最优字母树(OAT)最优字母树(OAT)问题是一个经典的问题,已被顺序[31,44,50,55,58,68,76,87]和并行[66,67,69,77]广泛研究。给定一个非负权值序列��1..��,OAT是一个具有��叶的二元搜索树,其代价最小,其中树��的代价定义为:��������(��)=��∑��=1��������(7)这里����是��的第��片叶子的深度(从左开始)(根的深度为0)。我们可以将权重����看作是访问叶子��的频率,而叶子的深度是访问它的成本。那么��的成本是访问��中所有叶子的总预期成本。OAT问题与其他重要的问题密切相关,如最优二值搜索树(OBST)[61]和霍夫曼树[52]。依次,Hu和Tucker [50]展示了一个使用��(��log��)工作的OAT算法。后来,Garsia和Wachs [44]简化了这个算法。同时,Larmore等人[69]展示了一种基于Garsia-Wachs的算法。我们将把我们的技术应用到这个算法中,以改进跨度边界。由于页面限制,我们在附录A中提供了[69]的细节,并在这里回顾了高级别的思想。该算法计算出一个��-tree[44],它具有相同的深度,最终将其转换为��(��)工作和多对数跨度中的OAT。[69]的关键见解是从具有输入权值的��个叶节点序列开始,并在序列直接给出了凸LWS问题的��(��log��)工作和��(��log2��)跨度,这里的��是最佳决策的最长依赖路径。在Larmore算法中,每个区间的森林由LWS上的DP算法迭代构造:如果迭代��在迭代��<��中找到最佳决策,那么迭代��在迭代��的森林上再创建一个层次。这意味着��相当于森林的深度,森林深度的上限是最终的OAT高度ℎ。我们在附录a中给出更多的细节。因此,我们可以使用ℎ参数化我们最终的边界为:定理5.1。最优字母树(OAT)可以在��(��log2��)工作和��(ℎlog3��)span中构建,其中��是输入权重序列的大小,ℎ是OAT的高度。该算法在ℎ上参数化,工作效率很高。一个有用的观察结果是,OAT高度ℎ是多对数的,具有真实世界的输入实例的正整数权值和固定的字长。更正式地说,我们可以证明:引理5.1。如果所有输入权重都是单词大小��中的正整数,则OAT高度为��(log��)。这个证明并不复杂,我们在附录a中提供了它中找到几个不相交的区间进行并行处理。这个分区可以通过在上的各种操作来完成图4:GAP问题中的警戒线示例。问题我们将这个标准的序列算法表示为Γgap。并行这种方法是非常具有挑战性的,即使是平行凸/凹GLWS。4作为一个子程序,我们不知道这里有任何现有的工作。这里面临的挑战是,��中的行是否会与��中的列进行交互。例如,在��中计算一行需要来自��中的每个列中的一个元素,但是计算这些元素再次需要在��中的前几行。我们并行化该算法的关键见解是使用警戒线算法来有效地标记在每一轮中要计算的准备区域。请注意,作为经典编辑距离/LCS的推广,GAP递归类似于递归3,但在计算��and��中具有“跳跃”。插图如图4所示。除了LCS中的对角线边(见图2)外,对于行和列,还存在有效的(红色)边(见图4(a))。为了简单起见,这里我们只绘制这些边的一个子集,每个状态��[��,��]总是有一条垂直有效边(用于计算��[��,��]),一条水平有效边(用于计算��[��,��]),并且可能有一条对角边由于前缀加倍,我们在每一轮中只需要��(log��)步骤。定理5.2。GAP问题的警戒线算法具有��(����log��)工作和��(��log2��)跨度,其中��和��≤��是输入大小,��是Sec中引入的顺序算法Γgap的Γgap优化DAG的有效深度。5.2.证明的证据。5.2.回想一下,顺序GAP算法Γgap通过分别解决第��行和第��列中的GLWS问题,获得每个状态��=(��,��),以及对角边(��−1,��−1)→(��,��)的DP值。因此,最优DAG��Γgap包含三种类型的边(��,��)→(��‘,��)所有��’>��)(��,��)→(��,��‘)所有��’>��,以及(��−1,��−1)→(��−如果��[��]=��,��)。其中,有效的边缘包括:(��,��)→(��‘,��)��是行��的��,(��,��)→(��,��’)��是��的��的最佳决定,(��−1,��−1)→(��,��)如果��[��]=��[��]。WLOG,我们在本节中假设是��≤��。我们首先证明了跨度的界。我们将展示警戒线算法在��轮中完成,其中��是��Γgap的有效深度。引理5.2。给定两个序列引理5.2。给定两个大小为��和��≤��的序列,关于GAP编辑距离的警戒线算法在��=��ˆ(��Γgap)轮中完成。证明。该证明类似于引理4.4。我们还将状态��的有效深度定义为��ˆ��。我们将通过归纳显示that��是在��轮中处理的。�� ˆ �� = ��.基本情况根本不成立。假设该结论适用于在��−1之前的所有回合。我们将证明它对于第��轮也是如此。首先证明了“if”方向,即如果一个state��=,��,��)(第��行,第��列)具有有效深度��,它必须在圆��的边界。这相当于表明没有一个哨兵可以阻止��。为了简单的描述,对于��=(��,��)和��‘=(��’,��‘)两种状态,我们说��≺��’if��≤��‘和��≤��’。显然,如果一个状态��≺��‘,��上的一个哨兵将阻止��’。假设相反,有一个带有哨兵的州��≺��,这是由另一个临时状态��≺��。这意味着暂定状态��是一个比所有最终状态更好的决策,这表明��的最佳决策,即��∗,也必须是暂定的。基于诱导假设,��∗的有效深度必须大于��−1。因此,��ˆ(��)≥��路径这样,使��ˆ(����)=��和��ˆ(����+1)=��+1。然而,基于归纳假设,����的最佳决策必须已经最终确定。在��轮中,��必须得到它真正的DP值,并且将发现自己能够更新����+1。因此,在����+1≺��上将会有一个哨点,而��不能在��轮的边界上被识别。□结合引理4.1和4.2,即每轮is��的跨度(log2��)。这证明了Thm中的跨度界。5.2.然后我们证明了它的工作界。5.2.引理5.3。给定两个大小为��和��≤��的序列,GAP编辑距离的警戒线算法工作��(����log��)。“证明”。由于��Γgap是一个网格图,其深度不超过��+��。通过引理5.2,该算法将在��=��(��)轮中完成。在每一轮中,我们对所有��行进行前缀加倍,并尝试推动每行的边界。在每个前缀加倍步骤中,我们做一个前缀-min,花费��(��)工作,所以前缀加倍的成本是��(��log��),总共是��(����log��)。假设ℎ是一轮谈判中的边界大小。由于前缀加倍,我们访问的暂定状态的数量最多为2ℎ。结合引理4.1和4.2,在每一行/列中,我们可以实现与t数成比例的功5.3决策单调性(DM)的概念可以应用于各种结构,而不仅仅是在Sec中讨论的一维情况。 4.第二节介绍了二维网格结构上的有效并行性。5.2,我们现在展示了在树状结构上实现高并行性的技术。这里我们将这个问题称为Tree-GLWS。设��是具有��+1节点的树,节点0是根。We use ��(��) to denote the parent of node �� and ���� be the distance from node 0 to node ��. Tree-GLWS takes the input tree �� , a cost function ��, and the boundary ��[0], and computes: ��[��] = min{��[��] + ��(����, ���� )} (8) where �� is any ancestor of ��, and ��[��] = �� (��[��], ��) that can be computed in constant time from ��[��] and ��.成本函数��由��和��的深度决定。请注意,这里的兄弟姐妹nodes��1和��2将有相同的DP值,但是��[��1]和��[��2]可以是不同的,因为that��1和��2也是计算函数��的参数的一部分。在本节中,我们的assume��是凸的,但我们的算法可以适应凹的情况,并进行了一些修改。5.3.1建筑模块。我们将首先概述一些基本的构建块,它们是关键的子程序的使用


图5:树上的警戒线算法。请注意,兄弟姐妹节点必须具有相同的状态。在HLD中,我们可以在��(log2��)工作中回答路径查询(例如,查询树路径上的最小加权节点)。基于树深的范围报告。我们现在讨论一种数据结构,它可以有效地报告��子树中的节点集,其中节点的深度在给定的��到��范围内。首先,我们建立了��的Euler-tour(ET)序列,因此��的任何子树都将是ET中的一个连续的子序列。我们可以将所有节点映射到一个二维平面,每个平面都有坐标(����,����),其中����是ET中��的第一个索引,����是��的树形深度。现在的原始查询是关于这个2D计划的2D范围报告。范围树[80]可以在��(��log��)工作和��(log2��)span中构建,并在��(��+ log2��)工作和��(log2��)span中回答这个查询,其中��是输出大小。5.3.2我们的主要算法。在这里,如果我们考虑任何树的路径,递归(8)与Sec中的一维情况完全相同。 4.因此,我们可以使用类似于Sec中的方法。4通过保持([��,��],��)三元组的最佳决策数组,这意味着对于深度��≤����≤≤的元素����,��的最佳决策是��。所面临的挑战h加倍不能完全摊销。在1D GLWS中,如果前缀加倍在步骤��停止,我们访问至少2个��−1就绪状态和最多2个��−1未就绪状态,因此可以摊销访问未就绪状态的工作。然而,在树的情况下,我们是根据节点的深度进行前缀加倍。最后一个前缀加倍步骤中的节点数可以比前面的步骤中大得多,并且成本不能被摊销。我们是,由于前缀加倍,每个节点��最多在��(log��)回合中被访问。再加上范围报告的��(log2��)工作,每一轮的工作都可以摊销到��(ℎlog3��),其中ℎ是边界大小。更新最佳决策数组。该算法中最有趣的部分是如何在实现工作效率和高并行性的同时,维护所有树形路径的最佳决策数组。由于树的结构,针对树的不同分支的最佳决策数组共享某些部分。总的来说,可以有总大小为��(��2)的��(��)路径。关键的挑战是通过共享数组的某些部分来节省工作和空间,同时高度并行地更新它们。考虑当就绪节点时的简单情况在一般情况下,就绪状态的结构可以是任意的。为了实现工作效率和高并行性,我们的解决方案是在一个“BFS风格”的算法,利用HLD的属性(见Sec。5.3.1).对于这一轮中的所有准备好的节点,我们扩展了直接连接到最终节点的重链。由于重链不会发散,该方法与一维情况相同,除了额外的持久性,功与节点总数和多对数跨度成正比。一旦我们完成了对重链的更新,我们将并行地处理我们刚刚继续进行的重链上的节点的轻子节点。整体结构类似于BFS,重边重量为0,轻边重量为1。由于每个节点只出现在一个重链中,所以工作仍然与准备节点的数量成正比。我们还可以实现高并行性,因为从根到任何节点��最多可以有��(log��)重链和轻边。因此,我们可以以每轮的对数步数来完成所有路径的更新,这保证了工作效率和高并行性。这里我们假设我们为整个t构建HLD


work和��(��log4��)跨度,其中��是最佳决策依赖图中最长的路径。5.4并行��-GLWS GLWS的另一个著名的变体是限制在输出[88,92]中包含一个固定的给定数量的��集群的输出。这里我们称之为��-GLWS问题。Formally, let ��[��, ��′ ] be the minimum cost for the first �� elements in �� ′ clusters, and the DP recurrence is: ��[��, ��′ ] = min ��<�� ��[��, ��′ − 1] + ��(��,��) where ��(��,��) is the cost of forming a cluster containing elements indexed from �� + 1 to ��, and the boundary case ��[0, 0] = 0 and ��[��, 0] = +∞ for �� > 0.直接解决这个递归问题需要��(����2)的工作。当代价函数��是凸的(这在许多实际设置中发生)时,DP表中每一列的计算是一个静态矩阵搜索问题,即对于完全单调的matrix��where��[��,��]=��[��,��′−1]+��(��,��),,我们想计算��每一列的最小元素。理论上这个问题可以通过SMAWK算法[2]的��(��)算法中解决,但这个算法是相当复杂和固有的顺序。实际上,存在一个简单的分治算法with��(



图7:我们的并行凸GLWS算法(Alg。 1).警戒线算法,由于��[��,��]对��[��,��−1]和��[��+ 1,��]的依赖,第��个边界包含状态��[��,��+��]。因此,尽管它导致了对标准顺序算法的最优并行化,但该算法需要��−1轮,因此具有��(��log��)跨度。实现��(��)跨度可能需要新的见解来重新设计依赖关系。6实验为了证明新算法的实用性,我们设计了LCS和凸GLWS的实验。我们在C++中实现了并行LCS算法和并行GLWS算法,以支持分叉连接并行性和一些并行原语(例如,减少)。我们的测试使用了一台96核(192个超线程)的机器,带有4个Intel Xeon Gold 6252个cpu和1.5 TB的主存。我们的代码可以在[33]上找到。对于并行LCS,我们所知道的[6,11,25,73,84,86,91]现有并行实现不能处理108大小的输入,因此我们将并行LCS算法与算法的顺序版本进行比较。我们测试了两个随机字符串��[1..��]和��[1..��],长度为��= 108,而co




对于并行LCS,我们所知道的[6,11,25,73,84,86,91]现有并行实现不能处理108大小的输入,因此我们将并行LCS算法与算法的顺序版本进行比较。我们测试了两个随机字符串��[1..��]和��[1..��],长度为��= 108,同时控制��(对数(��,��),即��[��]=��[��])和��(LCS长度)。查找所有匹配对的预处理时间不计算在运行时间中。图6显示了当��= 108和��= 109时的结果。我们的算法比顺序版本有高达30×的速度。对于GLWS,我们使用Sec中描述的邮局问题的设置。4,并将我们的并行算法与第二节中的顺序解进行了比较。4.1.我们为��= 108和109生成随机数据,并使用不同的权重函数来控制输出大小��,即解决方案中的邮局数量。图7为不同��和��的检测结果。序列算法的时间没有明显的变化,因为它有��(��log��)工作,独立于��。对于我们的算法,由于��(��log2��)的跨度,运行时间随��的变化而变化。当��很小时,我们的算法比序列快20×


sparsification.我们展示了一个新的框架,警戒线算法,并将其应用于不同的DP递归。从理论上讲,我们给出了序列算法的最优并行性和完美并行性的概念,并证明了通过精心设计,我们可以(几乎)实现经典序列DP算法的最优并行性,在某些情况下实现完美并行性。实际上,我们展示了我们精心设计的技术不包含太多开销,并且可以在各种情况下优于原始的顺序版本。我们相信,本文中的技术的新颖性打开了一系列有趣的问题。首先,许多新的并行算法几乎是工作效率的——我们为每个问题选择最实际的顺序算法,但它们可以脱离受��(log��)因子限制的最佳工作。从理论上讲,问我们是否能并行地匹配最好的工作约束是很有趣的。其次,在我们研究的所有这些经典算法中,有一个由警戒线算法不能直接解决的问题/算法是RNA二级结构[36]。在这里,我们可能有两个��不同的路径参考文献[1] Alok·阿格瓦尔和玛丽亚·克劳维。1990.广义矩阵搜索在几何算法中的应用。离散应用数学27,1-2(1990),3-23。[2] Alok阿加瓦尔,玛丽亚M克劳维,什洛莫莫兰,彼得肖尔,和罗伯特威尔伯。1987.一种矩阵搜索算法的几何应用。Algorithmica 2, 1 (1987), 195–208.[3]詹姆斯B艾蒙,Ojas帕雷克,辛西娅A菲利普斯,阿里皮纳尔,威廉塞维拉,和海伦徐。2019.动态规划与峰值神经计算。在神经形态系统国际会议上。1–9.[4][4]alok和帕克詹姆斯。[n.d.].关于在多维单调数组中进行搜索的注释。在IEEE计算机科学基础研讨会(FOCS)上。497–512.[5]卡洛斯ER阿尔维斯,埃德森诺贝托卡塞雷斯,和FKHA Dehne。2002.用于解决CGM/BSP上的字符串编辑问题的并行动态编程。在ACM的算法和架构中的并行性研讨会上(SPAA)。275–281.[6]阿尔贝托·阿波斯特利科,米哈伊尔·阿塔拉,劳伦斯·拉莫尔,斯科特·麦克法丁。1990.有效的并行算法的字符串编辑和相关问题。SIAM J.关于计算19,5(1990),968-988。[7] Alb


[27] Rezaul A.乔杜里和维贾亚·拉马钱德兰.2006.与高速缓存无关的动态编程.在ACM-SIAM离散算法研讨会(SODA)上。591–600.[28] Rezaul A.乔杜里和Vijaya·拉马钱德兰。2008.高速缓存高效的多核动态规划算法。在ACM的算法和架构中的并行性研讨会上(SPAA)。ACM。[29] Rezaul A.乔杜里和Vijaya·拉马钱德兰。2010.高速缓存遗忘的高斯消去范式:理论框架、并行化和实验评价。计算系统理论(TOCS)47、4(2010),878-919。[30] Artur Czumaj。1992.矩阵链乘积问题的并行算法。(1992).[31] Sashka Davis。1998.构建最优字母二进制搜索树的Hu-Tucker算法。(1998).[32]丁翔、董晓军、严谷、刘友哲、孙仪涵。2023.高效的并行输出-敏感的编辑距离。在第31届欧洲算法年度研讨会(ESA2023)(莱布尼茨国际信息学学报(LIPIcs))上,Inge·李Gørtz、马丁·法拉赫-科尔顿、西蒙·普格里斯和格雷格尔兹·赫尔曼(Eds.),第274卷。莱布尼茨-泽城堡使用求解器辅助变换的动态规划算法。在关于面向对象编程、系统、语言和应用的研讨会上(OOPSLA)。145–164.[57]穆罕默德·马赫迪·贾万马德,普拉莫德·加纳帕斯,拉蒂什·达斯,扎法尔·艾哈迈德,斯蒂芬·楚迪和雷佐尔·乔杜里。2019.向高效的架构独立的算法的动态程序:海报。并行编程原理与实践(PPoPP)研讨会。413–414.[58] Marek·卡尔平斯基,劳伦斯·拉莫尔和沃伊西赫·里特。1997.重新访问构造最优字母树的正确性。理论计算机科学,180,1-2(1997),309-324。[59] Maria M. Klawe。1989.凹一维动态规划的一种简单的线性时间算法。英属哥伦比亚大学温哥华大学。[60] Maria M Klawe和丹尼尔J克莱特曼。1990.广义矩阵搜索的一种近似线性时间算法。SIAM离散数学杂志3,1(1990),81-97。[61] Donald E. Knuth。1971.最优的二值搜索树。《信息学报》1(1971),14-25。[62] Donald E. Knuth。1973.计算机程序设计的艺术,第三卷:排序和搜索。阿迪索

还有让·弗雷德里克·姆尤波。2020.基于cgm的高效并行算法可用于具有多个子串排除约束的最长常见子序列问题。并行配置文件。91 (2020), 102598.[85]杰斯明·贾汉·提提,普拉莫德·加纳帕蒂,阿克拉蒂·塔拉蒂,圣阿加瓦尔和雷佐尔·乔杜里。2015.具有类矩阵乘内核的高性能高效递归动态规划。在IEEE国际并行和分布式处理研讨会(IPDPS)上。303–312.[86] Soroush Vahidi,希伯,杜志辉,大卫·巴德。2023.在教堂中平行的最长的常见子序列分析。在2023年的IEEE高性能极端计算会议(HPEC)。IEEE公司,第1-6页。[87]简范文。1976.论霍夫曼树的建设。在ICALP中。382– 410.王海州和明州宋。2011.Ckmeans.1d.通过动态规划实现的一维最优k均值聚类。R期刊3、2(2011),29。[89] Elad Weiss和老施瓦茨。2019.并行机上矩阵链产品的计算。在国际并行和分布式处理研讨会(IPDPS)上。IEEE公司,491-500年。[90]罗伯特·Wi


查询,这是��-树的最终输出。��-tree可以很容易地转换为与��(��)工作和��(log��)跨度并行的OAT,我们向观众推荐[69]以了解更多细节。在这里,我们关注的第一阶段是如何并行构造��树。Larmore等人观察到,我们可以选择任何局部最小对,而不是Garsia-Wachs中最左边的一对,这不会影响生成的��树。因此,我们可以在一轮中并行处理所有可能的局部最小对。然而,在最坏的情况下,轮数仍然是线性的。例如,如果��1..��是递增的,那么在一轮中只能处理一个局部最小对。为了克服这个问题,Larmore等人进一步提出了“山谷”的概念。谷��=vall(����)是��最大的连续子段,1)包含����,2)不包含大于����的项。因此,����的谷包含了��. Larmore的笛卡尔树中����的子树的元素,等人表明,序列中的几个不相交的谷可以并行处理。为了理解这一点,让我们考虑一个山谷的��。设Δ��是


为了克服这个问题,Larmore等人进一步提出了“山谷”的概念。谷��=vall(����)是��最大的连续子段,1)包含����,2)不包含大于����的项。因此,����的谷包含了��. Larmore的笛卡尔树中����的子树的元素,等人表明,序列中的几个不相交的谷可以并行处理。为了理解这一点,让我们考虑一个山谷的��。设Δ��为笛卡尔树中��谷的父本。由于��是最大的,所以在这个范围内的局部最小对将不会与外部元素交互。因此,我们可以将谷��视为一个独立的任务,并反复寻找并组合��内部的局部最小对。唯一的区别是,如果组合后的元素��=����+����+1>Δ��,我们将其标记为��∗,并将其放在一个单独的队列中。在对不相交谷的并行处理之后,我们收集所有标记的元素并将它们插入正确的位置。总的来说,最多可以有��重叠的谷。拉莫等人。的算法使用了一种特殊类型的山谷:1谷。1谷被定义为一个谷��,对于C中��子树中的任何节点��


图8:分析燕麦高度的插图。这三种情况被用于证明引理A.1。如果我们合并这个山谷中的所有元素,则合并到��树。然而,这个过程可能不会在此结束——如上所述,如果子树的权重超过Δ��,我们将停止。因此,我们可以用��‘<��得到我们的最终状态forest��’−1。为了计算forest��,我们将枚举��<��的所有forest��,并从它们中找到最佳(最小)转换。这里的转换意味着在��-tree中构建一个额外的级别,以及成本��,��,��)=��2��−��。Larmore等人证明了代价函数��是凸的,因此计算forest��恰好是一个凸的GLWS问题。如果我们使用Alg。1为了解决这个凸GLWS问题,因为每个决策最佳[��]=��将在forest��的forest��树中添加另一个层次,有效深度的上限为整体��树高度ℎ。因此,每个1谷子问题的工作和跨度都是��(��log��)工作和��(ℎlog2��)跨度,其中��是子问题的大小。由于递归一轮中1-谷的总大小为��(��),因此一轮的功和跨度分别为��(��log��)功和��(ℎlog2��)。再乘以��(log��),即��的数在这个子树中所有叶子的重量。在OAT中,子树的重量每三个层次至少增长两次。证明。这里我们表示,将��(��)表示为输出OAT��and��(��)中��的父节点,作为节点��子树中叶权重的和。我们将显示,对于OAT中的任何节点��,��的曾祖父(如果存在)的重量必须不小于2��(��)。在最优字母树��中,让节点��是��的兄弟节点,节点��是��的父节点。WLOG,我们假设节点��是节点��的左子节点。然后,让��作为��的兄弟姐妹,让��作为��的父母,让��作为��的父母。现在这个引理等价于��(��)≥2��(��)。我们考虑��是��左子的情况(图8中的情况1)。在这种情况下,我们必须有��(��)≥��(��),因为否则一个正确的旋转将减少树的总成本的��(��)−��(��),违反了��是一个OAT。因此,在本例中,��(��)≥��(��)≥��(��)+��(��)≥2��(��)。第二种情况是��是��的右孩子。有两个子案例。首先,如果��是��的右子代(图8中的案例2为(a)),则��、��和��形成另一个案例1。因此,我们有了��(��)≥2��(��)≥2��(��)。第二,如果��是��的左子代(见图8中案例2(b)中的��4)。我们可以双旋转