没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记127(2005)167-180www.elsevier.com/locate/entcs关系数据库中的图变换GergelyVarro'1KatalinFriedl2计算机科学与信息理论系D'anielVarro'3布达佩斯技术经济大学测量与信息系统系H-152 1 Budapest,Magyartudo'sokoru'tja2. ,Hungary摘要我们提出了一种新的方法来实现基于标准关系数据库管理系统(RDBMS)的图转换引擎。该方法的实质是为每个规则创建数据库视图,通过内连接操作处理模式匹配,通过左外连接操作处理否定应用条件。此外,还使用基本数据操作语句(例如插入、删除、更新)来实现由图变换规则的应用所规定的模型操作。关键词:工具支持,图转换,模式匹配,关系数据库1介绍关系数据库管理系统(RDBMS)作为大公司业务关键数据的存储介质,可能是软件工程中最成功的产品。这一成功的关键因素是1 电子邮件地址:gervarro@cs.bme.hu2 电子邮件地址:friedl@cs.bme.hu3 电子邮件地址:varro@mit.bme.hu1571-0661 © 2005 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2004.12.034168G. Varro等人理论计算机科学电子笔记127(2005)167理论和实践之间的紧密协作:SQL,标准的数据定义、操作和查询语言,是建立在精确的数学基础之上的。图变换[4]已经证明了它在非常高的抽象级别上描述模型查询和操作的成熟性。在过去的几年里,密集的研究一直集中在如何图变换可以适应作为一个可视化的查询和数据库的数据操作语言。下面的列表仅仅是该领域中一些主要结果的简要选择• Andries和Engels在[1]中提出了一种基于图变换的混合(可视和文本)查询语言.• 在[9]中,Jahnk和Zuendorf提出使用三重语法[16]在其Varlet框架中对遗留系统进行数据库重新工程。• GRAS [10]是亚琛大学开发的一个面向图形的数据库管理系统,它是PROGRES [18]图形转换工具的底层数据库。GRAS数据库的最新版本(即GRAS/GXL [2] ) 旨 在 定 义 一 个 接 口 , 为 基 于 图 形 的 工 具 ( 例 如 ,PROGRES)。在所有这些方法中,它们都研究了图转换如何有助于数据库管理系统和任务。然而,也值得研究RDBMS的成熟理论和实践如何潜在地为图转换的范例做出贡献。在本文中,我们遵循第二个方向。更准确地说,我们报告了一个图形转换引擎的开发,它使用一个开放的,现成的关系数据库(即PostgreSQL[12])作为后端,它提供了一个接口,作为前端的现有工具。架构该方法的实质是为每个规则创建数据库视图,并通过内连接操作处理图模式匹配,而通过左外连接操作处理负应用条件。此外,图变换规则的应用所规定的模型操作也通过基本的数据操作语句(如插入、删除)来实现。然而,一个关键的问题是如何基于关系数据库的图转换引擎的性能扩展到大型模型或长转换序列。在检查了我们的原型实现在各种问题上的性能并将其与两个流行的转换引擎(AGG [5]和PROGRES [18])进行比较后,我们声称这样的实现是一个有前途的替代方案。本文其余部分的结构如下。第二节简要介绍G. Varro等人理论计算机科学电子笔记127(2005)167169介绍模型和元模型,图形转换和关系数据库的主要概念。节中3是本文的重点部分,我们简要介绍了如何将图转换规则编码成SQL查询和操作。我们的原型图变换引擎的实验评估提供在第二节。4关于不同的例子(包括在各种情况下与AGG和PROGRES进行最后,我们的结论在第5节。2图变换与数据库2.1元模型和模型元模型(MM)描述了建模语言的抽象语法。形式上,它可以用类型图表示。类型图的节点称为类(C)。一个类可能有属性(Attr),它定义了特定类的某种属性继承可以在类之间定义最后,关联(associations,Asynchronous)定义了类之间的二元连接(节点类型之间的边类型)。实例模型(M)(或者,正式地说,实例图)描述了用建模语言定义的具体系统,它是元模型的一个格式良好的实例。节点和边被称为对象(O)和链接(L),re-name。对象和链接分别是元模型级别的类和关联的实例。元模型中的属性在实例模型中显示为槽(S)。实例模型中的继承要求子类的实例可以在需要超类实例的任何情况下使用示例2.1一个分布式互斥算法,其完整规范可以在[8]中找到,它将作为整篇论文的运行示例。进程尝试访问此域中的共享资源该算法的一个要求是允许最多一个过程一次。这是通过使用令牌环来实现的,令牌环由next类型的边连接的进程组成。在算法的连续阶段中,(i)进程可能会对资源发出请求,(ii)资源可能最终由进程持有,最终进程可能会释放资源。访问资源的权限由令牌建模。该算法还包含一个死锁检测过程,它必须跟踪被阻塞的进程。问题域的元模型(类型图)和两个实例模型在图1的左右部分中描述1所示。170G. Varro等人理论计算机科学电子笔记127(2005)167reqn:请求hb:hold_byrel:释放LHS RHS释放器r:资源r:资源p:过程rn:资源p:过程模型2Fig. 1. 问题域2.2图形变换图转换[4]提供了一种基于模式和规则的图模型操作。每个规则应用程序通过用另一个图替换一个图的一部分来转换图。图变换规则r=(LHS,RHS,NAC)包含LHS和NAC图一起称为规则的前提条件PRE。图变换规则示例将在图中稍后给出二、例2.2分布式互斥算法可以用13条简单的图转换规则来(The 最复杂的规则有4个节点和3条边。描述如何释放图中显示了一个资源。二、图二. 转换规则示例(ReleaseR)如果某个进程拥有某个资源,而该进程没有对任何资源发出任何请求,则此规则适用 图1中的模型1给出了一个示例情况,其中该规则是适用的,因为资源r由进程p1持有,并且p1与资源没有任何其他关系在这种特定的情况下,规则应用意味着所选择的资源将被流程释放,这将导致在图1的右下部分呈现的实例模型(模型2)。1.一、下hold_by token释放封锁请求元模型过程资源r:资源hb:holded_byrq:requestp1:工艺p2:过程模型1r:资源rel:releaserq:requestp1:工艺p2:过程G. Varro等人理论计算机科学电子笔记127(2005)167171将r应用于主机(实例)模型(M),用RHS的图像替换M中LHS的匹配(或出现)(occ)。这通过以下方式执行:(i)在M中找到LHS的匹配,(ii)检查否定应用条件NAC(其禁止某些对象和链接的存在),(iii)移除模型M的可以映射到LHS但不能映射到RHS的部分,从而产生上下文模型,以及(iv)通过添加新的对象和链接(其可以映射到RHS但不能映射到LHS)来将上下文模型与RHS的图像粘合,从而获得导出模型(MJ)。 图变换是从初始模型MI开始的规则应用序列。通常,图变换步骤的最关键阶段是图模式匹配,即在主模型M中找到给定LHS图的单个(或所有)出现。现有图变换工具的模式匹配技术可以分为两大类。有关图形转换方法的进一步比较,请参见[17]。• 基于约束满足的算法(例如AGG [5],VI-ATRA [20]中的[11])将待找到的模式的图形元素解释为变量,这些变量应该通过填充实例模型的元素所施加的约束来实例化。我们的实现也属于这一类。• 基于局部搜索的算法从匹配单个节点开始,并通过相邻节点和边缘逐步扩展匹配。PROGRES的图模式匹配算法(具有复杂的搜索计划[21])、Do?rr的我们在SEC的实验4将表明,基于约束满足的算法通常具有更好的性能,如果解释图变换引擎处于观察之下。然而,很明显,编译的方法比解释的引擎提供更好的结果。在编译引擎的情况下,约束满足和基于局部搜索的算法的比较将在未来进行3关系数据库我们提出了一个图转换引擎(以下单推出[15]具有内射匹配的方法)可以使用关系数据库来实现首先,我们基于Meta模型创建一个适当的数据库模式,然后生成模型的数据库表示(第二节)。3.1)。然后,实现172G. Varro等人理论计算机科学电子笔记127(2005)167使用数据库查询(第3.33.5)。由于篇幅限制,我们假设读者熟悉关系数据库概念的基本概念。提出了这些问题,例如,在[19]中。3.1将模型和元模型映射到数据库表代表设计中的系统的实例模型存储在数据库表中。我们使用了一个标准的映射(更多细节请参见[19,14])来从元模型生成数据库的模式。• 每个类都映射到一个只有一列的表。此列将存储特定类的对象的标识符。• 我们为元模型中出现的每个关联分配一个表。此表有三列,分别包含链接、源节点和目标节点的标识符。对于最后两列,还应定义外键。这些键分别引用源和目标节点表中的标识符列。• 如果子类是从超类继承的,那么对应于子类的表应该通过链接两个表的主键列的外键约束进行扩展。这意味着所有出现在子类表中的标识符也应该出现在超类表中。例3.1实例模型Model 1的数据库表示在图的上半部分3 .第三章。图的下半部分的意义3将在稍后讨论。过程资源hold_by请求释放P1P2IDRIDID src TRGID src TRGID src TRG版本R_lhs版本R_nac版本Rp.idhb.idr.idp.idreqn.id rn.idp.idhb.idr.idreqn.idrn.idP1HBRP2RQRP1HBRNULLNULL图三.数据库表示3.2内联接和左外联接:概述我们简要介绍了我们在续集中构建的RDBMS的最关键概念,即视图,内部连接和左外部连接。的G. Varro等人理论计算机科学电子笔记127(2005)167173FF对这些概念的正式处理可以在[19]中找到。表R和 S的内联接(用R0S表示)是从笛卡尔积中选择的,即由某个公式F过滤的交叉联接R×S。内部连接操作的SQL表示法是SELECT * FROM R,SWHERE R.A=S.B,其中A和B分别是表R和S中的公共列,执行哪个内部连接。在这种情况下,过滤公式F是WHERER和S的左外联接(记为RS)(i)包含所有行F的R0S,和(ii)此外,它包含所有这样的行的R,其中有S中没有行满足F。 这些行填充有空值,柱S.一个左外联接的例子是SELECT * FROM R LEFT JOIN S ON R.A=S.B。视图V是一个派生表(关系),有一个单独的名称。它可以用一个全功能的选择查询来定义。3.3规则图视图(LHS和NAC)。我们建议使用视图(即选择查询)来计算图变换规则的匹配模式,其中包含规则的所有成功匹配。更具体地说,我们为每个规则的每个LHS、NAC和PRE图(它是一个LHS和几个NAC示例3.2我们通过一个示例来介绍这种方法的本质,该示例列出了为ReleaseR规则的LHS和NAC2)的情况。CREATE VIEWReleaseR_lhs AS-- LHS视图 SELECTp.id ASp、hb.idr.id AShb、www.example.com ASr --3列 FROMProcess ASp、Held_by AShb、Resource ASr其中r.id =hb.src和p.id =hb.trg--用于hold_by edge hb创建视图版本R_nac ASSELECTp.id ASp,reqn.id ASreqn,rn.id ASrnFROMProcess ASp,Request ASreqn,Resource ASrn其中p.id =reqn.src和rn.id =reqn.trg--用于请求边缘reqn我们可以对结果视图的结构和内容进行一些观察。(i)该视图包含的列数与相应规则图中出现的图对象(即节点和边)的数量一样多(这意味着在示例3.2中有三列,包括p.idAS p)。(ii)每个图对象的类型(即每列)对应于一个特定的数据库表(参见ProcessAS p)。(iii)有效行应为源行174G. Varro等人理论计算机科学电子笔记127(2005)167以及针对规则图中的所有边的目标保持。例如,条件r.id =hb.srcANDp.id=hb.trg表示hb的源节点是r,hb的目标节点是p。(iv)一行应该对应于图形模式的成功匹配。规则图查询的一般结构具有以下语法。4创建视图graph.nameASSELECTgo1.idASgo1,. . . ,gon.idASgon从go1.t ypeASgo1,. . . ,gon.typeASgonWHERE边约束 和注入约束边 约 束 表 示 节 点 和 边 的 邻 接 关 系 对 于 每 条 边 , 我 们 添 加 子 公 式n1.id=e.srcANDn2.id=e.trg,其中n1是源节点,n2是边e的目标节点(在规则图中)。内射性约束是为所有类型相同(或者更准确地说,具有共同超类型)的LHS 图 对 象 对 定 义 的 。 对 于 每 一 对 go1 和 go2 , 我 们 添 加 一 个 形 式 为go1.id>go2.id的子公式3.4左联接用于规则的前提条件。当生成PRE图的视图时,其所有正面和负面应用条件的视图都可用。如果PRE图没有任何负面应用条件,则可以直接使用为其LHS图定义的视图。如果PRE图具有至少一个NAC图,则对应的视图定义具有以下语法:Create Viewrule.name ASSELECTlhs.name.*来自lhs左加入nac1上lhs。c1=nac1。c1和.. . 和lhs。cn=nac1。Cn...左加入nackONlhs。c1=nack. c1和.. . 和lhs。cn=nack. Cn哪里nac1. c1为NULL且.. . 和nac1. cn为NULL且.. .纳克河c1为NULL且.. . 和nack。% c%n为NULL非正式地,每个NAC被一个接一个地左外连接到LHS图。将LHS与NAC图(换句话说,共享图或节点)之间的态射转换为类型的连接条件。ci= nacj.ci(其中ci指的是相关的图形对象)。此外,为了成功匹配,我们要求相应的NAC(s)列填充有空值。这意味着不存在LHS的匹配的可能扩展,其也是(任何)NAC图的匹配。4. goi令人不安的重载使用只是一个SQL黑客,基本上goi总是对应于规则图中的一个图对象。G. Varro等人理论计算机科学电子笔记127(2005)167175示例3.3为了继续我们的运行示例,我们给出ReleaseR规则的PRE图的视图定义。CREATEVIEW RELEaseRAS SELECT lhs.*从释放R_lhs作为lhs左加入释放R_nac作为nac上lhs.p=nac.p其中nac.p为空图的下部3显示了分别为规则ReleaseR的LHS、NAC和PRE部分定义的视图的内容最后,规则的所有成功匹配都可以枚举为SELECT* FROMrule.view,其中单个匹配是对应视图中的一行。存储一个规则的所有匹配项对于模型图变换规则(一组精心设计的)中不发生冲突的变换然而,对于我们的实验(在SEC。4),我们没有使用这种可能性来比较使用关系数据库的实际效率。3.5关系数据库我们建议在图形操作阶段的操作可以通过在单个事务块中发出几个数据操作命令(插入和删除需要事务块来确保图变换步骤是原子的,即,执行所有命令或不执行任何命令,以在规则应用之后产生一致的模型删除。如果go是LHS\RHS中的一个图形对象,它规定删除成功匹配的模型元素me,那么me的删除是通过一个删除命令来实现的:=me由于单个模型元素可能出现在不同的表中(根据继承层次),因此应该对go.type的每个超类型执行删除命令。幸运的是,通过使用DBMS的外键约束,从根表(即表示类型层次结构中的公共根因此,真正的删除命令是如果删除节点go是由规则规定的,那么所有悬挂边(即所有关联边)也应该被删除。 在这种情况下,必须在对应于边缘类型的任何表t上执行形式为“从t开始,在t .src = www.example.com或t .trg = me.id的地方“的操作me.id但是,这种删除是通过使用前面的外键构造自动获得的插入。如果go是RHS\LHS中指定创建176G. Varro等人理论计算机科学电子笔记127(2005)167的模型元素me,那么me的创建是通过INSERT以如下方式陈述。• 如果go是一个节点,那么我们执行一个“插入go.type i(id)VALUES(www.example.com)“形式的插入me.id根表(满足外键的限制• 如果go是一条边,那么一系列“插入到go.type i”形式的插入(id,src,trg)VALUES(me.id,me.src,me.trg)根据从根表开始的继承层次结构,以自顶向下的方式再次处理类型I例3.4我们继续使用模型操作部分的示例图转换规则ReleaseR。请注意,任何带有postfix.newid的文本都表示添加到模型中的对象的标识符. id形式的Post fixes表示源自模式匹配阶段的值。网址:hb.id搜索从根WHEREID =hb.id返回root(id)VALUES(rel.newid)请输入Release(id,src,trg)VALUES(rel. 内韦迪河id,p.id)4实验结果为了评估我们的图形转换引擎的性能,测试进行了300 MHz的奔腾机器与64MB的RAM。Linux内核版本2.4.18服务于我们用作底层关系数据库的PostgreSQL。在我们的引擎中没有应用任何额外的优化技术在AGG上执行测试期间,我们切换到了GUI,因此规则应用程序由JAVA程序指导。相比之下,我们使用标准解释器和底层GRAS数据库作为PROGRES测试的运行环境,此外,Prolog风格的削减规范使执行具有确定性。通过这种方式,我们在每种情况下都在进行编程的图形重写,以进行批量转换。此外,我们在每一步之后丢弃生成的DB视图,以获得最差情况下的性能对我们的转型引擎进行评估图4显示了在我们的互斥示例中执行的三个测试集(具有不同的特性)的执行时间。 值avg列是单个规则应用所需的平均时间,而sum列是列表示整个转换序列的执行时间。短的转换序列。此测试集中的初始实例图G. Varro等人理论计算机科学电子笔记127(2005)167177互斥体(短TS)Proc.#模型大小#TS长度编号AGG平均毫秒AGG总和毫秒进展平均毫秒进展总和毫秒DB平均毫秒DB总和毫秒小517241052512125 3000481150介质100302499110550471042 5200003517459大100030024999409 超时超时超时140700419Mutex*(longTS)Proc. t型车大小长度我的天AGG平均毫秒AGG总和毫秒进展平均毫秒进展总和毫秒DB平均毫秒DB总和毫秒小421250014536281197 2420003484951大10005001 600011952 超时920 超时257 1544621互斥体(for所有)Proc. t型车大小长度我的天AGG平均毫秒AGG总和毫秒进展平均毫秒进展总和毫秒DB平均毫秒DB总和毫秒105040783111100 40001872330150120748926225 27000333909502502008316680345 6900037733210050040012851047657 263000381500020010008003152517061294 10350005140581见图4。 实验结果仅包含两个过程节点和在两个方向上连接过程节点的两条边。令N表示在特定测试期间出现在实例模型中的进程的最大数量。 变换序列本身由5个N在规则应用阶段出现的最大实例图具有N+1个节点和2个N +1条边。在我们的不同实验中,N被选择为5,100和1000,分别产生大小为17,302和3002的模型很长的变形序列。对于这个测试集,我们修改了两个规则(即[8]的req和rel的初始模型由2N个节点(N个进程和N个资源)和2N条边组成。6N +1条规则被收集到一个基本的执行单元中,在我们的实验中执行了这个基本的执行单元包含了所有不修改进程和资源数量的规则。在一个基本单元的执行过程中,实例图正好有2个N节点和至多3个N +1条边。在大型模型上很少匹配。第三个测试序列由被组织成四个块的4N个规则应用其中一个块对应于可以同时应用于N个不同的特定规则流程.每个规则应用程序(i)在同一进程上禁用相同规则的执行,(ii)在其他进程上保持相同规则的启用不变,最后,(iii)启用以下规则178G. Varro等人理论计算机科学电子笔记127(2005)167在同一个过程中。该测试序列产生尺寸为5N的模型,在混凝土运行中为50、150、250、500和1000。(Rulereq必须再次稍微修改,以确保适当的行为。)当然,我们进行了额外的测试用例(不同的例子),以比较这些工具,由于空间的考虑,没有在当前的文件。我们的实验可以总结如下。• 在匹配数量相对于模型大小较大的情况下,PROGRES具有良好的性能。然而,如果一个大的模型中只有几个匹配,那么它的回溯策略会导致运行时性能的严重下降。• 在大型模型的情况下,AGG的更新策略至少消耗与模式匹配阶段本身一样多的时间,这是非常意外的,因为DB引擎在恒定时间内执行更新(对基表)• 我们的图转换引擎基于关系数据库的编译,实现了我们的最低目标,即显著优于像AGG或PROGRES这样的解释方法。 然而,为了进行真正的评估,我们需要将我们的DB方法与其他编译的图转换引擎(如Fujaba [13])进行比较,这仍有待完成。虽然我们所有的例子都只包含相对较少的规则(少于20条),但我们相信在典型的软件工程应用程序中(例如,数百条相当小的规则),我们的数据库方法的性能不会急剧下降,因为视图的计算每次只需要连接几个表,并且它与规则的数量无关5结论和今后的工作本文提出了一种新的基于现成关系数据库的图转换引擎在概述了我们方法的主要概念之后,我们进行了几个测试用例,通过将其与AGG [5]和PRORES[18]工具的转换引擎进行比较来评估我们的原型实现。从我们的实验中可以得出的主要结论是,关系数据库提供了一个有前途的候选人作为实现框架的工作图转换引擎。我们提请注意的事实是,我们有希望的实验结果是使用最坏情况下的评估方法,即通过重新计算的下一个规则的意见,从头开始,这仍然是非常不合理的,特别是,模型转换与大量的独立匹配相同的规则。如果我们的目标是增量转换,则需要进一步优化G. Varro等人理论计算机科学电子笔记127(2005)167179未来的故事尽管增量更新技术在许多领域(例如数据库视图重新计算[7],专家系统[6])都有研究,但仍然只有少数RDBMS实现了增量视图更新,即使有很强的限制。PostgreSQL根本不支持这个特性,这是在每个步骤中从头开始重新计算视图的主要原因。引用[1] Andries , M. 和 G.Engels , A hybrid query language for the extended entity relationshipmodel,Journal of Visual Languages and Computing8(1997).[2] Büohlen,B.,Specificgraphmodelsandtheirmapingstotoacommmonmodell,in:Procofthe2ndInternationalWorkshoponApplicationofGraphTransformationwithIndustrialRelevance(AGTIVE),LNCS3062(2003),pp.45比60[3] D?orr,H. ,“EschericientGraphRéwritingandItsImplementatio n,“LNCS922,SPRINGER-VERLAG,1995.[4] Ehrig,H.,G.恩格斯,H. J. Kreowski和G. Rozenberg,editors,[5] Ermel,C.,M. Rudolf和G. [ 4 ]《世界科学》,1999年551-603[6] 福吉角L.,RETE:A Fast Algorithm for the Many Pattern/Many Object Match Problem,Arti Ficial Intelligence19(1982),pp. 十七比三十七[7] 古普塔A。和I. S. Mumick,编辑,[8] 赫克尔河,由图变换指定的反应系统的组成验证,在:E。Astesiano,编辑,软件工程的基本方法:第一次国际会议,FASE,LNCS1382(1998),pp。138-153[9] Jahnke , J.H. , W.Schafer , J.P.我 们 会 去 找 一 个 。 Zündorf , Suppportingiterationsinexploratorydatabase reengineering processes , Science of ComputerProgramming45(2002),pp.99比136[10] Kii,N. 、杨A.Schur?randB. Westfechtel,GRAS,一个面向软件工程应用的图形数据库系统,J.Lee,Reid,编辑,Proc. CaseConf. 计算机辅助软件工程(1993),pp。272-286。[11] Larrosa,J.和G. Valiente,用于图模式匹配的约束满足算法,计算机科学中的数学结构12(2002),pp.403-422[12] Momjian,B.,“PostgreSQL: Introduction and Concepts,” Addison-Wesley,[13] 你 是 我 的 朋 友 。 , J.我 不 知 道 。 Zu? ndorf , TheFUJABAeEscherichironment , in :The22ndInternationalConference on Software Engineering(ICSE)(2000),pp.742-745[14] 拉马克里什南河,巴西-地和J. Gehrke,“Database Management Systems,”McGraw-Hill,2002,第3版。[15] 罗森伯格,G.,编辑,[16] Schürr,A. ,Specicionofgraphtranslatorswithiplegramars,Technicaleport,RWTH Aachen,Fachgruppe Informatik,Germany(1994).[17] Schürr,A. [15]《世界科学》,1997页。479-546180G. Varro等人理论计算机科学电子笔记127(2005)167[18] Schürr,A. 、杨A. 我是一个很好的朋友. Zündor f,“In[4],“WorldSciencentific,1999.[19] Ullman,J.D.,Widom和H. Garcia-Molina,[20] 好的,D。、白藓G. 你好啊。Pataricza,Designingheutomatictransforofisuallanguages,Science of Computer Programming44(2002),pp.205-227[21] Zündorr f,A. 在P R O GRES中,Grap ppat m a t em atingin:Proc。 5thInt。 WorkshoponGraphGrammars and their Application to Computer Science,LNCS 1073(1996),pp. 454-468
下载后可阅读完整内容,剩余1页未读,立即下载
![.pdf](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- VMP技术解析:Handle块优化与壳模板初始化
- C++ Primer 第四版更新:现代编程风格与标准库
- 计算机系统基础实验:缓冲区溢出攻击(Lab3)
- 中国结算网上业务平台:证券登记操作详解与常见问题
- FPGA驱动的五子棋博弈系统:加速与创新娱乐体验
- 多旋翼飞行器定点位置控制器设计实验
- 基于流量预测与潮汐效应的动态载频优化策略
- SQL练习:查询分析与高级操作
- 海底数据中心散热优化:从MATLAB到动态模拟
- 移动应用作业:MyDiaryBook - Google Material Design 日记APP
- Linux提权技术详解:从内核漏洞到Sudo配置错误
- 93分钟快速入门 LaTeX:从入门到实践
- 5G测试新挑战与罗德与施瓦茨解决方案
- EAS系统性能优化与故障诊断指南
- Java并发编程:JUC核心概念解析与应用
- 数据结构实验报告:基于不同存储结构的线性表和树实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)