算法设计实验报告讲解
华北电力大学 实验报告 | | 实验名称 ____ 算法设计与分析综合实验 ________________
课程名称 _______ 算法设计与分析 __________________
| | 专业班级:
学生姓名:
学 号:
指导教师:
[综合实验一]分治策略一归并排序 一、 实验目的及要求 归并排序是一个非常优秀的排序方法 , 也是典型的分治策略的典型应用。
实验要求:
( 1 编写一个模板函数:
template vtypename T> , MergeSort(T *a, int n); 以及相应的 一系列函数,采用分治策略,对任意具有 :
bool operator<(const T&x,const T&y) 比较运算符 的类型进行排序。
(2) 与 STL 库中的函数 std::sort(..) 进行运行时间上的比较,给出比较结果 , 如:动态 生成100 万个随机生成的附点数序列的排序列问题 , 给出所用的时间比较。
二、 所用仪器、设备 计算机、 Visual C+ 嗽件。
三、 实验原理 分治原理:
分治算法的基本思想是将一个规模为 N 的问题分解为 K 个规模较小的子问题,这些 子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。当我们 求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接 求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解 成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求 整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子 问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。
归并原理:
归并排序是建立在归并操作上的一种有效的排序算法 , 该算法是采用分治法( Divide and Conquer )的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列; 即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称 为二路归并。
四、 实验方法与步骤 归并过程为:比较 a[i] 和 a[j] 的大小,若 a[i] < a[j] 则将第一个有序表中的元素 a[i] 复 制到 r[k]中,并令 i 和 k 分别加上 1 ;否则将第二个有序表中的元素 a[j] 复制到 r[k] 中,并 令 j 和 k 分别加上1 ,如此循环下去,直到其中一个有序表取完, 然后再将另一个有序表 中剩余的元素复制到 r 中从下标 k 到下标 t 的单元。归并排序的算法我们通常用递归实 现,先把待排序区间 [s,t] 以中点二分,接着把左边子区间排序,再把右边子区间排序, 最 后把左区间和右区间用一次归并操作合并成有序的区间 [s,t] 。
实现时间计量:
#defi ne _CLOCK_T_DEFINED sran d(( un sig ned)time(O)); // 定义一数组 a[n]; 对每一个赋予一值。
a[i]=ra nd(); 得到随即数。
duration =(double)(finish -start)/CLOCKS_PER_SEC; start=clock() 将系统时间赋予 Start 。以便以后进行比较。
std::sort(b,b+1000); 系统执行 1000 个数据。
Fi ni sh-Start 为最终结果。
五、 实验结果与数据处理
实验结果截图:
■"D;\Program Files\VC + + 6 H O\MSDev98\Bin\Debug\1 exe* 慎輪入; t 專卡致:
160 叛组己建立:
盹翌庠 F曲扫并数组:
2&72^.2 2^395.2 30062 1 12511 , & 1 09. 1166 €1 31MGS 3 1^865.7 818&.58 32?55 23766.5 7793,?2 S :
28 G9 1 >I32S 3 2GSG5.6 1 7TS3 9 2C253.1 10590 .? 10451 .5 £743.& 26625.7 36802 2 B299.59 2478G.2 31THT.9 1421,77 2€288.7 2723H 5 19788.7 8383.3 5533.92 13Q63.T 1T82S.3 29397.1 1 05H2. 2G TSS.1 28389.7 12235.1 94H5.21 1897.38 S41 7 S7 3174.21 2491 E . 8 11535, 3 77.576? 32511.7 1 T7S4 .5 27B54. € 1T<+5S H 26 &93 69^4.77 1168C. 1 2 刑 32292.3 12187
3321 . 1257& 5 15283.2 2GE3Q 3 32719,5 T75.2B3 19325 a 1B631 ,1 2H&49. 9 313e*i. 5 1D€35 .& 12867,44 1 .s 22S3B r 9SS9 52 ZM5S3 12087 1HE5E.1 11697,4 20A+9Q.G 26-931 a 17381 . 1 19&74 18494,2 3533,12 2BT4G.3 51«5 .38
22103.1 坪斗 24 . ? 2246T 1 11G-4.3 r 123G7.3 18729.1 2276
284S9 9 283H 9S12.23 19063. 2 883G <43
-^.22017*+037 2SF58 1 2050 9 ?B^I2.03 辎入翕翌昱示的排停方汕£ 1 .归并排序 玄上 ttl 汗序 持庁门的仔列询:
Tr.srer 31 78.21 TP42 es S812.23 1 1 535.3 1 25 76.5 1 73S1 . 1 1 9325.8 22^r. 1 262SJ. 1 27234.5 30062. 1 103 H 775.263
SZ®.69 1 3321,04 3533.1 2 4424 . T 7795,3? 318? \50 9239.59 9899.52 1M41 . 8 10HG1.5 11 S&S.l 1 203 7
1 2996.9 123CT.4 1SGG3 ? 13G5G.1 1T455.4 1 7T54 5 17736.9 197&8.7 1987M
^0^25. ? 22850.7 23TGG 5 站 593 2S2S8.T 26 £39 3 2G?2G 2 ZT65*I.G 283GG H 2B3B9,7 阳收 30862.2
31 3Q>t.5
32719.5 32255 32511 丄 M#rgScrti^4 亍了* 创 熊入裔薩昌示的排手方法 J 1 .阳并排序 2-std 排序 挖罠冇严-前入法 全 ; 160 5185.30 i ^17 97 1C542.3 1Z18F 12255.1 1Z3E7.3 114323.3 1<4£€5 T i 17&28.3 1S451F 2 26QS& 斗 24&He.S 24786.2 26 7*16.3 26TS9 1 284S9.9 28758 31<+€5.4 31463.3 -4,2201 7*+637 1 16*1 ST 5533.92 165^9.7 1<t21 . ?7 1B9T 3® G743 G G3*l>l . 77 5896,43 21 1Q635. E 1 1G97.-H 12511 £ 152&3.2 1GQ31.1 13729.1 19BG6.2 £6499.6 1 24809,2 2491&.« 2S3&S.G 26991.9 2S898 29397.1 31747.9 322Q2.9
输入需要显示的排序方法: 「归弄排序 2std 排序 0 一退出 77.5767 3178.21 7642.03 3812.23 11535 3 12576.5 1 7381 . 1 1 3325.3 224G7 1 2G253 1 27234.5 30Q62.1 32255 std :
:
169.4
3321.04 7703.32 9393.52 11G86.1 12867.4 1 74S5.4 19785.7 22830.7 26258.7 27654.6 30^£6 325J 1^7 :$。广 1运行了:
9ms 775,263 328,G9 1160.61 5195.38 8*+1 7.97 105H2 3 121S7 14328.3 17828.3
2003S 2H6^9.9 2G7H& 3 4424.7 8299.59 10H61I . 5 12G3D.9 1164.37 1^21,77 139T.3S 2276.6 6TH3.6 69^H.?7 3836.*+3 9^45.21 ie&35.e 11097.>+ 12511.6 16031.1 19660.2 22103.1 2491S ® 26391.9 3533.1 2 81@6.58 164>+1 E 12GS7 12G9D.9 121S7 12255 1 12367.3 13063.F 13656.1 14328.3 14365,7 152S3.2 1775^.5 l7FSO r 9 1782S.3 1S^5H.2 18729.1 1S87>+ 20325.7 2003S 2043G .€ 20H9Q. G 2376G.5 24593 2H6*+9.9 24 7SG.2 24809 2 2G£3G.3 2G72G.2 2G7HG 3 26799.1 £ES£5.e 23306.4 28339? 2S4S9.9 2S758 28893 29397.1 3G802.2 32719.5 5533.92 BS83.3 10590 T 31334.5 31^G5.H 31M69.3 31747.9 32292.3 -*♦ . 22017s + D3T 齣入需更显示的拌序方法:
「归并排序 2, & td 排序 0 Press any keij to continue
#in clude<iostream.h> #i nclude<algorithm> #in clude<time.h> #in clude<stdio.h> #in clude<stdlib.h> using n amespace std; templatevclass Type> void MergSort(Type a[], int n){ Type *b = new Type [n]; int s = 1; while (s < n){ MergPass(a, b, s, n); s += s; MergPass(b, a, s, n); s += s; } } templatevclass Type> void MergPass(Type x[], Type y[], int s, int n) { int i = 0; while (i <= n - 2 * s) { Merg(x, y, i, i + s - 1, i + 2 * s - 1); i = i + 2 * s;if (i + s < n) Merg(x, y, i, i + s - 1, n - 1); else{ for (int j = i; j <= n - 1; j++){ y[j] = x[j]; }
}
} template<class Type> void Merg(Type c[], Type d[], int l, int m, int r){ int i = l, j = m + 1, k = l; while ((i <= m) && (j <= r)){ if (c[i] <= c[j]) d[k++] = c[i++]; else d[k++] = c[j++]; 实验代码:
}
if (i>m) for (int q = j; q <= r; q++) d[k++] = c[q]; else for (int q = i; q <= m; q++) d[k++] = c[q]; }
float randf(float base, float up){ return (rand() % (int)((up - base) * RAND_MAX))/(float)RAND_MAX ; // 产生随机数 }
void printArray(float *a,int N){ for(int i=0;i<=N;i++){ if((i%8==0)&&(i>0)) { cout<<a[i]<<endl; }
else{ cout<<a[i]<<" "; }
}
}
void main(){ int ArrayLen = 5; cout<<" 请输入元素个数:
"<<endl; cin>>ArrayLen; float *array = new float[ArrayLen]; float *arrays = new float[ArrayLen]; float mn, ene;
printf(" 数组已建立:
\n"); srand((unsigned)time(NULL)); // 设置随机数的 seed for (int i = 0; i < ArrayLen; i++) {
mn = (float)rand(); // 产生小数 ene = randf(1,10000)+mn; arrays[i] =ene; array[i] = ene; }
//cout<<" 需要排序的归并数组 :\n"; //printArray(array, ArrayLen); int flag = 1; while (flag != 0){ cout<<"\n 输入需要显示的排序方法:
"<<endl; cout << "1.归并排序 2.std 排序 0.退出"<< endl; cin >> flag; switch (flag){ case 0: break; case 1: {
clock_t s = 0, e = 0; s = clock(); MergSort(array, ArrayLen); e = clock(); //cout<<" 排序后的序列为:
"<<endl; //printArray(array, ArrayLen); cout << "\nMergSort 运行了:
" << (e - s) << "ms" << endl; break; }
case 2:{ clock_t start1 = 0, end1 = 0; start1 = clock(); std::sort(&arrays[0], &arrays[ArrayLen]); end1 = clock(); //printArray(array, ArrayLen); cout << "\nstd::sort 运行了:
" << (end1 - start1) << "ms" << endl; break; }
}
}
}
[综合实验 二]贪心算法一 Huffman 树及 Huffman 编码 一、 实验目的及要求 一个记录字符及出现频率的文件如下所示:
huffma n.haf 7 a, 45 b, 13 c, 12 d, 16 e, 89 f, 34
g, 20 试编写一个读取此种格式文件类 CHuffman, 内部机制采用优先队列,用于建立 Huffman 树及进行 Huffman 编码输出,其用法可以如下所示:
CHuffma n hm("huffma n.dat"); hm.CreateTree(); hm.OutputTree(); hm.OutputCode(); // 二进制形式的字符串 对于输出树的形式可自行决定 ( 如图形界面或字符界面 ) 。
二、 所用仪器、设备 计算机、 Visual C+ 嗽件。
三、 实验原理 贪心原理:
(1) 随着算法的进行,将积累起其它两个集合:一个包含已经被考虑过并被选出的 候选对象,另一个包含已经被考虑过但被丢弃的候选对象。
(2) 有一个函数来检查一个候选对象的集合是否提供了问题的解答。该函数不考虑 此时的解决方法是否最优。
(3) 还有一个函数检查是否一个候选对象的集合是可行的,也即是否可能往该集合 上添加更多的候选对象以获得一个解。和上一个函数一样,此时不考虑解决方法的最优 性。
(4) 选择函数可以指出哪一个剩余的候选对象最有希望构成问题的解。
(5) 最后,目标函数给出解的值。
(6) 为了解决问题,需要寻找一个构成解的候选对象集合,它可以优化目标函数, 贪婪算法一步一步的进行。起初,算法选出的候选对象的集合为空。
接下来的每一步中, 根据选择函数,算法从剩余候选对象中选出最有希望构成解的对象。如果集合中加上该 对象后不可行,那么该对象就被丢弃并不再考虑;否则就加到集合里。每一次都扩充集 合,并检查该集合是否构成解。如果贪婪算法正确工作,那么找到的第一个解通常是最 优的。
Huffman 原理:
给定 n 个权值作为 n 的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称 这样的二叉树为最优二叉树,也称为哈夫曼树 (Huffman tree) 。哈夫曼树是带权路径长度 最短的树,权值较大的结点离根较近。
四、实验方法与步骤 哈夫曼算法以自底向上的方式构造表示最优前缀码的二叉树 T 。算法以个叶结点开 始,执行次的 合并”运算后产生最终所要求的树 T 。给定编码字符集 C 及其频率分布 f , 即 C 中任一字符 c 以频率 f ( c )在数据文件中出现。
C 的一个前缀码编码方案对应于一 棵二叉树 T 。字符 c 在树 T 中的深度记为。也是字符 c 的前缀码长。
该编码方案的平均码长定义为:
B ( T )使平均码长达到最小的前缀码编码方案称为 C 的一个最优前缀码。一旦两棵具有最小频率的树合并后,产生的一颗新的树,起频率 为合并的两棵树的频率之和,并将新树插入优先队列中。
优先队列,优先队列是 0 个或多个元素的集合 , 每个元素都有一个优先权或值 , 对优先 队列执行的操作有 1) 查找 ;2) 插入一个新元素 ;3) 删除 . 在最小优先队列 (min priority queue) 中 , 查找操作用来搜索优先权最小的元素 , 删除操作用来删除该元素 ; 对于最大优先 队列 (max priority queue), 查找操作用来搜索优先权最大的元素 , 删除操作用来删除该元素 . 优先权队列中的元素可以有相同的优先权 , 查找与删除操作可根据任意优先权进行 . 五、实验结果与数据处理 主要代码如下:
Huffman::Huffman(char *sFileName1) {
this->sFileName = sFileName1 ; ifstream fin(sFileName) ;
char ch[4] ; fin.getline(ch, 4) ; int n1 = atoi(ch) ; cout << " 节点数目 : "<<n1 << endl ; this->n = n1 ; this->t = new THaffmanNode[2 * n1 - 1] ;
this->nNext = n1 ;
char ch1 ;
for (int i = 0 ;
i<n1 ;
i++) {
fin.get(ch1) ; t[i].c = ch1 ; fin.ignore(100, ",") ;
fin.getline(ch, 4) ;
t[i].f = atoi(ch) ; }
for (int i = 0 ;
i<n ;
i++) {
cout << t[i].c << " " << t[i].f << endl ; }
for (int i = 0 ;
i<n ;
i++) {
t[i].idx = i ; PQ.push(t[i]) ;
while (!PQ.empty()) {
if ((PQ.size()) >= 2) { THaffmanNode nn, nr, nl; nl = PQ.top(); PQ.pop(); nr = PQ.top(); PQ.pop(); nn.f = nl.f + nr.f; nn.l = nl.idx; nn.r = nr.idx; nn.idx = nNext++; t[nl.idx].p = nn.idx; t[nr.idx].p = nn.idx; t[nn.idx] = nn; PQ.push(nn); }
else {
t[2 * n - 2].p = -1; break; }
}
}
Huffman::~Huffman(void) {
}
void Huffman::OutputTree() {
for (int i = 0; i<2 * n - 1; i++) {
cout << " 权重:
" << t[i].f << " "; cout << " 左孩子:
" << t[i].l << " "; cout << " 右孩子:
" << t[i].r << " "; cout << " 父节点:
" << t[i].p << " "; cout << " 在数组的位置:
" << t[i].idx << endl; }
// 现在数组中存的是哈弗曼数 }
void Huffman::OutputCode() {
// 用 stack 来依次记录各编码的 0 1 编码 std::stack<int, std::list<int>> sk; THaffma nN ode n temp, n tempi; for (i nt i = 0; i<n; i++) { n temp = t[i]; while (n temp.p != -1) { n temp1 = t[n temp.p]; if (t[ ntemp1.l].idx == n temp.idx) { sk.push(O); n temp = n temp1; } else {
sk.push(1); n temp = n temp1; } } int i1 = sk.size(); cout << t[i].f << " : "; for (int i = 0; i<i1; i++) { cout << sk.top(); sk.pop(); } cout << en dl; } } 实验结果截图:
[综合实验三] 用回溯方法求解 n 后问题 、实验目的及要求 问题:对任意给定的 n 求解 n 后问题。
具体要求:
1. 封装 n 后冋题为类,编写以下两种算法进行求解:
(1) 递归回溯方法; (2) 迭代回溯方法。
( 选 ) 2. 对任意给定的 n ,要求输出其解向量(所有解),并输出其解数; 3.
构造 n 后问题的解数表格(由程序自动生成) :
n 后数 解数 第一个解 4 2 (2,4,1,3) 5 … … 6 … … … … … 二、 所用仪器、设备 计算机、 Visual C+ 嗽件。
三、 实验原理 回溯原理:
回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想 是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。用回溯算法解决冋 题的一般步骤为:
1 、 定义一个解空间,它包含问题的解。
2 、 利用适于搜索的方法组织解空间。
3 、 利用深度优先法搜索解空间。
4 、 禾 U 用限界函数避免移动到不可能产生解的子空间。
问题的解空间通常是在搜索问题的解的过程中动态产生的,这是回溯算法的一个重 要特性。
四、 实验方法与步骤 n 后问题等于在 n X n 格的棋盘上放置 n 个皇后,任何 2 个皇后不放在同一行或同一 列或同一斜线上。即规定每一列放一个皇后,不会造成列上的冲突;当第 i 行被某个皇 后占领后,贝侗一行上的所有空格都不能再放皇后,要把以 i 为下标的标记置为被占领 状态。
K :第 K 个皇后,也表示第 K 行 X[i] :第 K 个皇后在第 K 行的第 i 列 皇后 k 在第 k 行第 x[k] 列时, x[i]==x[k] 时,两皇后在同一列上 ; abs(x[i]-x[k])==abs(i-k) 时,两皇后在同一斜线上 ; 两种情况两皇后都可相互攻击,返回 false 表示不符合条件。
五、 实验结果与数据处理 实验结果截图:
■ " "D;\Program FilesWC*+6.0\MSL “阳 H.巩迎进入立后问题 请槪入空后敷 2 4 13 .Ik ・ L .It. 3 1 4 2 方宰个块” 2 隧窖劉魚 1 妁是.P 为否 1 甬術入呈后歎 5 1 3 2 >1 It .... ..M .. ...-* tt…* ...It. H… , , 上… …鼻 .M ,. …札 ..M ,. ....# 扒., ...# ..#.. M .... 实验代码:
#i nclude<iostream.h> #in clude<math.h> class Quee n { friend int n Quee n(i nt); private: bool Place(i nt k); void Backtrack© nt t); int n,*x; // 当前解 long sum; // 当前已找到的可行方案数 }; bool Quee n::Place(i nt k) { for (i nt j=1;j<k;j++) if ((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k])) return false; return true; void Queen::Backtrack(int t) {
if (t>n) { sum++;// 达到叶结点 for(int i=1;i<=n;i++) {
cout<<x[i]<<" ";
}
cout<<endl; for(i=1;i<=n;++i) {
for(int j=1;j<=n;++j) { if(x[i]!=j) cout<<"." ; else cout<<"#"; }
cout<<endl; }
cout<<endl; }
else for (int i=1;i<=n;i++) { // 搜索子结点 x[t]=i; // 进入第 i 个子结点 if (Place(t)) Backtrack(t+1); }
}
int nQueen(int n) {
Queen X; // 初始化 X X.n=n; X.sum=0; int *p=new int [n+1]; for(int i=0;i<=n;i++) p[i]=0; X.x=p; X.Backtrack(1); // 对整个解空间回溯搜索 delete []p; return X.sum; }
void main() {int a=O,b=O; coutvv"******** 欢迎进入皇后问题 *********"<<endl; int flag=1; while(flag){ cout«" 请输入皇后数 "<<endl; cin> >a; b=n Quee n( a); cout«" 方案个数:
"<<b<<e ndl; coutvv" 是否继续? 1 为是, 0 为否 "<<endl; cin> >flag; } }
[综合实验四] 背包问题的贪心算法 一、实验目的及要求 问题 :
给定如下 n 种物品的编号,及其价值;背包重量为 c, 求最佳装包方案,才能使其装 入背包的价值最大。
物口口编号11 2 … n 重量 w[1] w[2] ・・ w[ n] 价值 v[1] v[2] … v[n] 具体要求:
将背包问题进行类的封装; 能对任意给定的 n 种物品的重量、价值及背包限重,输出以上表格 ( 或纵向输出 )
; 输出背包问题的解; 本题要求采用 STL 库中的排序算法数据进行排序。
二、 所用仪器、设备 计算机、 Visual C+ 嗽件。
三、 实验原理 贪心算法解决背包冋题有几种策略:
( 1 )
一种贪心准则为:从剩余的物品中,选出可以装入背包的价值最大的物品,利 用这种规则,价值最大的物品首先被装入(假设有足够容量),然后是下一个价值最大的 物品,如此继续下去。这种策略不能保证得到最优解。例如,考虑 n=2, w=[100,10,10], p =[20,15,15], c = 105 当利用价值贪婪准则时,获得的解为 x= [ 1 , 0,0 ,这种方案的总价 值为 2 0 。而最优解为 [0 , 1 , 1 ], 其总价值为 3 0 。
( 2 )
另一种方案是重量贪心准则是:从剩下的物品中选择可装入背包的重量最小的 物品。虽然这种规则对于前面的例子能产生最优解,但在一般情况下则不一定能得到最 优解。考虑 n= 2 ,w=[10,20], p=[5,100], c= 2 5 。当利用重量贪婪策略时,获得的解为 x =[1,0], 比最优解 [0,1 要差。
( 3 )
还有一种贪心准则,就是我们教材上提到的,认为,每一项计算 yi=vi/si, 即该 项值和大小的比,再按比值的降序来排序,从第一项开始装背包,然后是第二项,依次 类推,尽可能的多放,直到装满背包。
四、 实验方法与步骤
首先计算每种物品单位重量的价值 Vi/Wi ,然后依贪心选择策略,将尽可能多的单 位重量价值最高的物品装入背包。若将这种物品全部装入背包后,背包内的物品总重量 未超出 C ,则选择单位重量价值次高的物品,并尽可能多的装入背包。依此策略一直进 行下去,直到背包装满为止。
采用贪婪准则:每次选择 P/W 最大的物品放入背包。
注意在这之前的计算每种物品单位重量的价值 Vi/Wi 后,进行排序。
五、实验结果与数据处理 实验截图:
E "D:\Program Files\VC+ +6,0\MSDev98\BinV< 一
请输入背包容积; 7
选中物品的编号利重盘分别为: 1.06 2.06 2.00 3.0Q 4.00 2.00 总价值为 :
1 2 . SOPross any keg to 搜狗拼音输入法全:
主要代码如下:
#in elude <stdio.h> #defi ne M 4 struct no de{ float no;// 编号 float value; float weight; float wweight;//若是最后一个的用量 int flag; }Node[M],temp; float Value,curvalue=O; float Weight,curweight=0; //按性价比排序 void sort() { int i,j; for(i=0;i<M-1;i++) { for(j=i+1;j<M;j++) { if((Node[i].value/(float)Node[i].weight)<Node[j].value/(float)Node[j].weight) { temp=Node[i]; Node[i]=Node[j];Node[j]=temp; }
}
}
}
// 可切割装载方法 void load2(){ int i;
for(i=0;i<M;i++){ if((Node[i].weight+curweight)<=Weight) {
curvalue+=Node[i].value; curweight+=Node[i].weight; Node[i].flag=1; }
else if((Node[i].weight+curweight)>Weight&&(curweight<Weight)){ float t=Weight-curweight; curvalue+=(Node[i].value)/(Node[i].weight)*t; curweight=Weight; Node[i].flag=2; Node[i].wweight=t; }
else{ Node[i].flag=0; }
}
}
// 进行结果的输出 void putout(){ int i; printf(" 选中物品的编号和重量分别为:
"); printf("\n\r"); for(i=0;i<M;i++){ if(Node[i].flag==1){ printf("%.2f",Node[i].no); printf(" "); printf("%.2f",Node[i].weight); printf("\n\r"); }
else if(Node[i].flag==2){ printf("%.2f",Node[i].no); printf(" "); printf("%.2f",Node[i].wweight); printf("\n\r"); }
} printf("\n 总价值为 :% .2f",curvalue); } int mai n(){ int i; static int p; printf("请输入物品的重量和价值:\n"); for(i=0;i<M;i++){ printf("请输入第%d 个物品的重量和价值",i+1); scan f("%f%f%f",&Node[i]. no,&N ode[i].weight,&N ode[i].value); } printf("\n 请输入背包容积:"); sca nf("%f",&Weight); sort(); load2(); putout(); return 0; } [综合实验 六](选做 )
0-1 背包问题的求解 一、实验内容:
0-1 背包问题有多种解法,如动态规划方法,回溯方法,分枝限界方法等。对于同一 种问题,请参照教材中的算法,给出相应的程序实现。
注:
0/1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是Wi ,其价 值为 v ,背包问题是如何使选择装入背包内的物品,使得装入背包中的物品的总价值最 大。其中,每种物品只有全部装入背包或不装入背包两种选择。
、所用算法的基本思想及复杂度分析: 1■动态规划法求解 0/1 背包问题:
1 )基本思想: 令V ( i , j )
表示在前 i ( 1勻乞n )
个物品中能够装入容量为 j ( 1 「乞 C )
的背包中的物品 的最大值,则可以得到如下动态函数: V(i,0) =V(0, j) =0 ; V(i -1,j)(HW i ) k max^V(i -1, j),V(i -1, j 按照下述方法来划分阶段:第一阶段,只装入前 1 个物品,确定在各种情况下的背 包能够得到的最大价值;第二阶段,只装入前 2 个物品,确定在各种情况下的背包能够 得到的最大价值;以此类推,直到第 n 个阶段。最后, V( n ,C )
便是在容量为C的背包中 第 页共 页
华北电力大学实验报告 装入 n 个物品时取得的最大价值。
2) 代码:
#include<iostream> #include<algorithm> using namespace std; #define N 100 // 最多可能物体数 struct goods // 物品结构体 {
int sign; // 物品序号 int w; // 物品重量 int p; // 物品价值 }a[N]; bool m(goods a,goods b) {
return (a.p/a.w)>(b.p/b.w); }
int max(int a,int b) { return a<b?b:a; }
int n,C,bestP=0,cp=0,cw=0; int X[N],cx[N]; int KnapSack2(int n,goods a[],int C,int x[]) {
int V[N][10*N]; for(int i=0;i<=n;i++) V[i][0]=0; for(int j=0;j<=C;j++) V[0][j]=0; for(i=1;i<=n;i++) for(j=1;j<=C;j++) if(j<a[i-1].w) V[i][j]=V[i-1][j]; else V[i][j]=max(V[i-1][j],V[i-1][j-a[i-1].w]+a[i-1].p); j=C; // 求装入背包的物品 for (i=n;i>0;i--) {
if (V[i][j]>V[i-1][j]){ x[i-1]=1; j=j-a[i-1].w; }
else x[i-1]=0;
return V[n] [C]; //返回背包取得的最大价值 int main() { goods b[N]; printf("物品种数 n:"); scan f("%d" , &n); //输入物品种数 printf("背包容量 C:"); scan f("%d",&C); //输入背包容量 for (int i=0;i<n;i++) //输入物品 i 的重量 w 及其价值 v { printf("物品 %d 的重量 w[%d]及其价值 v[%d]: ",i+1,i+1,i+1); sca nf("%d%d",&a[i].w, &a[i].p); b[i]=a[i]; } int sum2=K napSack2( n,a,C,X);〃调用动态规划法求 0/1 背包问题 printf("动态规划法求解 0/1背包问题:\nX=["); for(i=0;i< n;i++) coutv<X[i]vv"";// 输出所求 X[n]矩阵 printf("]装入总价值 %d\n",sum2); for (i=0;i <n ;i++) { a[i]=b[i]; }//恢复 a[N]顺序 } 3 )运行结果: rr D:\Program Fiies\VC.^ — 物品种数 n :
6 習包蓉量 C :
30 物品 1 的重 *H[1] 及其价值 u[1] :
5 7 吻品瓷的重 &ui[2] 及其"介值 v[2] :
8 12 物品 3 的 £1 W [3] 及其价值 u[3] :
12 18 物品 4 的重及其价值 u[4] :
14 20 物品 5 的重量町 5] 及其价值 u[5] :
9 16 物品 E 的重 lw[6] 及其价值 u[6] :
19 35 动态规划法求解时 1 背包问题:
X=[ 0 0 0 © 1 1 ] 装入总价值 51 Press any key to continue^ 搜狗拼音输入法全:
4 )复杂度分析 :
动态规划法求解 0/1 背包问题的时间复杂度为:T ( n)
=O(n C )
2.回溯法求解 0/1 背包问题:
1) 基本思想:
回溯法:为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数 (bou ndi ng function) 来处死那些实际上不可能产生所需解的活结点,以减少问题的计算量。
这种具有限界函数的深度优先生成法称为回溯法。
对于有 n 种可选物品的 0/1 背包问题,其解空间由长度为 n 的 0-1 向量组成 , 可用子 集数表示。
在搜索解空间树时, 只要其左儿子结点是一个可行结点, 搜索就进入左子树。
当右子树中有可能包含最优解时就进入右子树搜索。
2) 代码 : #include<iostream> #include<algorithm> using namespace std; #define N 100 // 最多可能物体数 struct goods // 物品结构体 {
int sign; // 物品序号 int w; // 物品重量 int p; // 物品价值 }a[N]; bool m(goods a,goods b) {
return (a.p/a.w)>(b.p/b.w); }
int max(int a,int b) {
return a<b?b:a; }
int n,C,bestP=0,cp=0,cw=0; int X[N],cx[N]; int BackTrack(int i) {
if(i>n-1){ if(bestP<cp){ for (int k=0;k<n;k++) X[k]=cx[k];// 存储最优路径 bestP=cp; }
return bestP; }
if(cw+a[i].w<=C){ // 进入左子树 cw=cw+a[i].w; cp=cp+a[i].p; cx[a[i].sign]=1; // 装入背包 BackTrack(i+1); cw=cw-a[i].w; cp=cp-a[i].p; // 回溯,进入右子树 }
cx[a[i].sign]=0; // 不装入背包 BackTrack(i+1); return bestP; }
int KnapSack3(int n,goods a[],int C,int x[])
{
for(int i=0;i<n;i++) {
x[i]=0; a[i].sign=i; }
sort(a,a+n,m);// 将各物品按单位重量价值降序排列 BackTrack(0); return bestP; }
int main() {
goods b[N]; printf(" 物品种数 n: "); scanf("%d",&n); // 输入物品种数 printf(" 背包容量 C: "); scanf("%d",&C); // 输入背包容量 for (int i=0;i<n;i++) // 输入物品 i 的重量 w 及其价值 v {
printf("物品 %d 的重量 w[%d]及其价值 v[%d]: ",i+1,i+1,i+1); scanf("%d%d",&a[i].w,&a[i].p); b[i]=a[i]; }
int sum3=KnapSack3(n,a,C,X);〃调用回溯法求 0/1 背包问题 printf(" 回溯法求解 0/1 背包问题 :\nX=[ "); for(i=0;i<n;i++) coutv<X[i]vv" ";// 输出所求 X[n]矩阵 printf("] 装入总价值 %d\n",sum3); for (i=0;i<n;i++) {
a[i]=b[i]; }//恢复 a[N]顺序 3) 运行结果:
■ L
"D:\Program Films"…- 口 物品种数 m & „野包容量 t :
3Q 物品 1 的 ££w[1 ] 及其价值 v[1] :
12 19 敕)品 2fr J j5.£w[2] 及其 2 5 构乔 3 的蛍量叫 3] 及耳价值训 3] : 14 29 物叩*的 $ n 物品 5 的 <£u[5]fi 其价值 u[S]9 U 物丽 E 的虽區#[匍及具忻值 u[E]i 7 12 回阁眩求解 0C 背包冋题:
X=[ 0 e 1 1 G 1 J 發入总价值的 Press 已 nq to continue 搜狗拼音醯入法全:
4 )复杂度分析: 最不理想的情况下,回溯法求解 0/1 背包问题的时间复杂度为:
T ( n)=° ( 2 )
。由于 其对蛮力法进行优化后的算法,其复杂度一般比蛮力法要小。
空间复杂度:有 n 个物品,即最多递归 n 层,存储物品信息就是一个一维数组,即 回溯法求解0/1 背包问题的空间复杂度为° ( n )
。
3■分支限界法求解背包问题: 1 )
基本思想:
分支限界法类似于回溯法,也是在问题的解空间上搜索问题解的算法。
一般情况下, 分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出解空间中满足约束条件 的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束 条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
首先,要对输入数据进行预处理,将各物品依其单位重量价值从大到小进行排列。
在下面描述的优先队列分支限界法中,节点的优先级由已装袋的物品价值加上剩下 的最大单位重量价值的物品装满剩余容量的价值和。
算法首先检查当前扩展结点的左儿子结点的可行性。如果该左儿子结点是可行结点, 则将它加入到子集树和活结点优先队列中。
当前扩展结点的右儿子结点一定是可行结点, 仅当右儿子结点满足上界约束时才将它加入子集树和活结点优先队列。当扩展到叶节点 时为问题的最优值。
2 )
代码 :
#in clude<iostream> #i nclude<algorithm> using n amespace std; #define N 100 //最多可能物体数 struct goods //物品结构体 { int sign; //物品序号 int w; //物品重量 int p; //物品价值
}a[N]; bool m(goods a,goods b)
{
return (a.p/a.w)>(b.p/b.w); }
int max(int a,int b) {
return a<b?b:a; }
int n,C,bestP=0,cp=0,cw=0; int X[N],cx[N]; struct KNAPNODE //状态结构体 {
bool s1[N]; // 当前放入物体 int k; //搜索深度 int b; // 价值上界 int w; // 物体重量 int p; // 物体价值 }; struct HEAP // 堆元素结构体 {
KNAPNODE *p;〃结点数据 int b; // 所指结点的上界 }; // 交换两个堆元素 void swap(HEAP &a, HEAP &b) {
HEAP temp = a; a = b; b = temp; }
// 堆中元素上移 void mov_up(HEAP H[], int i) {
bool done = false; if(i!=1){ while(!done && i!=1){ if(H[i].b>H[i/2].b){ swap(H[i], H[i/2]); }else{ done = true; }
i = i/2; }
}
}
// 堆中元素下移 void mov_down(HEAP H[], int n, int i) {
bool done = false; if((2*i)<=n){ while(!done && ((i = 2*i) <= n)){ if(i+1<=n && H[i+1].b > H[i].b){ i++;
} if(H[i/2].b<H[i].b){ swap(H[i/2], H[i]); }else{ done = true; }
}
}
}
// 往堆中插入结点 void insert(HEAP H[], HEAP x, int &n) {
n++; H[n] = x; mov_up(H,n); }
// 删除堆中结点 void del(HEAP H[], int &n, int i) {
HEAP x, y; x = H[i]; y = H[n]; n --; if(i<=n){ H[i] = y; if(y.b>=x.b){ mov_up(H,i); }else{ mov_down(H, n, i); }
}
}
// 获得堆顶元素并删除 HEAP del_top(HEAP H[], int &n) {
HEAP x = H[1]; del(H, n, 1); return x;
// 计算分支节点的上界 void bound( KNAPNODE* node, int M, goods a[], int n) {
int i = node->k; float w = node->w; float p = node->p; if(node->w>M){ // 物体重量超过背包载重量 node->b = 0; // 上界置为 0 }else{ while((w+a[i].w<=M)&&(i<n)){ w += a[i].w; // 计算背包已装入载重 p += a[i++].p; // 计算背包已装入价值 } if(i<n){ node->b = p + (M - w)*a[i].p/a[i].w; }else{ node -> b = p; }
}
} // 用分支限界法实现 0/1 背包问题 int KnapSack4(int n,goods a[],int C, int X[]) {
int i, k = 0; // 堆中元素个数的计数器初始化为 0 int v; KNAPNODE *xnode, *ynode, *znode; HEAP x, y, z, *heap; heap = new HEAP[n*n]; for( i=0; i<n; i++){ a[i].sign=i; } sort(a,a+n,m); xnode = new KNAPNODE; for( i=0; i<n; i++){ xnode->s1[i] = false; }
xnode->k = xnode->w = xnode->p = 0; while(xnode->k<n) { ynode = new KNAPNODE; *ynode = *xnode; ynode->s1[ynode->k] = true; ynode->w += a[ynode->k].w; ynode->p += a[ynode->k].p; ynode->k ++; bound(ynode, C, a, n); // y.b = ynode->b; y.p = ynode; insert(heap, y, k); // 结点 y 按上界的值插入堆中 znode = new KNAPNODE; // 建立结点 z *znode = *xnode; // 结点 x 的数据复制到结点 z znode->k++; // 搜索深度 ++ bound(znode, C, a, n); // 计算节点 z 的上界 z.b = znode->b; z.p = znode; insert(heap, z, k); // 结点 z 按上界的值插入堆中 delete xnode; x = del_top(heap, k); // 获得堆顶元素作为新的父亲结点 xnode = x.p; }
v = xnode->p; for( i=0; i<n; i++){ // 取装入背包中物体在排序前的序号 if(xnode->s1[i]){ X[a[i].sign] =1 ; }else{ X[a[i].sign] = 0; }
}
delete xnode; delete heap; return v; // 返回背包中物体的价值 }
void main() {
goods b[N]; printf(" 物品种数 n: ");
scanf("%d",&n); // 输入物品种数 printf(" 背包容量 C: "); scanf("%d",&C); // 输入背包容量 for (int i=0;i<n;i++) //输入物品 i 的重量 w 及其价值 v {
printf("物品 %d 的重量 w[%d]及其价值 v[%d]: ",i+1,i+1,i+1); scanf("%d%d",&a[i].w,&a[i].p); b[i]=a[i]; }
int sum4=KnapSack4( n,a,C,X);〃调用分支限界法求 0/1 背包问题 printf(" 分支限界法求解 0/1 背包问题 :\nX=[ "); for(i=0;i<n;i++) coutv<X[i]vv" ";// 输出所求 X[n]矩阵 printf("] 装入总价值 %d\n",sum4);
4)
复杂度分析 分支限界法求解 0/1 背包问题的时间复杂度为:
T ( nr °( 才 )
六、实验心得 此次做完了 5 个算法实验, C++ 编程能力得到了一定的提高,指针的使用,进一步熟 练,而且充分体会到 C++ 指针的灵活带来的便利是其他编程语言无可比拟的。
在分治策略归并排序时,深入了解了分治策略的使用及归并排序的基本原理,知道 它是怎么实现排序的,并通过编程实现了归并排序。也第一次运用了库函数,学到了很 多知识。在此次编程中,第一次使用了 vector 向量及 array 数组,它们的优势在于动态 添加元素,并且具有栈的一系列操作,十分方便。
优先队列的使用,使得排序更加简便, 不足:这些代码只是要求功能的实现,并且封装成了类,原先封装类的目的是想生 成动态链接库,通过 c# 简单的图形界面编辑,调用 DLL 中函数,进行显示,以避开复杂 的 C++ 图形用户界面显示,但过程中也出现很多问题,且网上很难找到适合像我这样初 学者看的类似生成动态库代码,无奈使用控制台实现,主要原因还是平时练习的比较少, 很遗憾只编成了 dos 界面的,不过,作为一名计算机专业学生以后我会继续努力,勤加 练习基本功,学好 C 语言,学好算法。
- 范文大全
- 职场知识
- 精美散文
- 名著
- 讲坛
- 诗歌
- 礼仪知识
-
2024年全国两会精神大学生心得感想
2024年全国两会精神大学生心得感想 在这个充满希望的春天,2024年全国两会如期而至,即使远在异国他乡,当我看到代表委员们用心用情履
【心得体会】 日期:2024-03-12
-
中国传统故事英文版 中国古代故事英文版
历史学科蕴含着许多丰富的、生动的、有趣的素材,每一个历史事件、历史人物都有相关的、动人的历史小故事,都能给人以启迪。你对中国古代的故事了解多少呢?下面是小编为您...
【调查报告】 日期:2019-05-22
-
2024年度纪律教育月活动方案6篇
2024年度纪律教育月活动方案6篇各级各部门要充分认识加强纪律教育、推进纪律建设的重要意义,高度重视、周密筹划、精心组织。在真抓实
【企划方案】 日期:2024-01-18
-
十八大以来我国网络安全和信息化辉煌成就
十八大以来我国网络安全和信息化的辉煌成就 党的十八大以来,以习近平同志为核心的党中央坚持从发展中国特
【申报材料】 日期:2020-11-25
-
雷锋日是什么时候几月几日_学雷锋日是几月几日
雷锋日是用来纪念雷锋同志的,也有很多人用这一天来学习雷锋助人为乐。雷锋日是什么时候呢?下面小编为大家推荐一些雷锋日的时间及相关知识,希望大家有用哦。 雷锋...
【入团申请书】 日期:2019-05-08
-
2篇,学习对于构建现代化经济体系新发展格局心得体会
2篇学习关于构建现代化经济体系新发展格局的心得体会篇一: “建设现代化经济体系&rdqu
【慰问贺电】 日期:2020-12-08
-
2022年全国节约用水知识大赛题库(含答案)
22022年全国节约用水知识大赛题库(含答案) 单选题(总共153题) 1 习近平总书记站在可持续发
【工作计划】 日期:2021-07-23
-
2023 年全省“安全生产月”活动方案
2023 年全省安全生产月活动方案 组织开展安全生产大家谈班前会以案说法等学习交流体会活动。以下是蒲公英阅读网小编为大家收集的内容,希
【企划方案】 日期:2023-05-30
-
【国庆节中学黑板报】 中学生防溺水黑板报
革命先烈的英雄事迹,我们不会忘却,他们永远活在我们的心里。下面就随小编看看国庆节中学黑板报内容,希望喜欢哦。 国庆节中学黑板报图片欣赏 国庆节中学黑板报...
【调查报告】 日期:2019-05-05
-
“为何从警、如何为警,对标一流、争当先进”大讨论活动心得体会8篇
为何从警、如何为警,对标一流、争当先进大讨论活动心得体会8篇为民从警,要树立崇高的理想和坚定的信念。在前进的道路上到处都是坎坷
【心得体会】 日期:2023-09-08
-
执行信息公开网
执行信息公开网 执行信息公开网 执行信息公开网: zhi*ing (点击下图可直接进行访问) 全国
【职场知识】 日期:2020-07-03
-
“从青风公司审计案例看销售与收款循环审计”案例说明书
“从青风公司审计案例看销售与收款循环审计”案例说明书一、本案例要解决的关键问
【职场知识】 日期:2020-09-28
-
机械加工创业项目_加工小本创业项目
现在在加工创业项目办小本加工厂有哪些?有什么项目推荐,下面这些小本加工厂项目个个都适合一个人创业,来看看吧!以下是小编分享给大家的关于,一起来看看加工小本创业项目吧!...
【职场知识】 日期:2020-03-19
-
医院护士践行社会主义核心价值观演讲稿两篇
医院护士践行社会主义核心价值观演讲稿两篇本文关键词:践行,演讲稿,两篇,护士,核心价值观医院护士践行
【职场知识】 日期:2021-05-03
-
致橡树(中英文)
3 【原诗】 【JohannaYueh修改版】 致橡树TotheOakTree 作者:舒婷ByShu
【职场知识】 日期:2020-11-17
-
《高等学校课程思政建设指导纲要》及全文内容解读
最新《高等学校课程思政建设指导纲要》及全文内容解读 一、 《纲要》 出台的背景和重要意义 二、 全面
【职场知识】 日期:2020-08-21
-
民主评议党员制度实施细则
民主评议党员制度实施细则 第一章总则 第一条为贯彻落实全面从严治党要求,进一步推进民主评议党员工作科学化、规范化、制度化,根据
【职场知识】 日期:2022-06-16
-
动量守恒定律专题训练含答案
动量守恒定律专题训练含答案 一、不定项选择题 11、下列运动过程中,在任意相等时间内,物体动量变化不
【职场知识】 日期:2021-01-06
-
中性时尚帅气短发女发型设计图片 最潮帅气中性短发发型
时尚中性帅气短发女发型图片精选,想走中性风的MM不妨进来看看,为自己选一款好看的新发型。下面是小编为大家整理的中性帅气短发女发型图片,供大家参考! 中性帅气短发女发...
【职场知识】 日期:2020-03-15
-
火花现代舞蹈视频教学 火花 舞蹈教学视频
现代舞作为最自如、最现实的舞蹈表达,使中国在抗战时期最为黑暗的时刻获得了精神力量,吴晓邦、戴爱莲等老一辈人在历经从抗战到改革开放时期的淬火磨练中将现代舞正式走进中国...
【职场知识】 日期:2020-03-16
-
唐代诗人李昂个人信息
唐代诗人李昂个人信息 导读:我根据大家的需要整理了一份关于《唐代诗人李昂个人信息》的内容,具体内容:
【古典文学】 日期:2020-11-07
-
[关于中秋的朗诵诗词] 关于爱国的朗诵诗词
中秋,热闹的街头树起了灯彩,舞起了火龙。你知道多少关于中秋的朗诵诗词?下面小编为你整理了几篇关于中秋的朗诵诗词,希望对你有帮助。 关于中秋的朗诵诗词一 中秋佳节...
【古典文学】 日期:2019-06-06
-
食品中脂肪测定(索氏提取法)实验报告
报告汇编Compilationofreports20XX 报告文档·借鉴学习word可
【古典文学】 日期:2020-10-18
-
法律知识手抄报图片大全|法律知识手抄报
我国开展了全面的普法宣传工作,法制宣传教育、普及法律常识作为经常的重要任务。做法制教育手抄报,普及法律知识。下面是小编为大家带来的法律知识手抄报图片大全,希望大家...
【古典文学】 日期:2020-03-10
-
高血压论文参考文献
高血压论文的参考文献 [1] 中国高血压防治指南2010 ? 《中华心血管病杂志》 被中信所《中国科
【古典文学】 日期:2020-06-04
-
创业思路 [20个创业思路]
在家创业好项目,想创业,不想出门,有没有什么好方法呢?要想兼顾全职的工作,又想挣点外快,我们来看看这些项目。以下是小编为大家整理的关于20个创业思路,给大家作为参考,...
【古典文学】 日期:2020-03-02
-
读《数学教育的"中国道路"》有感 数学教育的中国道路
读《数学教育的中国道路》有感 中山市博爱初级中学李丽敏 一开始拜读张奠宙教授的《数学教育的中国道路》一书,想着,这么大的问题,是我这个小小的一线
【古典文学】 日期:2019-05-05
-
历史爱国人物故事_爱国人物故事简短
每一个历史事件、历史人物都是一个动人的小故事,都能给人以启迪。无论是现在还是以往都有爱国人物的故事,下面是小编为您整理的历史爱国人物故事,希望对你有所帮助! 历史...
【古典文学】 日期:2019-05-06
-
2017烧显卡的游戏排行榜 2017年最烧显卡的游戏
作为一名游戏党,当然关注的是显卡,显卡是游戏的第一条件,那么烧显卡的游戏有哪些呢?下面是有2017烧显卡的游戏排行榜,欢迎参阅。 2017烧显卡的游戏排行榜 1、《孤岛...
【古典文学】 日期:2020-02-23
-
各类岗位薪级工资正常晋升对照表
各类岗位工资及薪级工资对照表:专业技术职务岗位工资及薪级工资对照表 岗位工资薪级工资岗位工资标准薪级
【古典文学】 日期:2020-09-23
-
【世界上最大的半岛】阿拉伯半岛
你知道世界上最大的半岛是什么吗?下面由小编来介绍一下。 阿拉伯半岛的简介 阿拉伯半岛(阿拉伯文:)位于亚洲,是世界上最大的半岛。沙特阿拉伯、也门、阿曼、阿拉伯联合...
【中国文学】 日期:2019-05-24
-
雪天安全行车注意事项_雪天安全行车提示语
维护城市交通秩序,争做河源文明市民。你们想看看雪天安全行车提示语有哪些吗?以下是小编推荐雪天安全行车提示语给大家,欢迎大家阅读! 安全行车温馨提示语【经典篇】 1...
【中国文学】 日期:2020-03-15
-
小数乘法计算方法
小数乘法得计算方法理解小数乘法计算得法则,能够比较熟练得进行小数乘法笔算与简单得口算重点掌握小数乘法
【中国文学】 日期:2020-12-22
-
世界上国家间最大的陆地争议地区是什么:世界上有几个国家地区
古往今来,国土分界线就是兵家常争之地,大家又知不知道世界上国家间最大的陆地争议地区呢?现在就由小编为大家介绍这块世界上国家间的最大陆地争议地区吧! 世界上国家间的...
【中国文学】 日期:2020-02-28
-
特种设备作业人员作业种类与项目目录
特种设备作业人员作业种类与项目目录 种类 作业项目 项目代号 备注 特种设备相关管理特种设备安全管理
【中国文学】 日期:2020-09-23
-
【欧式女装小店面装修图】 女装小店面装修
随着服装行业和照明产业的发展日趋成熟,服装店的照明设计越来越受到人们的广泛关注,即通过光环境设计对消费者产生引导性作用。下面小编就为大家解开欧式女装小店面装修图展...
【中国文学】 日期:2020-02-27
-
清明节踏青简笔画【清明节踏青图片】
清明节是二十四节气之一,是很适合出去踏青的节日,下面是小编为大家收集的清明节踏青图片相关资料,希望对大家有所帮助。 清明节踏青图片欣赏 清明节踏青图片1 清明...
【中国文学】 日期:2019-05-08
-
电磁场与电磁波实验报告
实验一 静电场仿真 1 实验目的建立静电场中电场及电位空间分布的直观概念。 2 实验仪器计算机一台3
【中国文学】 日期:2020-08-26
-
廉政风险点及防控措施
廉政风险点及防控措施 廉政风险点廉政风险点及防控措施 一、思想道德及制度机制 (一)思想道德(二级风
【中国文学】 日期:2020-07-02
-
史玉柱创业故事_创业故事白手起家故事
史玉柱,一个有着传奇和神话般经历的人,而且,这个传奇和神话正在续写。下面小编就为大家解开史玉柱创业故事,希望能帮到你。 史玉柱创业故事篇一 史玉柱的创业史可以分为...
【中国文学】 日期:2020-02-28
-
国家开放大学电大公文文体写作试题及答案
公文文体的写作(二)单元测试题 1 决定属于A.上行文B.下行文C.平行文D.既可上行也可下行 2
【外国名著】 日期:2020-07-02
-
山东省生产经营单位安全生产主体责任规定(303号令)
山东省生产经营单位安全生产主体责任规定(2013年2月2日山东省人民政府令第260号公布根据2016
【外国名著】 日期:2020-10-22
-
传感器测试实验报告
实验一 直流激励时霍尔传感器位移特性实验一、实验目得:了解霍尔式传感器原理与应用。 二、基本原理:金
【外国名著】 日期:2020-11-09
-
六年级下册《比例尺》单元测试题
一、填空题: 1、比例尺=( ):( ),比例尺实际上是一个( )。 2、一幅图的比例尺是。A、B两
【外国名著】 日期:2020-09-29
-
人教版高一语文必背 人教版高一语文《老王》赏析
杨绛的《老王》,可谓是平凡的人平常的事,平淡的语言平常的心,但读来总让人印象深刻,感触颇多,下面是小编给大家带来的人教版高一语文《老王》赏析,希望对你有帮助。 高一...
【外国名著】 日期:2020-03-10
-
“坚定理想信念、增强历史自觉、弘扬优良传统、加强党性锤炼、党员先锋模范作用发挥”方面存问题和不足剖析材料例文
“坚定理想信念、增强历史自觉、弘扬优良传统、加强党性锤炼、党员先锋模范作用发挥&rdqu
【外国名著】 日期:2021-08-14
-
【缅怀革命先烈黑板报图片】缅怀革命烈士黑板报
中国的抗日名将是数不胜数,其中张灵甫大家了解多少呢?下面就随小编看看缅怀革命先烈的黑板报内容,希望喜欢哦。 缅怀革命先烈黑板报图片欣赏 缅怀革命先烈黑板报图片1...
【外国名著】 日期:2019-05-09
-
3.8妇女节_3.8妇女节手工制作图片精选
3 8妇女节送卡片表示感恩与祝福是在好不过了,小编整理了3 8妇女节手工制作感恩卡图片,希望大家喜欢! 3 8妇女节手工制作感恩卡图片展示 3 8妇女节手工制作感恩卡图...
【外国名著】 日期:2020-03-14
-
《中小学教师违反职业道德行为处理办法》实施细则
《中小学教师违反职业道德行为处理办法》实施细则本文关键词:实施细则,职业道德,中小学教师,违反,办法
【外国名著】 日期:2021-03-24
-
金融术语中英文对照
ABS资产担保证券(AssetBackedSecurities的英文缩写) Acceleratedd
【外国名著】 日期:2020-07-03
-
梧桐花的花语|梧桐花的功效与作用
梧桐花为梧桐科植物梧桐的花,植物形态详梧桐子条。今天小编为你整理了梧桐花的花语,欢迎阅读。 梧桐花的花语是:情窦初开 在春季里晚开的花朵,有着恬淡的气息。 ...
【寓言童话】 日期:2020-03-03
-
大学生音乐欣赏论文 大学音乐鉴赏论文3000
今天小编就为你介绍关于大学生音乐欣赏论文,下面是!小编给你搜集了相关资料!希望可以能帮助到大家。 大学生音乐欣赏论文—第一篇 音乐是生活不可缺少的一部分,学会欣...
【寓言童话】 日期:2020-03-12
-
惊悚鬼故事50字 令人惊悚的故事
这些惊悚故事在短短的篇幅和时间之内让您感受到故事里传达出来的恐怖感,令你感到害怕。下面就是小编给大家整理的令人惊悚的故事,希望对你有用! 令人惊悚的故事篇1:学校...
【寓言童话】 日期:2019-05-13
-
西部计划笔试题库(99题含答案)
西部计划笔试题库(99题含答案) 1 第十三届全国人大三次会议表决通过了《中华人民共和国民法典》,自
【寓言童话】 日期:2021-06-16
-
廉洁自律自我剖析材料(精选)
廉洁自律自我剖析材料((精选多篇)) 信念。科学文化,提高自身素质的终身学习的意识,紧密联系群众,调
【寓言童话】 日期:2020-07-20
-
【名人失败的故事】 关于失败的名人故事
我们最大的弱点在于放弃。成功的必然之路就是不断的重来一次。涓滴之水终可以磨损大石,不是由于它力量强大,而是由于昼夜不舍的滴坠。下面是小编为您整理的名人失败的故事,...
【寓言童话】 日期:2019-05-19
-
康熙字典五行属金的字 [字典中八画五行属金的字信息大全]
在五行中不同属性的字寓意是不相同的,其实同样的属性不同的笔画的字寓意也是一样的,下面小编为你整理了八画五行属金字,希望对你有所帮助! 8画五行属金的字 忮、8画、...
【寓言童话】 日期:2020-03-12
-
【儿童动物的故事大全】 儿童动物故事100篇
对于听故事,几乎所有的儿童都有一个共同点就是百听不厌。一个故事重复数十遍,儿童听时同样要注意力集中,眼睛凝视着讲述者的动作,眼神聚精会神,表现出极大的兴趣。、下面是小编...
【寓言童话】 日期:2019-05-31
-
[人工智能对人类影响英文作文] 人工智能对人类的影响
人工智能就是人造智能,其英文表示是“ArtificialIntelligence”,简称AI。以下是小编整理的人工智能对人类影响英文作文的相关资料,欢迎阅读! 人工智能对人类影响英文作文...
【寓言童话】 日期:2019-05-05
-
[文言文虚词于的用法]虚词于的意义和用法
“文言文”的意思就是指“美好的语言文章”也叫做语体文。文言文虚词于的用法有哪些呢?下面是小编整理的关于文言文虚词于的用法,欢迎阅读 文言文虚词于作为名词的用法 ...
【寓言童话】 日期:2020-03-20
-
学生高考动员演讲稿
学生高考动员演讲稿3篇高考动员演讲稿11 老师们、同学们: 大家下午好!漫漫高考长征路已经进入尾声了
【百家讲坛】 日期:2021-09-22
-
企业安全演讲稿2021
最新企业安全的演讲稿5篇 演讲稿是作为在特定的情境中供口语表达使用的文稿。在充满活力,日益开放的今天
【百家讲坛】 日期:2021-09-22
-
XX镇扶贫项目实施专项整治工作总结_1
XX镇扶贫项目实施专项整治工作总结 为深入贯彻精准扶贫精准脱贫基本方略,认真落实党中央、国务院,省委
【百家讲坛】 日期:2021-09-22
-
对乡镇领导班子干部成员批评意见例文
对乡镇领导班子干部成员的批评看法范文 一、对党委书记XXX同志的批评看法〔3条〕 1、与干部交流偏少
【百家讲坛】 日期:2021-09-22
-
群英乡扶贫资金项目芬坡村祖埇村生产道路硬化工程绩效自评报告
群英乡扶贫资金项目((芬坡村祖埇村生产道路硬化工程))绩效自评报告 一、基本情况(一)群英乡扶贫资金
【百家讲坛】 日期:2021-09-22
-
党委书记警示教育大会上讲话2021汇编
党委书记在警示教育大会上的讲话55篇汇编 党委书记在警示教育大会上的讲话(一) 同志们: 根据省州委
【百家讲坛】 日期:2021-09-22
-
对于2021年召开巡视整改专题民主生活会对照检查材料
关于12021年召开巡视整改专题民主生活会对照检查材料 按照中央巡视组要求和省、市、区委统一部署,区
【百家讲坛】 日期:2021-08-14
-
消防安全知识培训试题.doc
消防安全知识培训试题姓名: 部门班组: 成绩: 一:填空题,每空4分,共44分。 1、灭火剂是通过隔
【百家讲坛】 日期:2021-08-14
-
涉疫重点人员“五包一”居家隔离医学观察工作流程
涉疫重点人员“五包一”居家隔离医学观察工作流程 目前,全球疫情仍处于大流行状
【百家讲坛】 日期:2021-08-14
-
疫情防控致全体师生员工及家长一封信
疫情防控致全体师生员工及家长的一封信 各位师生员工及全体家长朋友: 暑假已至,近期我省部分地方发现确
【百家讲坛】 日期:2021-08-14