




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 学习要点学习要点:了解递归的概念。了解递归的概念。掌握设计有效算法的分治战略。掌握设计有效算法的分治战略。经过下面的范例学习分治战略设计技巧。经过下面的范例学习分治战略设计技巧。1二分搜索技术;二分搜索技术; 2大整数乘法;大整数乘法;3Strassen矩阵乘法;矩阵乘法;4棋盘覆盖;棋盘覆盖;5合并排序和快速排序;合并排序和快速排序;6线性时间选择;线性时间选择;7最接近点对问题;最接近点对问题;8循环赛日程表。循环赛日程表。n将要求解的较大规模的问题分割成k个更小规模的子问题。nT(n/2)T(n/2)T(n/2)T(n/2)T(n)= n对这k个子问题分别求解。假设子问题的规模依然不够
2、小,那么再划分为k个子问题,如此递归的进展下去,直到问题规模足够小,很容易求出其解为止。n对这k个子问题分别求解。假设子问题的规模依然不够小,那么再划分为k个子问题,如此递归的进展下去,直到问题规模足够小,很容易求出其解为止。nT(n)=n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4) n将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐渐求出原来问题的解。n将求出的小规模的问题的解合并为一个更大规模的问题的解,自
3、底向上逐渐求出原来问题的解。nT(n)=n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐渐求出原来问题的解。nT(n)=n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4) 分治法的设计思想是,将一个难
4、以直接处理的大问题,分治法的设计思想是,将一个难以直接处理的大问题,分割成一些规模较小的一样问题,以便各个击破,分割成一些规模较小的一样问题,以便各个击破,分而治之。分而治之。2.1 递归的概念n直接或间接地调用本身的算法称为递归算法。用函数本身给出定义的函数称为递归函数。n由分治法产生的子问题往往是原问题的较小方式,这就为运用递归技术提供了方便。在这种情况下,反复运用分治手段,可以使子问题与原问题类型一致而其规模却不断减少,最终使子问题减少到很容易直接求出其解。这自然导致递归过程的产生。n分治与递归像一对孪生兄弟,经常同时运用在算法设计之中,并由此产生许多高效算法。下面来看几个实例。2.1
5、递归的概念例例1 1 阶乘函数阶乘函数 阶乘函数可递归地定义为:阶乘函数可递归地定义为:00)!1(1!nnnnn边境条件边境条件递归方程递归方程边境条件与递归方程是递归函数的二个要素,递归函数只需具备了这两个要素,才干在有限次计算后得出结果。2.1 递归的概念例例2 Fibonacci2 Fibonacci数列数列无穷数列无穷数列1 1,1 1,2 2,3 3,5 5,8 8,1313,2121,3434,5555,称为,称为FibonacciFibonacci数列。它可以递归地定义为:数列。它可以递归地定义为:边境条件边境条件递归方程递归方程110)2() 1(11)(nnnnFnFnF第
6、n个Fibonacci数可递归地计算如下:int fibonacci(int n) if (n 1时,perm(R)由(r1)perm(R1),(r2)perm(R2),(rn)perm(Rn)构成。 2.1 递归的概念例例5 5 整数划分问题整数划分问题将正整数将正整数n n表示成一系列正整数之和:表示成一系列正整数之和:n=n1+n2+nkn=n1+n2+nk,其中其中n1n2nk1n1n2nk1,k1k1。正整数正整数n n的这种表示称为正整数的这种表示称为正整数n n的划分。求正整数的划分。求正整数n n的不的不同划分个数。同划分个数。 例如正整数6有如下11种不同的划分: 6; 5+
7、1; 4+2,4+1+1; 3+3,3+2+1,3+1+1+1; 2+2+2,2+2+1+1,2+1+1+1+1; 1+1+1+1+1+1。(2) q(n,m)=q(n,n),mn;最大加数n1实践上不能大于n。因此,q(1,m)=1。(1) q(n,1)=1,n1;当最大加数n1不大于1时,任何正整数n只需一种划分方式,即nn111 (4) q(n,m)=q(n,m-1)+q(n-m,m),nm1;正整数n的最大加数n1不大于m的划分由n1=m的划分和n1n-1 的划分组成。(3) q(n,n)=1+q(n,n-1);正整数n的划分由n1=n的划分和n1n-1的划分组成。2.1 递归的概念例
8、例5 5 整数划分问题整数划分问题前面的几个例子中,问题本身都具有比较明显的递归关系,因前面的几个例子中,问题本身都具有比较明显的递归关系,因此容易用递归函数直接求解。此容易用递归函数直接求解。在本例中,假设设在本例中,假设设p(n)p(n)为正整数为正整数n n的划分数,那么难以找到递归的划分数,那么难以找到递归关系,因此思索添加一个自变量:将最大加数关系,因此思索添加一个自变量:将最大加数n1n1不大于不大于m m的划分的划分个数记作个数记作q(n,m)q(n,m)。可以建立。可以建立q(n,m)q(n,m)的如下递归关系。的如下递归关系。11, 1),() 1,() 1,(1),(1),
9、(mnmnmnmnmmnqmnqnnqnnqmnq2.1 递归的概念例例5 5 整数划分问题整数划分问题前面的几个例子中,问题本身都具有比较明显的递归关系,因前面的几个例子中,问题本身都具有比较明显的递归关系,因此容易用递归函数直接求解。此容易用递归函数直接求解。在本例中,假设设在本例中,假设设p(n)p(n)为正整数为正整数n n的划分数,那么难以找到递归的划分数,那么难以找到递归关系,因此思索添加一个自变量:将最大加数关系,因此思索添加一个自变量:将最大加数n1n1不大于不大于m m的划分的划分个数记作个数记作q(n,m)q(n,m)。可以建立。可以建立q(n,m)q(n,m)的如下递归关
10、系。的如下递归关系。正整数n的划分数p(n)=q(n,n)。 2.1 递归的概念例例6 Hanoi6 Hanoi塔问题塔问题设设a,b,ca,b,c是是3 3个塔座。开场时,在塔座个塔座。开场时,在塔座a a上有一叠共上有一叠共n n个圆盘,这个圆盘,这些圆盘自下而上,由大到小地叠在一同。各圆盘从小到大编号些圆盘自下而上,由大到小地叠在一同。各圆盘从小到大编号为为1,2,n,1,2,n,现要求将塔座现要求将塔座a a上的这一叠圆盘移到塔座上的这一叠圆盘移到塔座b b上,并仍上,并仍按同样顺序叠置。在挪动圆盘时应遵守以下挪动规那么:按同样顺序叠置。在挪动圆盘时应遵守以下挪动规那么:规那么规那么1
11、 1:每次只能挪动:每次只能挪动1 1个圆盘;个圆盘;规那么规那么2 2:任何时辰都不允许将较大的圆盘压在较小的圆盘之上;:任何时辰都不允许将较大的圆盘压在较小的圆盘之上;规那么规那么3 3:在满足挪动规那么:在满足挪动规那么1 1和和2 2的前提下,可将圆盘移至的前提下,可将圆盘移至a,b,ca,b,c中任一塔座上。中任一塔座上。在问题规模较大时,较难找到普通的方法,因此我们尝试用递归技术来处理这个问题。当n=1时,问题比较简单。此时,只需将编号为1的圆盘从塔座a直接移至塔座b上即可。当n1时,需求利用塔座c作为辅助塔座。此时假设能设法将n-1个较小的圆盘按照挪动规那么从塔座a移至塔座c,然
12、后,将剩下的最大圆盘从塔座a移至塔座b,最后,再设法将n-1个较小的圆盘按照挪动规那么从塔座c移至塔座b。由此可见,n个圆盘的挪动问题可分为2次n-1个圆盘的挪动问题,这又可以递归地用上述方法来做。由此可以设计出解Hanoi塔问题的递归算法如下。2.1 递归的概念例例6 Hanoi6 Hanoi塔问题塔问题 void hanoi(int n, int a, int b, int c) if (n 0) hanoi(n-1, a, c, b); move(a,b); hanoi(n-1, c, b, a); 优点:构造明晰,可读性强,而且容易用优点:构造明晰,可读性强,而且容易用数学归纳法来证明
13、算法的正确性,因此它数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。为设计算法、调试程序带来很大方便。缺陷:递归算法的运转效率较低,无论是缺陷:递归算法的运转效率较低,无论是耗费的计算时间还是占用的存储空间都比耗费的计算时间还是占用的存储空间都比非递归算法要多。非递归算法要多。处理方法:在递归算法中消除递归调用,使其处理方法:在递归算法中消除递归调用,使其转化为非递归算法。转化为非递归算法。1 1、采用一个用户定义的栈来模拟系统的递归调、采用一个用户定义的栈来模拟系统的递归调用任务栈。该方法通用性强,但本质上还是递用任务栈。该方法通用性强,但本质上还是递归,只不过人工做了
14、本来由编译器做的事情,归,只不过人工做了本来由编译器做的事情,优化效果不明显。优化效果不明显。2 2、用递推来实现递归函数。、用递推来实现递归函数。3 3、经过变换能将一些递归转化为尾递归,从而、经过变换能将一些递归转化为尾递归,从而迭代求出结果。迭代求出结果。 后两种方法在时空复杂度上均有较大改善,后两种方法在时空复杂度上均有较大改善,但其适用范围有限。但其适用范围有限。由于问题的计算复杂性普通是随着问题规模的添加而添加,因此大部分问题满足这个特征。这条特征是运用分治法的前提,它也是大多数问题可以满足的,此特征反映了递归思想的运用能否利用分治法完全取决于问题能否具有这条特征,假设具备了前两条
15、特征,而不具备第三条特征,那么可以思索贪婪算法或动态规划。这条特征涉及到分治法的效率,假设各子问题是不独立的,那么分治法要做许多不用要的任务,反复地解公共的子问题,此时虽然也可用分治法,但普通用动态规划较好。divide-and-conquer(P) if ( | P | = n0) adhoc(P); /处理小规模的问题处理小规模的问题 divide P into smaller subinstances P1,P2,.,Pk;/分解问题分解问题 for (i=1,i=k,i+) yi=divide-and-conquer(Pi); /递归的解各子问题递归的解各子问题 return merg
16、e(y1,.,yk); /将各子问题的解合并为原问题的解将各子问题的解合并为原问题的解 人们从大量实际中发现,在用分治法设计算法时,最好使子问题的规模大致一样。即将一个问题分成大小相等的k个子问题的处置方法是行之有效的。这种使子问题规模大致相等的做法是出自一种平衡(balancing)子问题的思想,它几乎总是比子问题规模不等的做法要好。一个分治法将规模为n的问题分成k个规模为nm的子问题去解。设分解阀值n0=1,且adhoc解规模为1的问题耗费1个单位时间。再设将原问题分解为k个子问题以及用merge将k个子问题的解合并为原问题的解需用f(n)个单位时间。用T(n)表示该分治法解规模为|P|=
17、n的问题所需的计算时间,那么有:11)()/() 1 ()(nnnfmnkTOnT经过迭代法求得方程的解:1log0log)/()(nmjjjkmmnfknnT留意:递归方程及其解只给出留意:递归方程及其解只给出n等于等于m的方幂时的方幂时T(n)的值,但的值,但是假设以为是假设以为T(n)足够平滑,那么由足够平滑,那么由n等于等于m的方幂时的方幂时T(n)的值的值可以估计可以估计T(n)的增长速度。通常假定的增长速度。通常假定T(n)是单调上升的,从是单调上升的,从而当而当minmi+1时,时,T(mi)T(n)T(mi+1)。 分析:假设n=1即只需一个元素,那么只需比较这个元素和x就可以
18、确定x能否在表中。因此这个问题满足分治法的第一个适用条件分析:比较x和a的中间元素amid,假设x=amid,那么x在L中的位置就是mid;假设xai,同理我们只需在amid的后面查找x即可。无论是在前面还是后面查找x,其方法都和在a中查找x一样,只不过是查找的规模减少了。这就阐明了此问题满足分治法的第二个和第三个适用条件。 分析:很显然此问题分解出的子问题相互独立,即在ai的前面或后面查找x是独立的子问题,因此满足分治法的第四个适用条件。给定已按升序排好序的给定已按升序排好序的n个元素个元素a0:n-1,现要在这,现要在这n个元素中找个元素中找出一特定元素出一特定元素x。分析:分析:给定已按
19、升序排好序的给定已按升序排好序的n个元素个元素a0:n-1,现要在这,现要在这n个元素中找个元素中找出一特定元素出一特定元素x。据此容易设计出二分搜索算法:template int BinarySearch(Type a, const Type& x, int l, int r) while (r = l) int m = (l+r)/2; if (x = am) return m; if (x 0时,将2k2k棋盘分割为4个2k-12k-1 子棋盘(a)所示。特殊方格必位于4个较小子棋盘之一中,其他3个子棋盘中无特殊方格。为了将这3个无特殊方格的子棋盘转化为特殊棋盘,可以用一个L型骨
20、牌覆盖这3个较小棋盘的会合处,如 (b)所示,从而将原问题转化为4个较小规模的棋盘覆盖问题。递归地运用这种分割,直至棋盘简化为棋盘11。 void chessBoard(int tr, int tc, int dr, int dc, int size) if (size = 1) return; int t = tile+, / L型骨牌号 s = size/2; / 分割棋盘 / 覆盖左上角子棋盘 if (dr tr + s & dc tc + s) / 特殊方格在此棋盘中 chessBoard(tr, tc, dr, dc, s); else / 此棋盘中无特殊方格 / 用 t 号
21、L型骨牌覆盖右下角 boardtr + s - 1tc + s - 1 = t; / 覆盖其他方格 chessBoard(tr, tc, tr+s-1, tc+s-1, s); / 覆盖右上角子棋盘 if (dr = tc + s) / 特殊方格在此棋盘中 chessBoard(tr, tc+s, dr, dc, s); else / 此棋盘中无特殊方格 / 用 t 号L型骨牌覆盖左下角 boardtr + s - 1tc + s = t; / 覆盖其他方格 chessBoard(tr, tc+s, tr+s-1, tc+s, s); / 覆盖左下角子棋盘 if (dr = tr + s &a
22、mp; dc = tr + s & dc = tc + s) / 特殊方格在此棋盘中 chessBoard(tr+s, tc+s, dr, dc, s); else / 用 t 号L型骨牌覆盖左上角 boardtr + stc + s = t; / 覆盖其他方格 chessBoard(tr+s, tc+s, tr+s, tc+s, s); 复杂度分析复杂度分析T(n)=O(4k) 渐进意义下的最优算法渐进意义下的最优算法00) 1 () 1(4) 1 ()(kkOkTOkT根本思想:将待排序元素分成大小大致一样的根本思想:将待排序元素分成大小大致一样的2个子集合,分个子集合,分别对别对
23、2个子集合进展排序,最终将排好序的子集合合并成为所个子集合进展排序,最终将排好序的子集合合并成为所要求的排好序的集合。要求的排好序的集合。 void MergeSort(Type a, int left, int right) if (leftright) /至少有2个元素 int i=(left+right)/2; /取中点 mergeSort(a, left, i); mergeSort(a, i+1, right); merge(a, b, left, i, right); /合并到数组b copy(a, b, left, right); /复制回数组a 复杂度分析复杂度分析T(n)=O
24、(nlogn) 渐进意义下的最优算法渐进意义下的最优算法11)()2/(2) 1 ()(nnnOnTOnT算法mergeSort的递归过程可以消去。初始序列49 38 65 97 76 13 2738 49 65 97 13 76 27第一步第二步38 49 65 97 13 27 76第三步13 27 38 49 65 76 97&最坏时间复杂度:最坏时间复杂度:O(nlogn)&平均时间复杂度:平均时间复杂度:O(nlogn)&辅助空间:辅助空间:O(n)在快速排序中,记录的比较和交换是从两端向中间进展的,关键字较大的记录一次就能交换到后面单元,关键字较小的记录一次
25、就能交换到前面单元,记录每次挪动的间隔较大,因此总的比较和挪动次数较少。templatevoid QuickSort (Type a, int p, int r) if (pr) int q=Partition(a,p,r); QuickSort (a,p,q-1); /对左半段排序 QuickSort (a,q+1,r); /对右半段排序 templateint Partition (Type a, int p, int r) int i = p, j = r + 1; Type x=ap; / 将 x的元素交换到右边区域 while (true) while (a+i x); if (i
26、= j) break; Swap(ai, aj); ap = aj; aj = x; return j;初始序列6, 7, 5, 2, 5, 8j-;ji5, 7, 5, 2, 6, 8i+;ji5, 6, 5, 2, 7, 8j-;ji5, 2, 5, 6, 7, 8i+;ji完成6, 7, 5, 2, 5, 85, 2, 5 6 7, 8templateint RandomizedPartition (Type a, int p, int r) int i = Random(p,r); Swap(ai, ap); return Partition (a, p, r); 快速排序算法的性能取
27、决于划分的对称性。经过修正算法partition,可以设计出采用随机选择战略的快速排序算法。在快速排序算法的每一步中,当数组还没有被划分时,可以在ap:r中随机选出一个元素作为划分基准,这样可以使划分基准的选择是随机的,从而可以期望划分是较对称的。&最坏时间复杂度:最坏时间复杂度:O(n2)&平均时间复杂度:平均时间复杂度:O(nlogn)&辅助空间:辅助空间:O(n)或或O(logn)给定线性序集中n个元素和一个整数k,1kn,要求找出这n个元素中第k小的元素templateType RandomizedSelect(Type a,int p,int r,int k)
28、 if (p=r) return ap; int i=RandomizedPartition(a,p,r), j=i-p+1; if (k=j) return RandomizedSelect(a,p,i,k); else return RandomizedSelect(a,i+1,r,k-j);在最坏情况下,算法randomizedSelect需求O(n2)计算时间但可以证明,算法randomizedSelect可以在O(n)平均时间内找出n个输入元素中的第k小元素。假设能在线性时间内找到一个划分基准,使得按这个基准所划分出的2个子数组的长度都至少为原数组长度的倍(01是某个正常数),那么就
29、可以在最坏情况下用O(n)时间完成选择义务。例如,假设=9/10,算法递归调用所产生的子数组的长度至少缩短1/10。所以,在最坏情况下,算法所需的计算时间T(n)满足递归式T(n)T(9n/10)+O(n) 。由此可得T(n)=O(n)。l将n个输入元素划分成n/5个组,每组5个元素,只能够有一个组不是5个元素。用恣意一种排序算法,将每组中的元素排好序,并取出每组的中位数,共n/5个。l递归调用select来找出这n/5个元素的中位数。假设n/5是偶数,就找它的2个中位数中较大的一个。以这个元素作为划分基准。设一切元素互不一样。在这种情况下,找出的基准x至少比3(n-5)/10个元素大,由于在
30、每一组中有2个元素小于本组的中位数,而n/5个中位数中又有(n-5)/10个小于基准x。同理,基准x也至少比3(n-5)/10个元素小。而当n75时,3(n-5)/10n/4所以按此基准划分所得的2个子数组的长度都至少缩短1/4。Type Select(Type a, int p, int r, int k) if (r-p75) 用某个简单排序算法对数组ap:r排序; return ap+k-1; ; for ( int i = 0; i=(r-p-4)/5; i+ ) 将ap+5*i至ap+5*i+4的第3小元素 与ap+i交换位置; /找中位数的中位数,r-p-4即上面所说的n-5 Ty
31、pe x = Select(a, p, p+(r-p-4)/5, (r-p-4)/10); int i=Partition(a,p,r, x), j=i-p+1; if (k=j) return Select(a,p,i,k); else return Select(a,i+1,r,k-j);复杂度分析复杂度分析T(n)=O(n)7575)4/3()5/()(21nnnTnTnCCnT上述算法将每一组的大小定为5,并选取75作为能否作递归调用的分界点。这2点保证了T(n)的递归式中2个自变量之和n/5+3n/4=19n/20=n,01。这是使T(n)=O(n)的关键之处。当然,除了5和75之外
32、,还有其他选择。给定平面上n个点的集合S,找其中的一对点,使得在n个点组成的一切点对中,该点对间的间隔最小。 u为了使问题易于了解和分析,先来思索一维的情形。此时,S中的n个点退化为x轴上的n个实数 x1,x2,xn。最接近点对即为这n个实数中相差最小的2个实数。假设我们用x轴上某个点m将S划分为2个子集S1和S2 ,基于平衡子问题的思想,用S中各点坐标的中位数来作分割点。递归地在S1和S2上找出其最接近点对p1,p2和q1,q2,并设d=min|p1-p2|,|q1-q2|,S中的最接近点对或者是p1,p2,或者是q1,q2,或者是某个p3,q3,其中p3S1且q3S2。能否在线性时间内找到
33、p3,q3?u假设S的最接近点对是p3,q3,即|p3-q3|d,那么p3和q3两者与m的间隔不超越d,即p3(m-d,m,q3(m,m+d。u由于在S1中,每个长度为d的半闭区间至多包含一个点否那么必有两点间隔小于d,并且m是S1和S2的分割点,因此(m-d,m中至多包含S中的一个点。由图可以看出,假设(m-d,m中有S中的点,那么此点就是S1中最大点。u因此,我们用线性时间就能找到区间(m-d,m和(m,m+d中一切点,即p3和q3。从而我们用线性时间就可以将S1的解和S2的解合并成为S的解。能否在线性时间内找到能否在线性时间内找到p3,q3?u下面来思索二维的情形。选取一垂直线l:x=m
34、来作为分割直线。其中m为S中各点x坐标的中位数。由此将S分割为S1和S2。递归地在S1和S2上找出其最小间隔d1和d2,并设d=mind1,d2,S中的最接近点对或者是d,或者是某个p,q,其中pP1且qP2。能否在线性时间内找到p,q?u思索P1中恣意一点p,它假设与P2中的点q构成最接近点对的候选者,那么必有distance(p,q)d。满足这个条件的P2中的点一定落在一个d2d的矩形R中u由d的意义可知,P2中任何2个S中的点的间隔都不小于d。由此可以推出矩形R中最多只需6个S中的点。u因此,在分治法的合并步骤中最多只需求检查6n/2=3n个候选者能否在线性时间内找到能否在线性时间内找到p3,q3?证明证明:将矩形将矩形R的长为的长为2d的边的边3等分,将它的长为等分,将它的长为d的边的边2等分,由此
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年消防安全知识培训考试题库:火灾预防与逃生法规知识试题集
- 2025年心理咨询师基础理论知识测试卷(心理咨询实践案例分析)
- 2025年小学教师资格考试《综合素质》教育心理学教学策略测试题
- 2025年ACCA国际注册会计师考试真题卷:管理会计实务篇
- 2025年小学语文毕业升学考试全真模拟卷(文学知识与写作能力强化版试卷)
- 贵阳学院《食品环境学(实验)》2023-2024学年第二学期期末试卷
- 云南省楚雄州元谋县一中2025年高三第二次联考考生物试题文试题含解析
- 2024年宝鸡石油钢管有限责任公司秋季高校毕业生招聘80人笔试参考题库附带答案详解
- 中班吹画梅花课件
- 二零二五国际劳务派遣协议
- 2025婚礼策划服务的合同范本
- 2024年山东省济南市中考数学试卷【含解析】
- 推动学校数字化转型的创新策略与实践路径
- 探秘京剧脸谱(课件)六年级下册综合实践活动辽师大版
- 静脉采血操作课件
- (一模)2025年广东省高三高考模拟测试 (一) 政治试卷(含官方答案)
- 2025届山东省淄博市高三一模考试地理试题(原卷版+解析版)
- 《C语言指针》教学课件
- 9.3大气压强(课件)(共39张) 2024-2025学年度人教版物理八年级下册
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蚀工程施工及验收规范
- 贯彻落实八项规定精神情况自查表
评论
0/150
提交评论