算法导论试题及答案_第1页
算法导论试题及答案_第2页
算法导论试题及答案_第3页
算法导论试题及答案_第4页
算法导论试题及答案_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

算法导论试题及答案第一题:算法基础与复杂度分析(20分)1.1选择题(每题2分,共10分)1.以下关于算法复杂度的说法,正确的是:A.算法的时间复杂度与输入规模无关B.算法的时间复杂度是指算法执行所需的具体时间C.算法的时间复杂度通常用大O表示法来描述D.算法的时间复杂度越小,实际运行时间一定越短2.在分析递归算法的复杂度时,通常使用哪种方法来求解递归方程?A.直接代入法B.递归树法C.主定理法D.以上都是3.下列哪项是算法必须具备的基本特征?A.有穷性B.确定性C.可行性D.以上都是4.对于一个算法,其渐进上界、渐进下界和渐进紧界分别对应的是:A.O符号、Ω符号、Θ符号B.Ω符号、O符号、Θ符号C.Θ符号、O符号、Ω符号D.O符号、Θ符号、Ω符号5.在算法设计中,"分而治之"策略的基本思想是:A.将问题分解为若干子问题,分别解决后再合并B.从简单情况开始,逐步构建解决方案C.贪心地选择当前最优解D.通过暴力枚举所有可能解来寻找最优解1.2填空题(每空1分,共10分)1.算法是解决特定问题的一系列明确、有限的步骤,它具有五个基本特征:输入、输出、______、确定性和可行性。2.描述算法效率的复杂度通常包括______复杂度和空间复杂度。3.在渐近表示法中,O(2^n)和O(n^2)的增长速度关系是______。4.对于递归方程T(n)=2T(n/2)+n^2,使用主定理求解得到的时间复杂度为______。5.算法分析中,平均情况分析考虑的是输入规模为n时所有可能输入的______。6.在算法设计中,动态规划方法通常用于解决具有______性质的问题。7.贪心算法在每一步选择中都采取当前状态下______的选择,从而希望导致结果是全局最优的。8.对于一个具有n个顶点的完全图,其边数为______。9.在排序算法中,快速排序的平均时间复杂度为______。10.在图算法中,Dijkstra算法用于求解______最短路径问题。第二题:排序与搜索算法(20分)2.1算法设计题(10分)设计一个算法,对一个包含n个整数的数组进行排序,要求:1)算法的时间复杂度为O(nlogn);2)算法是稳定的;3)算法能够处理重复元素;4)分析算法的时间和空间复杂度;5)给出算法的伪代码实现。2.2算法分析题(10分)分析以下排序算法的时间复杂度:```functionstrangeSort(A):n=length(A)forifrom0ton-1:forjfromi+1ton:ifA[j]<A[i]:swap(A[i],A[j])returnA```1)该算法在最坏情况下的时间复杂度是多少?2)该算法在最好情况下的时间复杂度是多少?3)该算法是否为稳定排序算法?为什么?4)该算法与冒泡排序有何不同?5)如果对已排序的数组进行排序,该算法的性能如何?第三题:动态规划与贪心算法(20分)3.1动态规划应用题(10分)问题描述:给定一个长度为n的整数数组nums,找出其中连续子数组的最大和(至少包含一个元素)。例如,对于数组[-2,1,-3,4,-1,2,1,-5,4],连续子数组[4,-1,2,1]的和最大,为6。1)设计一个动态规划算法解决该问题;2)分析算法的时间和空间复杂度;3)给出算法的伪代码实现;4)解释动态规划的状态转移方程;5)优化算法的空间复杂度。3.2贪心算法分析题(10分)问题描述:活动选择问题:有n个活动,每个活动都有一个开始时间s_i和结束时间f_i,如果两个活动的执行时间不重叠,则称它们是兼容的。目标是选择一个兼容活动子集,使得活动数量最多。1)判断该问题是否适合使用贪心算法解决,并说明理由;2)设计一个贪心算法解决该问题;3)证明该贪心算法能够得到最优解;4)分析算法的时间和空间复杂度;5)给出算法的伪代码实现。第四题:图算法(20分)4.1图算法设计题(10分)问题描述:给定一个有向图G=(V,E),其中V是顶点集,E是边集,每条边(u,v)有一个权重w(u,v)表示从顶点u到顶点v的距离。设计一个算法找出从源顶点s到所有其他顶点的最短路径。1)设计一个算法解决该问题,要求能够处理负权边但不能处理负权环;2)分析算法的正确性和时间复杂度;3)给出算法的伪代码实现;4)解释算法中松弛操作的作用;5)比较该算法与Dijkstra算法的异同。4.2图算法应用题(10分)问题描述:社交网络中的"六度分隔"理论认为,世界上任何两个人之间的社交距离不超过六步。给定一个表示社交网络的图G=(V,E),其中顶点代表人,边表示两个人是朋友关系。设计一个算法计算图中任意两个顶点之间的最短路径长度,并验证"六度分隔"理论在该网络中的适用性。1)选择合适的图算法解决该问题,并说明理由;2)分析算法的时间和空间复杂度;3)给出算法的伪代码实现;4)如何利用该算法验证"六度分隔"理论?5)如果图的规模非常大,如何优化算法的性能?第五题:高级算法与计算理论(20分)5.1高级算法设计题(10分)问题描述:字符串匹配问题:给定一个文本字符串T和一个模式字符串P,找出P在T中所有出现的位置。例如,T="abababab",P="aba",则P在T中的位置为0、2和4。1)设计一个高效的字符串匹配算法,要求时间复杂度优于O(nm),其中n是T的长度,m是P的长度;2)分析算法的时间和空间复杂度;3)给出算法的伪代码实现;4)解释算法中预处理过程的作用;5)讨论算法处理字符集大小对性能的影响。5.2计算理论分析题(10分)问题描述:旅行商问题(TSP):给定一个完全图,每条边有一个权重,求访问每个顶点恰好一次并返回起点的最短回路。1)分析旅行商问题的计算复杂度;2)证明旅行商问题是NP难的;3)设计一个近似算法解决该问题,并分析近似比;4)对于规模较小的实例,如何保证找到最优解?5)讨论旅行商问题的实际应用场景及其挑战。标准答案及解析第一题:算法基础与复杂度分析(20分)1.1选择题(每题2分,共10分)1.C解析:算法的时间复杂度是指算法执行所需的时间与输入规模之间的关系,通常用大O表示法来描述。选项A错误,因为时间复杂度与输入规模直接相关;选项B错误,因为时间复杂度不是具体时间,而是增长率的度量;选项D错误,因为实际运行时间还受到硬件、编程语言等多种因素影响。2.D解析:递归方程的求解方法有多种,包括直接代入法、递归树法和主定理法。直接代入法适用于简单递归式;递归树法通过绘制递归调用树来求解;主定理法适用于特定形式的递归方程。因此,以上方法都可以用于求解递归方程。3.D解析:算法必须具备五个基本特征:输入、输出、有穷性、确定性和可行性。输入是算法执行前需要的数据;输出是算法执行后的结果;有穷性是指算法必须在执行有限步骤后终止;确定性是指算法的每一步都有明确的定义;可行性是指算法的每一步都是可执行的。4.A解析:在算法分析中,O符号表示渐进上界,Ω符号表示渐进下界,Θ符号表示渐进紧界。如果一个函数f(n)=O(g(n)),表示f(n)的增长率不超过g(n)的增长率;f(n)=Ω(g(n))表示f(n)的增长率不小于g(n)的增长率;f(n)=Θ(g(n))表示f(n)和g(n)的增长率相同。5.A解析:"分而治之"(DivideandConquer)是一种重要的算法设计策略,其基本思想是将问题分解为若干子问题,分别解决这些子问题,然后将子问题的解合并得到原问题的解。典型的分治算法包括归并排序、快速排序等。选项B描述的是动态规划或贪心算法的思想;选项C描述的是贪心算法的思想;选项D描述的是暴力枚举法。1.2填空题(每空1分,共10分)1.有穷性解析:算法的基本特征包括输入、输出、有穷性、确定性和可行性。有穷性是指算法必须在执行有限步骤后终止。2.时间解析:描述算法效率的复杂度通常包括时间复杂度和空间复杂度。时间复杂度衡量算法执行所需的时间与输入规模的关系;空间复杂度衡量算法执行所需的存储空间与输入规模的关系。3.O(2^n)的增长速度比O(n^2)快解析:在渐近表示法中,O(2^n)表示指数级增长,而O(n^2)表示多项式增长。当n增大时,指数级增长的速度远快于多项式增长。4.O(n^2)解析:对于递归方程T(n)=2T(n/2)+n^2,可以使用主定理求解。主定理指出,对于形式为T(n)=aT(n/b)+f(n)的递归方程,如果f(n)=Ω(n^(log_ba+ε)),其中ε>0,则T(n)=Θ(f(n))。这里a=2,b=2,f(n)=n^2,log_ba=log_22=1,f(n)=n^2=Ω(n^(1+ε)),因此T(n)=Θ(n^2)。5.平均运行时间解析:平均情况分析考虑的是输入规模为n时所有可能输入的平均运行时间。它假设输入服从某种概率分布,然后计算算法在该分布下的期望运行时间。6.最优子结构解析:动态规划方法通常用于解决具有最优子结构的问题。最优子结构是指问题的最优解包含子问题的最优解。这意味着可以通过求解子问题来构建原问题的最优解。7.最优解析:贪心算法在每一步选择中都采取当前状态下最优的选择,从而希望导致结果是全局最优的。贪心算法的关键是证明局部最优选择能够导致全局最优解。8.n(n-1)/2解析:完全图是指每两个不同的顶点之间都有一条边相连的图。对于一个具有n个顶点的完全图,每个顶点与其他n-1个顶点相连,因此总共有n(n-1)条边。由于每条边被计算了两次(从u到v和从v到u),所以实际边数为n(n-1)/2。9.O(nlogn)解析:快速排序的平均时间复杂度为O(nlogn)。在最坏情况下(如数组已经有序或逆序),快速排序的时间复杂度为O(n^2),但通过随机选择基准元素可以避免最坏情况的出现。10.单源解析:Dijkstra算法用于求解单源最短路径问题,即从一个给定的源顶点到图中所有其他顶点的最短路径。该算法要求图中没有负权边。第二题:排序与搜索算法(20分)2.1算法设计题(10分)算法设计:归并排序归并排序是一种稳定的排序算法,时间复杂度为O(nlogn),空间复杂度为O(n),能够处理重复元素。算法思路:1)将数组分成两个子数组;2)递归地对两个子数组进行排序;3)将两个已排序的子数组合并成一个有序数组。伪代码实现:```functionmergeSort(A,left,right):ifleft<right:mid=floor((left+right)/2)mergeSort(A,left,mid)mergeSort(A,mid+1,right)merge(A,left,mid,right)functionmerge(A,left,mid,right):n1=mid-left+1n2=right-midL=newarrayofsizen1R=newarrayofsizen2forifrom0ton1-1:L[i]=A[left+i]forjfrom0ton2-1:R[j]=A[mid+1+j]i=0j=0k=leftwhilei<n1andj<n2:ifL[i]<=R[j]:A[k]=L[i]i=i+1else:A[k]=R[j]j=j+1k=k+1whilei<n1:A[k]=L[i]i=i+1k=k+1whilej<n2:A[k]=R[j]j=j+1k=k+1```时间复杂度分析:-归并排序的时间复杂度为O(nlogn)。在每一层递归中,合并操作需要O(n)时间,而递归深度为O(logn),因此总时间为O(nlogn)。-最坏情况、平均情况和最好情况的时间复杂度均为O(nlogn)。空间复杂度分析:-归并排序需要额外的空间来存储临时数组L和R,因此空间复杂度为O(n)。稳定性分析:-归并排序是稳定的排序算法,因为在合并过程中,当两个元素相等时,我们优先选择左子数组的元素,从而保持相等元素的原始相对顺序。2.2算法分析题(10分)给定算法分析:```functionstrangeSort(A):n=length(A)forifrom0ton-1:forjfromi+1ton:ifA[j]<A[i]:swap(A[i],A[j])returnA```1)最坏情况下的时间复杂度:O(n^2)解析:该算法有两层循环,外层循环执行n次,内层循环在最坏情况下执行n次,因此时间复杂度为O(n^2)。最坏情况发生在数组逆序时,每次内层循环都需要交换元素。2)最好情况下的时间复杂度:O(n^2)解析:即使数组已经有序,该算法仍然需要执行两重循环,因为内层循环仍然需要检查所有元素。因此,最好情况下的时间复杂度仍然是O(n^2)。3)稳定性分析:不是稳定排序算法解析:该算法不是稳定排序算法。考虑数组[2,1,1'](其中1'表示第二个1),在第一次交换后,数组变为[1,2,1'],然后继续比较时,1'和2比较,不交换,最后1'和1比较,交换后数组变为[1,1',2]。这样,原来的两个1的相对顺序发生了变化,因此该算法不稳定。4)与冒泡排序的比较:-相似点:两者都是基于比较的排序算法,时间复杂度均为O(n^2)。-不同点:冒泡排序通过相邻元素的比较和交换来工作,每次外层循环会将当前未排序部分的最小元素"冒泡"到正确的位置;而该算法通过当前元素与后续所有元素的比较,找到最小元素并交换。5)对已排序数组的性能:-虽然数组已经有序,但该算法仍然需要执行两重循环,因此时间复杂度仍为O(n^2),与未排序数组相同。这与冒泡排序不同,冒泡排序在最好情况下(数组已有序)的时间复杂度为O(n)。第三题:动态规划与贪心算法(20分)3.1动态规划应用题(10分)问题描述:最大子数组和问题算法设计:1)状态定义:设dp[i]表示以第i个元素结尾的连续子数组的最大和。2)状态转移方程:dp[i]=max(nums[i],dp[i-1]+nums[i])3)初始化:dp[0]=nums[0]4)结果:max(dp[0],dp[1],...,dp[n-1])伪代码实现:```functionmaxSubArray(nums):n=length(nums)ifn==0:return0dp=newarrayofsizendp[0]=nums[0]max_sum=dp[0]forifrom1ton-1:dp[i]=max(nums[i],dp[i-1]+nums[i])ifdp[i]>max_sum:max_sum=dp[i]returnmax_sum```时间复杂度分析:-该算法只需要一次遍历数组,因此时间复杂度为O(n)。空间复杂度分析:-该算法需要一个长度为n的数组dp来存储中间结果,因此空间复杂度为O(n)。状态转移方程解释:-状态转移方程dp[i]=max(nums[i],dp[i-1]+nums[i])表示:以第i个元素结尾的连续子数组的最大和,要么是第i个元素本身,要么是第i个元素加上以第i-1个元素结尾的连续子数组的最大和。这体现了最优子结构性质:问题的最优解包含子问题的最优解。空间复杂度优化:-可以观察到,在计算dp[i]时,只需要dp[i-1]的值,而不需要整个dp数组。因此,可以将空间复杂度优化为O(1):```functionmaxSubArray(nums):n=length(nums)ifn==0:return0current_sum=nums[0]max_sum=current_sumforifrom1ton-1:current_sum=max(nums[i],current_sum+nums[i])ifcurrent_sum>max_sum:max_sum=current_sumreturnmax_sum```3.2贪心算法分析题(10分)问题描述:活动选择问题1)贪心算法适用性分析:-活动选择问题适合使用贪心算法解决,因为该问题具有贪心选择性质和最优子结构性质。-贪心选择性质:在剩余可选活动中,选择结束时间最早的活动不会影响得到最优解。-最优子结构性质:如果已选择的活动集合是最优解,那么剩余问题的解也是最优的。2)贪心算法设计:-按照活动的结束时间对活动进行排序。-选择第一个活动(结束时间最早的活动)。-在剩余活动中,选择开始时间不小于上一个所选活动结束时间的活动,并重复此过程。伪代码实现:```functionactivitySelection(start,finish):n=length(start)//按照结束时间排序sortactivitiesbyfinishtimeinascendingorder//选择第一个活动selected=[0]last_selected=0forifrom1ton-1:ifstart[i]>=finish[last_selected]:selected.append(i)last_selected=ireturnselected```3)贪心算法正确性证明:-使用数学归纳法证明贪心算法能够得到最优解。-基础情况:只有一个活动时,贪心算法选择该活动,显然是最优解。-归纳假设:假设对于包含k个活动的问题,贪心算法能够得到最优解。-归纳步骤:对于包含k+1个活动的问题,设贪心算法选择的活动集合为S,最优解为O。-如果S和O的第一个活动相同,则根据归纳假设,贪心算法对剩余问题的解也是最优的。-如果S和O的第一个活动不同,设贪心算法选择的活动为a,最优解选择的活动为b,且a的结束时间不大于b的结束时间。我们可以用a替换O中的b,得到一个新的最优解O',其中O'包含a且不与O中的其他活动冲突。然后,根据归纳假设,贪心算法对剩余问题的解也是最优的。4)算法复杂度分析:-排序活动需要O(nlogn)时间。-选择活动需要O(n)时间。-因此,算法的总时间复杂度为O(nlogn)。-空间复杂度为O(1)(如果不考虑存储结果的空间)。5)算法实现细节:-在实现时,可以将活动的开始时间和结束时间存储在结构体或对象中,然后按照结束时间排序。-也可以使用索引来跟踪活动,而不需要实际存储活动集合,只需要返回活动的数量或最大兼容活动数量。第四题:图算法(20分)4.1图算法设计题(10分)问题描述:单源最短路径问题(带负权边)算法设计:Bellman-Ford算法1)算法设计:-Bellman-Ford算法可以处理带有负权边的图,但不能处理带有负权环的图。-算法通过松弛操作逐步逼近最短路径,最多进行|V|-1轮松弛操作,其中|V|是顶点数。-在第i轮松弛后,可以保证从源点到任何顶点的最短路径最多包含i条边。伪代码实现:```functionbellmanFord(G,s):n=numberofverticesinGdist=newarrayofsizenprev=newarrayofsizen//初始化forifrom0ton-1:dist[i]=∞prev[i]=nulldist[s]=0//松弛操作forifrom1ton-1:foreachedge(u,v)inG:ifdist[u]+w(u,v)<dist[v]:dist[v]=dist[u]+w(u,v)prev[v]=u//检查负权环foreachedge(u,v)inG:ifdist[u]+w(u,v)<dist[v]:error"Graphcontainsanegative-weightcycle"returndist,prev```2)正确性分析:-Bellman-Ford算法的正确性基于以下事实:在无负权环的图中,从源点到任何顶点的最短路径最多包含|V|-1条边。-算法通过|V|-1轮松弛操作,保证找到所有不超过|V|-1条边的最短路径。-额外的一轮松弛操作用于检测负权环:如果在第|V|轮松弛操作中仍然可以更新距离,则图中存在负权环。3)时间复杂度分析:-算法的主要部分是两层循环:外层循环执行|V|-1次,内层循环遍历所有边|E|次,因此时间复杂度为O(|V||E|)。-检测负权环的循环需要遍历所有边|E|次,因此总时间复杂度仍为O(|V||E|)。4)松弛操作解释:-松弛操作是Bellman-Ford算法的核心,用于更新最短路径的估计值。-对于每条边(u,v),如果通过u到达v的路径比当前已知的到v的路径更短,则更新到v的距离和前驱顶点。-松弛操作可以理解为:尝试通过边(u,v)来改进到v的已知最短路径。5)与Dijkstra算法的比较:-相同点:两种算法都是用于求解单源最短路径问题。-不同点:-Dijkstra算法要求图中不能有负权边,而Bellman-Ford算法可以处理负权边(但不能处理负权环)。-Dijkstra算法使用优先队列,时间复杂度为O(|E|+|V|log|V|),而Bellman-Ford算法的时间复杂度为O(|V||E|)。-Dijkstra算法在每一步选择距离源点最近的顶点,而Bellman-Ford算法通过松弛操作逐步逼近最短路径。4.2图算法应用题(10分)问题描述:社交网络中的"六度分隔"理论验证1)算法选择:-广度优先搜索(BFS)适合解决该问题,因为它能够逐层遍历图,计算源顶点到其他所有顶点的最短路径。-BFS算法从一个顶点开始,先访问其所有直接邻居(距离为1),然后访问这些邻居的邻居(距离为2),依此类推,直到访问所有可达顶点。伪代码实现:```functionBFS(G,s):n=numberofverticesinGdist=newarrayofsizenforifrom0ton-1:dist[i]=-1//表示未访问queue=newqueue()dist[s]=0queue.enqueue(s)whilequeueisnotempty:u=queue.dequeue()foreachneighborvofu:ifdist[v]==-1:dist[v]=dist[u]+1queue.enqueue(v)returndist```2)算法复杂度分析:-BFS算法的时间复杂度为O(|V|+|E|),其中|V|是顶点数,|E|是边数。-空间复杂度为O(|V|),用于存储距离数和队列。3)"六度分隔"理论验证:-对社交网络中的每个顶点执行BFS算法,计算该顶点到其他所有顶点的最短路径距离。-统计所有顶点对之间的最大距离,如果最大距离不超过6,则验证了"六度分隔"理论在该网络中适用。-计算平均距离,如果平均距离接近6,则部分支持该理论。4)大规模图优化:-对于大规模社交网络,可以采用以下优化策略:-并行化:将图划分为多个部分,并行执行BFS算法。-增量式BFS:当网络动态变化时,只更新受影响的部分。-采样:对大型网络进行随机采样,估算全局距离分布。-使用近似算法:如LabelPropagation算法,以牺牲一定精度为代价提高效率。5)实际应用场景:-社交网络分析:研究信息传播、影响力传播等。-推荐系统:基于共同好友推荐新连接。-犯罪网络分析:识别关键人物和团伙。-生物信息学:研究蛋白质相互作用网络。第五题:高级算法与计算理论(20分)5.1高级算法设计题(10分)问题描述:字符串匹配问题算法设计:KMP算法(Knuth-Morris-Pratt算法)1)算法设计:-KMP算法通过预处理模式串P,构建部分匹配表(也称为next数组或failure函数),以避免不必要的字符比较。-预处理阶段:计算模式串P的最长公共前后缀长度,用于在匹配失败时确定模式串的移动位置。-匹配阶段:利用预处理得到的部分匹配表,在文本串T中查找模式串P的所有出现位置。伪代码实现:```functioncomputeLPSArray(P):m=length(P)lps=newarrayofsizemlps[0]=0len=0i=1whilei<m:ifP[i]==P[len]:len=len+1lps[i]=leni=i+1else:iflen!=0:len=lps[len-1]else:lps[i]=0i=i+1returnlpsfunctionKMP(T,P):n=length(T)m=length(P)ifm==0:returnemptylistlps=computeLPSArray(P)i=0//indexforTj=0//indexforPoccurrences=emptylistwhilei<n:ifP[j]==T[i]:i=i+1j=j+1ifj==m:occurrences.append(i-j)j=lps[j-1]else:ifj!=0:j=lps[j-1]else:i=i+1returnoccurrences```2)时间复杂度分析:-预处理阶段:计算部分匹配表的时间复杂度为O(m),其中m是模式串的长度。-匹配阶段:文本串T的每个字符最多被比较两次(一次前进,一次回退),因此时间复杂度为O(n),其中n是文本串的长度。-总时间复杂度为O(n+m),优于朴素的O(nm)算法。3)空间复杂度分析:-需要额外的空间存储部分匹配表,空间复杂度为O(m)。4)预处理过程解释:-预处理过程计算模式串P的最长公共前后缀长度,用于在匹配失败时确定模式串的移动位置。-例如,对于模式串"ABABC",部分匹配表为[0,0,1,2,0],表示:-对于位置0,没有前缀和后缀,值为0。-对于位置1,前缀"A"和后缀"B"不匹配,值为0。-对于位置2,前缀"AB"和后缀"AB"匹配,长度为1。-对于位置3,前缀"ABA"和后缀"BAB"的最长公共前后缀是"AB",长度为2。-对于位置4,前缀"ABAB"和后缀"CABC"不匹配,值为0。-在匹配过程中,如果发生不匹配,模式串可以移动lps[j-1]个位置,避免不必要的比较。5)字符集大小影响:-KMP算法的性能与字符集大小无关,因为算法基于字符比较,而不依赖于字符的具体值。-然而,字符集大小会影响实际运行时间,因为较大的字符集可能导致更多的内存使用和缓存不友好。-对于非常大的字符集,可以考虑使用更高效的字符串匹配算法,如Boyer-Moore算法或Sunday算

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论