第一章作业(上交).doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3 什么是算法? 算法的5个特性是什么? 试根据这些特性解释算法与程序的区别。 解答: 算法:为解决某一特定任务而规定的一个指令序列。 算法的特性: (1) 有输入。一个算法必须有0个或多个输入。它们是算法开始运算前给予算法的量。这些输入取自于特定的对象的集合。它们可以使用输入语句由外部提供,也可以使用赋值语句在算法内给定。 (2)有输出。一个算法应有一个或多个输出,输出的量是算法计算的结果。 (3)确定性。算法的每一步都应确切地、无歧义地定义。对于每一种情况,需要执行的动作都应严格地、清晰地规定。 (4)有穷性。一个算法无论在什么情况下都应在执行有穷步后结束。 (5)有效性。算法中每一条运算都必须是足够基本的。就是说,它们原则上都能精确地执行,甚至人们仅用笔和纸做有限次运算就能完成。 算法和程序不同,程序可以不满足上述的特性(4)。例如,一个操作系统在用户未使用前一直处于等待的循环中,直到出现新的用户事件为止。这样的系统可以无休止地运行,直到系统停工。 此外,算法是面向功能的,通常用面向过程的方式描述;程序可以用面向对象方式搭建它的框架。 4 指出下列各算法的功能并求出时间复杂度。 1. int Prime (int n) { int i = 2; int x= (int) sqrt (n); while (i = x) { if(n% i == 0) break; i++; } if(i x) return 1; else return 0; } 解: 功能:判断一个数是否为素数,若是,返回1;否则,返回0. 时间复杂度:O(n^1/2)(即:根号n) 2. int fun (int n) { int i=1, s=1; while(s n) s += ++ i; return i; } 解: 功能:求出满足不等式1+2+...+i=n的最小i值。 时间复杂度:O(n^1/2)(即:根号n) 3. void UseFile(ifstream inp, int c[10]) { for(int i=0; i10; i++) c[i] =0; int x; while (inp x) { i=x%10; c[i] ++; } } 解: 时间复杂度:O(n) 4. void matable (int n) { for(int i=1; i=n; i++) { for(int j =i; j =n; j ++) cout i* j = setw(2) i* j ; cout endl; } } 解: 功能:打印出n行乘法表,第i行有n-i+1项乘积。 时间复杂度:O(n^2) 5. void cmatrix(int a[M] [N], int d) { for(int i=0; iM; i++) for(int j =0; jN; j++) a[i] [j]* =d; } 功能:使数组a[M][N]中每个元素的值都乘以d的值。 时间复杂度:O(M*N) 6. void matrimult(int a[M] [N], int b[N] [L], int c[M] [L]) { int i, j, k; for(i = 0; i M; i ++ ) for(j =0; j L; j ++) c[i][j] =0; for(i = 0; i M; i ++ ) for(j =0; j L; j ++) for(k= 0; k N; k++ ) c[i][j] +=a[i][k] *b[k][j]; } 功能:矩阵相乘,即a[M][N]*b[N][L] = C[M][L] 时间复杂度: O(M*N*L) 7. i=1; while(i=n) i=i*3; 解释:i是这样变化的:1, 3, 9, 27, ... 如果用i(x)表示第x次循环时i的值,则 i(x) = 3^x , x初始值为0。 循环在 i = n 的时候停止,即 i(x) = 3 ^ x = n;= x= log3(n) 即循环结束时,最多进行了log3(n)次运算。按照大O表示法定义,它的复杂度为 O(log3(n)), 即 O(lgn/lg3) 8.n是描述问题规模的非负整数,给出下面程序段的时间

文档评论(0)

勤能补拙 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档