我国科学院大学历年计算机算法作业和历年习题集.pdf
《我国科学院大学历年计算机算法作业和历年习题集.pdf》由会员分享,可在线阅读,更多相关《我国科学院大学历年计算机算法作业和历年习题集.pdf(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、中 国 科 学 院 大 学 历 年 习 题 习 题 一 复 杂 性 分 析 初 步 1.试 确 定 下 述 程 序 的 执 行 步 数,该 函 数 实 现 一 个 m X n 矩 阵 与 一 个 nX p 矩 阵 之 间 的 乘 法:矩 阵 乘 法 运 算 templatevoid Mult(T*a,T*b,int m,int n,int p)/m X n 矩 阵 a 与 n X p 矩 阵 b 相 成 得 到 m X p 矩 阵 cfor(int i=0;im;i+)for(int j=0;jp;j+)T sum=0;for(int k=0;kn;k+)Sum+=aik*bk j;Ci j=
2、sum;)语 句 s/e 频 率 总 步 数 templatevoid Mult(T*a,T*b,int m,int n,int p)(0 0 0for(int i=0;im;i+)1 m+1 m+lfor(intj=O;jp;j+)1 m*(p+l)m*p+mT sum=0;1 m*p m*pfor(int k=0;kn;k+)1 m*p*(n+l)m*p*n+m*pSum+=aik*bkj;1 m*p*n m*p*nCij=sum;)1 m*p m*p)总 计 2*m*p*n+4*m*p+2*m+l其 中 s/e表 示 每 次 执 行 该 语 句 所 要 执 行 的 程 序 步 数。频 率
3、 是 指 该 语 句 总 的 执 行 次 数。2.函 数 MinMax用 来 查 找 数 组 aO:nT中 的 最 大 元 素 和 最 小 元 素,以 下 给 出 两 个 程 序。令 n 为 实 例 特 征。试 问:在 各 个 程 序 中,a 中 元 素 之 间 的 比 拟 次 数 在 最 坏 情 况 下 各 是 多 少?找 最 大 最 小 元 素 方 法 一 templatebool MinMax(T a,int n,int&Min,int&Max)/寻 找 a0:n-l中 的 最 小 元 素 与 最 大 元 素 如 果 数 组 中 的 元 素 数 目 小 于 1,那 么 还 回 false
4、if(nl)return false;Min=Max=0;初 始 化 for(int i=l;iai)Min=i;if(aMaxai)Max=i;return true;最 好,最 坏,平 均 比 拟 次 数 都 是 2*n-1_找 最 大 最 小 元 素 方 法 二 templatebool MinMax(T a,int n,int&Min,int&Max)/寻 找 a0:n-l中 的 最 小 元 素 与 最 大 元 素 如 果 数 组 中 的 元 素 数 目 小 于 1,那 么 还 回 falseif(nl)return false;Min=Max=0;初 始 化 for(int i=l;
5、iai)Min=i;else if(aMax005.下 面 那 些 规 那 么 是 正 确 的?为 什 么?1)./()=O(%),g()=O(G()n/5)/g()=O(W)/G();错 2)./()=0(/(),8()=。(6()=/()/8()=。(/()/6();错 3)./(n)=O(F(n),gri)=O(G(n)/()/g(n)=0(F(n)/G(n);错 4)./(”)=Q(F(),g()=C(G()n/()/g()=Q(b()/G();错 5)./()=C(F(),g()=Q(G()n/()/g()=O(F(”)/G()。错 6)./()=0(F(n),g()=(G()n/(
6、)/g()=()/G()对 6.按 照 渐 进 阶 从 低 到 高 的 顺 序 排 列 以 下 表 达 式:顺 序:log n”20/1 4几 2 3 n7.1)假 设 某 算 法 在 输 入 规 模 是 时 为 T()=3*2.在 某 台 计 算 机 上 实 现 并 完 成 该 算 法 的 时 间 是 f秒.现 有 另 一 台 计 算 机,其 运 行 速 度 为 第 一 台 的 6 4 倍,那 么,在 这 台 计 算 机 上 用 同 一 算 法 在 f秒 内 能 解 决 规 模 为 多 大 的 问 题?关 系 式 为 时 间 复 杂 度 计 算 步 数*运 行 速 度(时 间/每 步)=运
7、行 所 需 时 间,即 规 模 时 间 复 杂 度 步 数 原 运 行 速 度 时 间/每 步 总 时 间 nT(”)=3*2t解:设 在 新 机 器 上 f秒 内 能 解 决 规 模 为 机 的 问 题,时 间 复 杂 度 变 为 7(=3*2,由 于 新 机 器 运 行 速 度 提 高 64倍,那 么 运 行 速 度 变 为 褊=*,由 关 系 式 T()*fo=f,0)*3=/,得 3*2n*t0=t,解 得 2)假 设 上 述 算 法 改 良 后,新 算 法 的 计 算 复 杂 度 为 T()=2,那 么 在 新 机 器 上 用 f秒 时 间 能 解 决 输 入 规 模 为 多 大 的
8、 问 题?设 在 新 机 器 上 用 f秒 时 间 能 解 决 输 入 规 模 为 N 的 问 题,那 么 由 于 新 复 杂 度 TN)=N 新 机 器 的 运 行 速 度 为,新=2,64代 入 关 系 式 0(N)*、=f,得 N2*_L=f=3*2*玲 64解 得 3 假 设 进 一 步 改 良 算 法,最 新 的 算 法 的 时 间 复 杂 度 为 T()=8,其 余 条 件 不 变,在 新 机 器 上 运 行,在 f秒 内 能 够 解 决 输 入 规 模 为 多 大 的 问 题?设 可 解 决 的 最 大 时 间 复 杂 度 为 Ma、,那 么 可 解 决 的 最 大 时 间 复
9、杂 度 为(nax=192*2(n为 原 始 的 输 入 规 模。因 为 丁()=8/稣,且 T()为 常 数 不 随 输 入 规 模 n 变 化,所 以 任 意 规 模 的 n 都 可 在 t秒 内 解 决。8.Fibonacci数 有 递 推 关 系:试 求 出 Fri)的 表 达 式。解:方 法 一:当 1时,由 递 推 公 式 F(n)=F(n-1)+F(H-2)得 特 征 方 程 为 解 得 1+V5 1-V5x 二 2,=2那 么 可 设 由 F(2)=2,F(3)=3,解 得 G=1萼,c2=-24 5故 F(n)=2(当 1)向(上 汽 产 刀,当=0,1时,带 入 验 证 亦
10、 成 立。故 F(n)=-(-2)-(1.)-方 法 二:也 可 直 接 推 导 可 得 可 得 a 1+V5a,B=2,设 b”=aH-a an_x,那 么 么 为 等 比 数 列,先 求 出 加 然 后 代 入 即 可 求 得 明。第 二 章 局 部 习 题 参 考 答 案 L 证 明 以 下 结 论:1 在 一 个 无 向 图 中,如 果 每 个 顶 点 的 度 大 于 等 于 2,那 么 该 该 图 一 定 含 有 圈;2 在 一 个 有 向 图 D 中,如 果 每 个 顶 点 的 出 度 都 大 于 等 于 1,那 么 该 图 一 定 含 有 一 个 有 向 圈。1 证 明:设 无
11、向 图 最 长 的 迹 尸=匕 匕 九,每 个 顶 点 度 大 于 等 于 2,故 存 在 与 匕 相 异 的 点 V与 匕 相 邻,假 设 VP,那 么 得 到 比 P 更 长 的 迹,与 P 的 取 法 矛 盾。因 此,VeP,是 闭 迹,从 而 存 在 圈 X M V%.证 明*:设 在 无 向 图 G 中,有 n 个 顶 点,m 条 边。由 题 意 知,m=(2n)/2=n,而 一 个 含 有 n 个 顶 点 的 树 有 n-1条 边。因 m=nn-l,故 该 图 一 定 含 有 圈。定 义:迹 是 指 边 不 重 复 的 途 径,而 顶 点 不 重 复 的 途 径 称 为 路。起 点
12、 和 终 点 重 合 的 途 径 称 为 闭 途 径,起 点 和 终 点 重 合 的 迹 称 为 闭 迹,顶 点 不 重 复 的 闭 迹 称 为 圈。2 证 明:设 有 向 图 最 长 的 有 向 迹 P=匕,每 个 顶 点 出 度 大 于 等 于 1,故 存 在 修 为 片 的 出 度 连 接 点,使 得 匕 丫,成 为 一 条 有 向 边,假 设 VWP,那 么 得 到 比 P更 长 的 有 向 迹,与 P 矛 盾,因 此 必 有 VeP,从 而 该 图 一 定 含 有 有 向 圈。2.设 D 是 至 少 有 三 个 顶 点 的 连 通 有 向 图。如 果 D 中 包 含 有 向 的 Eu
13、ler环 游 即 是 通 过 D 中 每 条 有 向 边 恰 好 一 次 的 闭 迹,那 么 D 中 每 一 顶 点 的 出 度 和 入 度 相 等。反 之,如 果 D 中 每 一 顶 点 的 出 度 与 入 度 都 相 等,那 么 D 一 定 包 含 有 向 的 Euler环 游。这 两 个 结 论 是 正 确 的 吗?请 说 明 理 由。如 果 G 是 至 少 有 三 个 顶 点 的 无 向 图,那 么 G 包 含 Euler环 游 的 条 件 是 什 么?证 明:1 假 设 图 D 中 包 含 有 向 Euler环 游,下 证 明 每 个 顶 点 的 入 度 和 出 度 相 等。如 果
14、该 有 向 图 含 有 Euler环 游,那 么 该 环 游 必 经 过 每 个 顶 点 至 少 一 次,每 经 过 一 次,必 为“进 一 次 接 着“出 一 次,从 而 入 度 等 于 出 度。从 而,对 于 任 意 顶 点,不 管 该 环 游 经 过 该 顶 点 多 少 次,必 有 入 度 等 于 出 度。2 假 设 图 D 中 每 个 顶 点 的 入 度 和 出 度 相 等,那 么 该 图 D 包 含 Euler环 游。证 明 如 下。对 顶 点 个 数 进 展 归 纳当 顶 点 数 N(D)1=2时,因 为 每 个 点 的 入 度 和 出 度 相 等,易 得 构 成 有 向 Eule
15、r环 游。假 设 顶 点 数|v(D)|=k时 结 论 成 立,那 么 当 顶 点 数|v(D)|=k+1时,任 取 丫 丫(口).设 5=以 v 为 终 点 的 边,K=以 v 为 始 点 的 边,因 为 v 的 入 度 和 出 度 相 等,故 S 和 K 中 边 数 相 等。记 6=口-丫.对 G 做 如 下 操 作:任 取 S 和 K 中 各 一 条 边 勺、%,设 在 D 中 勺=叩,e2=vv2,那 么 对 G 和 S做 如 下 操 作 G=G+V,V2)S=S-g,重 复 此 步 骤 直 到 S 为 空。这 个 过 程 最 终 得 到 的 G 有 k 个 顶 点,且 每 个 顶 点
16、 的 度 与 在 G 中 完 全 一 样。由 归 纳 假 设,G 中 存 在 有 向 Euler环 游,设 为 C。在 G 中 从 任 一 点 出 发 沿 C 的 对 应 边 前 行,每 当 遇 到 上 述 添 加 边 vlv2时,都 用 对 应 的 两 条 边 el,e2代 替,这 样 可 以 获 得 有 向 Euler环 游。3 G 是 至 少 有 三 个 顶 点 的 无 向 图,那 么 G 包 含 Euler环 游 等 价 于 G 中 无 奇 度 顶 点。即 任 意 顶 点 的 度 为 偶 数。3.设 G 是 具 有 n 个 顶 点 和 m 条 边 的 无 向 图,如 果 G 是 连 通
17、 的,而 且 满 足 m=n-l,证 明 G 是 树。证 明:思 路 一:只 需 证 明 G 中 无 圈。假 设 G 中 有 圈,那 么 删 去 圈 上 任 一 条 边 G仍 连 通。而 每 个 连 通 图 边 数 e=n(顶 点 数)-1,但 删 去 一 条 边 后 G 中 只 有 n-2条 边,此 时 不 连 通,从 而 矛 盾,故 G 中 无 圈,所 以 G为 树。思 路 二:当“=2 时,m=2 1=1,两 个 顶 点 一 条 边 且 连 通 无 环 路,显 然 是 树。设 当=后 一 1伏 6,左 2 2)时,命 题 成 立,那 么 当“=女 时,因 为 G 连 通 且 无 环 路,
18、所 以 至 少 存 在 一 个 顶 点 匕,他 的 度 数 为 1,设 该 顶 点 所 关 联 的 边 为,=(匕,匕).那 么 去 掉 顶 点 匕 和“,便 得 到 了 一 个 有 k-1个 顶 点 的 连 通 无 向 无 环 路 的 子 图 G,且 G 的 边 数 机=1,顶 点 数=-1。由 于 m二 nT,所 以 加=(-1)-1=-1,由 归 纳 假 设 知,G 是 树。由 于 G 相 当 于 在 G中 为 V2添 加 了 一 个 子 节 点,所 以 G 也 是 树。由 1,2 原 命 题 得 证。4.假 设 用 一 个 x 的 数 组 来 描 述 一 个 有 向 图 的 X”邻 接
19、 矩 阵,完 成 下 面 工 作:1 编 写 一 个 函 数 以 确 定 顶 点 的 出 度,函 数 的 复 杂 性 应 为。();:2 编 写 一 个 函 数 以 确 定 图 中 边 的 数 目,函 数 的 复 杂 性 应 为。(2);3 编 写 一 个 函 数 删 除 边(i),并 确 定 代 码 的 复 杂 性。解 答:1 邻 接 矩 阵 表 示 为%X,待 确 定 的 顶 点 为 第 m 个 顶 点 小 int CountVout(int*a,int n,int m)int out=0;for(int i=0;in;i+)if(am-li=l)out+;return out;)2 确
20、定 图 中 边 的 数 目 的 函 数 如 下:int EdgeNumber(int*a,int n)int num=0;for(int i=0;in;i+)for(int j=0;jn;j+)if(aij=l)num+;return num;3 删 除 边 i,j 的 函 数 如 下:void deleteEdge(int*a,int i,int j)if(ai-lLj-l=O)return;=0;return;代 码 的 时 间 复 杂 性 为(1)5.实 现 图 的 D-搜 索 算 法,要 求 用 SPARKS语 言 写 出 算 法 的 伪 代 码,或 者 用 一 种 计 算 机 高 级
21、 语 言 写 出 程 序。解:D 搜 索 算 法 的 根 本 思 想 是,用 栈 代 替 BFS中 的 队 列,先 将 起 始 顶 点 存 入 栈 中,搜 索 时,取 出 栈 顶 的 元 素,遍 历 搜 索 其 相 邻 接 点,假 设 其 邻 接 点 还 未 搜 索,那 么 存 入 栈 中 并 标 记,遍 历 所 有 邻 接 点 后,取 出 此 时 栈 顶 的 元 素 转 入 下 一 轮 遍 历 搜 索,直 至 栈 变 为 空 栈。Proc DBFS(v)从 顶 点 v 开 场,数 组 visited标 示 顶 点 被 访 问 的 顺 序;PushS(v,S);/首 先 访 问 V,将 S 初
22、 始 化 为 只 含 有 一 个 元 素 v 的 栈 count:=count+1;visitedv:=count;While S 非 空 dou:=PullHead(S);count:=count+l;visitedw:=count;区 另 U 队 站;三 进 七 此 先 进 后 出 for邻 接 于 u 的 所 有 顶 点 w doif sw=0 thenPushS(w,S);/将 w 存 入 栈 Ssw:=1;endifend(forendwhile)endDBFS注:PushS(w,S)将 w 存 入 栈 S;PullHead(S)为 取 出 栈 最 上 面 的 元 素,并 从 栈 中
23、 删 除 Proc DBFT(G,m)为 不 连 通 分 支 数 count:=0;计 数 器,标 示 已 经 被 访 问 的 顶 点 个 数 for i to n dosi:=0;/数 组 s 用 来 标 示 各 顶 点 是 否 曾 被 搜 索,是 那 么 标 记 为 1,否 那 么 标 记 为 0;endfor)for i to m do 遍 历 不 连 通 分 支 的 情 况 if si=0 thenDBFS(i);endifendforendDBET)6.下 面 的 无 向 图 以 邻 接 链 表 存 储,而 且 在 关 于 每 个 顶 点 的 链 表 中 与 该 顶 点 相 邻 的
24、顶 点 是 按 照 字 母 顺 序 排 列 的。试 以 此 图 为 例 描 述 讲 义 中 算 法 DFNL的 执 行 过 程。邻 接 链 表 A-B-E|0B-A-C|0C-B-D-E|0D-C|0E-A-C-F-G|0F-E-G|0G-E-F|0解:初 始 化 数 组 DFN:=0,num=l;A 为 树 的 根 节 点,对 A 计 算 DFNL(A,null),DFN(A):=num=l;L(A):=num=l;num:=l+l=20从 邻 接 链 表 查 到 A 的 邻 接 点 B,因 为 DFN(B)=0,对 B 计 算 DFNL(B,A)DFN(B):=num=2;L(B):=nu
25、m=2;num:=2+1=3。查 邻 接 链 表 得 到 B 的 邻 接 点 A,因 为 DFN(A)=1M,但 A=A,即 是 B 的 父 节 点,无 操 作。接 着 查 找 邻 接 链 表 得 到 B 的 邻 接 点 C,因 为 DFN(0=0,对 C 计 算 DFNL(C,B)DFN(C):=num=3;L(C):=num=3;num:=3+1=4。查 找 C 的 邻 接 点 B,因 为 DFN(B)=1M,但 8=13,即 是 C 的 父 节 点,无 操 作。接 着 查 找 邻 接 链 表 得 到 C 的 邻 接 点 D,因 为 DFN(D)=0,对 D 计 算 DFNL(D,C),D
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 我国 科学院 大学 历年 计算机 算法 作业 习题集
限制150内