2020算法设计与分析 官方考前模拟卷 参考答案

2023-11-18

算法设计与分析 样例试题

注:

  • 此试题仅供了解题型,和期末考试试题没有任何直接关系
  • FBI Warning:这套题难度较大,千万不要坏了心态,xj大佬说要是考试那么难他直播粪坑蝶泳

Power By 王宏志教授

  1. (5 分) 请叙述下述算法的功能并分析时间复杂度
    算法 Compute
    输入: 整数 n
    输出: 整数
x=0
for i=1 to n do
	for j=1 to i do
		for k=1 to i+j do
			x=x+1
return x

解:
Σ i = n + 1 2 n i \Sigma_{i=n+1}^{2n}i Σi=n+12ni
O ( n 3 ) O(n^3) O(n3)


  1. (5 分) 令 f, g 和 h 为定义在正整数上的正实数函数。假设f(n)=O(g(n)),
    g(n)=O(h(n)),证明 f(n)=O(h(n)).

∵ f ( n ) = O ( g ( n ) ) \because f(n)=O(g(n)) f(n)=O(g(n))
∃ n 0 , c 0 ∈ R , ∀ n ≥ n 0 , 0 ≤ f ( n ) ≤ c 0 g ( n ) \exists n_0, c_0\in R, \forall n\ge n_0, 0\le f(n)\le c_0g(n) n0,c0R,nn0,0f(n)c0g(n)
同理 ∃ n 1 , c 1 ∈ R , ∀ n ≥ n 1 , 0 ≤ g ( n ) ≤ c 1 h ( n ) \exists n_1, c_1\in R, \forall n\ge n_1, 0\le g(n)\le c_1h(n) n1,c1R,nn1,0g(n)c1h(n)
1 c 0 f ( n ) ≤ g ( n ) \frac{1}{c_0}f(n)\le g(n) c01f(n)g(n) g ( n ) ≤ c 1 h ( n ) g(n)\le c_1h(n) g(n)c1h(n)
1 c 0 f ( n ) ≤ c 1 h ( n ) \frac{1}{c_0}f(n)\le c_1h(n) c01f(n)c1h(n), 即 f ( n ) ≤ c 0 c 1 h ( n ) f(n)\le c_0c_1h(n) f(n)c0c1h(n)
∴ n ′ = m a x ( n 0 , n 1 ) , c = c 0 c 1 , ∀ n ≥ n ′ , 0 ≤ f ( n ) ≤ c h ( n ) \therefore n'=max(n_0, n_1), c=c_0c_1, \forall n\ge n', 0\le f(n)\le ch(n) n=max(n0,n1),c=c0c1,nn,0f(n)ch(n)
f ( n ) = O ( h ( n ) ) f(n)=O(h(n)) f(n)=O(h(n))


  1. (5 分) 求解递归方程 T ( n ) = 2 T ( n / 2 ) + n 4 T(n)=2T(n/2)+n^4 T(n)=2T(n/2)+n4 其中 k>0 是一个常数。

解:
log ⁡ b a = log ⁡ 2 2 \log_{b}{a}=\log_2{2} logba=log22
f ( n ) = n 4 f(n)=n^4 f(n)=n4
Θ ( f ( n ) ) > Θ ( log ⁡ b a ) \Theta (f(n))>\Theta (\log_ba) Θ(f(n))>Θ(logba)
T ( n ) = f ( n ) = n 4 T(n)=f(n)=n^4 T(n)=f(n)=n4

我不知道k拿来干嘛


  1. (15 分) 设计分治算法求解下述问题:
    输入:对于一个有 n 个元素的数组 A 和一个有 k 个位置集合 S = p 1 , … , p k , 1 ≤ p 1 < p 2 < … < p k ≤ n S={p1, …, pk}, 1\le p1<p2<…<pk\le n S=p1,,pk1p1<p2<<pkn输出:对于每个 i ∈ 1 , … , k i\in {1, …, k} i1,,k,输出 A 中第 pi小的元组。例如,如果 k=1, S={i}对应元素中第 i 小的元素, k=2, S={1,n}对应找到数组中最小和最大的元素。
    设计时间复杂度为 O(nlogk)的分治算法求解此问题,要求写出伪代码并证明算法的时间复杂度。

不会。dbq乡亲父老,我真不会,我怎么想都是nlogn……
就讲讲nlogn的做法

解:

  • 思路:存在 p j p_j pj,则找到 a p j a_{p_j} apj [ p 1 , p j ] [p_1, p_j] [p1,pj]只要在 [ 1 , a p j ] [1, a_{p_j}] [1,apj]中找即可;于是可以想到二分,但是A数组无序,所以我们可以模仿“快速排序”,将比某一个数(本方法取中位数)小的所有数分到一边,大的分另一边,然后迭代进行;
  • 解法:某一时刻搜索 [ l s , r s ] [ls, rs] [ls,rs]时需要保证搜索的A的 [ l a , r a ] [la, ra] [la,ra]区间内的所有数的大小位次,均在 [ p l s , p r s ] [p_{ls}, p_{rs}] [pls,prs]
List<> func(A, la, ra, S, ls, rs):
	Get: sMid, aMid
	if S仅有一个: return {aMid}
	if A仅有一个: return {A仅有的那一个}
	用快速排序里的方法讲所有小于、大于aMid的数分到两侧(1个while套2个while)
	Get: func(A, la, aMid, S, ls, sMid), func(A, aMid+1, ra, S, sMid+1, rs)
	return 上述两部分并集

假设n与k同阶(这个假设我是从别人那学来的,先用,下面我会对此表示质疑)则复杂度:T(n)=2T(n/2)+O(m) --> O(nlogk)

上述复杂度分析引用自他人

  • 异议:
    这里的复杂度分析假设n与k同阶是很奇怪的。
    直观做法:排序+匹配;排序复杂度nlogn,匹配是nk,二分优化变成nlogk。
    因此直观做法的复杂度也是nlogk,即nlogn
    那所谓“正确的分治做法”优势在哪?仅仅是题目要求嘛?
    姑且作为对分治的学习辅助吧

  1. (15 分) 要为将即将到来的哈尔滨世界博览会设计和生产 n 个不同的展品,
    每一个项目首先用 CAD 软件设计,然后送到外面加工厂加工,第 i 个展品的设计时间为 di,加工时间为 fi. 加工厂能力很强,可以同时加工 n 个展品,所以对于每件展品,只要设计结束就可以立刻开始加工。但是,只有一位设计师,所以需要确定产品设计的顺序,以最快时间完成所有 n 件展品的设计和加工。
    比如,完成了第一件展品的设计,可以将其交给加工厂,然后立刻开始第二件展品的加工。当完成第二件展品的设计时,可以将其交给加工厂而不需要考虑是否第一件展品已经加工完成。
    设计多项式贪心算法求解此问题,分析时间复杂度,并证明其正确性。

解:

  • 显然,设计师的时间是一定的;并且,只要设计完成,一定能立刻加工;
  • 所以,共用时间其实是 max ⁡ Σ j = 1 i d j + f j , 1 ≤ i ≤ n \max{\Sigma_{j=1}^{i}d_j}+f_j, 1\le i\le n maxΣj=1idj+fj,1in,目标使该值最小
  • 对于任意两个展品,设 d a , d b , f a , f b d_a, d_b, f_a, f_b da,db,fa,fb,则当a比b先设计时,所用时间为 t 1 = max ⁡ ( d a + f a , d a + d b + f b ) = d a + max ⁡ ( f a , d b + f b ) t_1=\max (d_a+f_a, d_a+d_b+f_b)=d_a+\max (f_a, d_b+f_b) t1=max(da+fa,da+db+fb)=da+max(fa,db+fb);反之所用时间为 t 2 = d b + max ⁡ ( f b , d a + f a ) t_2=d_b+\max (f_b, d_a+f_a) t2=db+max(fb,da+fa)
  • f a < f b f_a<f_b fa<fb t 1 = d a + d b + f b , t 2 = d b + max ⁡ ( f b , d a + f a ) t_1=d_a+d_b+f_b, t_2=d_b+\max (f_b, d_a+f_a) t1=da+db+fb,t2=db+max(fb,da+fa)
    • f b > d a + f a f_b>d_a+f_a fb>da+fa时, t 1 − t 2 = d a > 0 t_1-t_2=d_a>0 t1t2=da>0,则 t 1 > t 2 t_1>t_2 t1>t2
    • f b ≤ d a + f a f_b\le d_a+f_a fbda+fa时, t 2 = d b + d a + f a t_2=d_b+d_a+f_a t2=db+da+fa t 1 − t 2 = f b − f a > 0 t_1-t_2=f_b-f_a>0 t1t2=fbfa>0,则 t 1 > t 2 t_1>t_2 t1>t2
  • 故应以 f i f_i fi为关键字进行递减排序能获得最小时间,即加工时间长的“早死早超生”
  • 时间复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn)

  1. (15 分) 我们考虑将数轴上的 n 个点聚成 k 类的问题。输入: n 个从小到大的不同实数 x1, x2, …, xn表示 n 个不同点,一个参数 kn.
    任务:将 n 个点划分成 k 个不相交的非空集合 S1, …., Sk 满足⋃

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2020算法设计与分析 官方考前模拟卷 参考答案 的相关文章

  • FCN模型训练中遇到的困难

    FCN模型训练中遇到的困难 标签 深度学习FCN神经网络caffe 2017 02 24 10 54 2675人阅读 评论 6 收藏 举报 分类 深度学习 18 版权声明 本文为博主原创文章 未经博主允许不得转载 前前后后大概忙了3个月了

随机推荐

  • 嵌入式数据库sqlite3【进阶篇】-子句和函数的使用,小白一文入门

    更多信息请关注公众号 一口Linux 在 嵌入式数据库sqlite3 基础篇 基本命令操作 小白一看就懂 一文中讲解了如何实现sqlite3的基本操作增删改查 本文介绍一些其他复杂一点的操作 比如where order by having
  • 基于内容的视频信息检索系统

    基于内容的视频信息检索系统 汪志强 江西财经大学信息管理学院 09信息管理与信息系统2班 摘 要 本文从基于内容的视频信息检索技术的发展历史出发 对基于内容的视频检索系统的技术要点及主要的功能模块进行了讨论和分析 并说明了当今技术存在的缺陷
  • MFC Windows 程序设计(一)-程序员的解放

    MFC Windows 程序设计 一 程序员的解放 程序之美 很久很久以前 程序员是一个很辛苦的工作 因为那时候大多数的软件都是用C语言编写的 Microsoft Visual Basic还没有出现 更不要说现在的Java Android
  • Tomcat修改默认端口号

    1 背景 在默认情况下 tomcat的端口是8080 使用了两个tomcat 那么就需要修改其中的一个的端口号才能使得两个同时工作 2 方法 2 1改动一 那么 如何修改tomcat的端口号呢 首先到安装目录 或者解压目录 下找到conf文
  • VUE之Echarts图表x轴y轴提示文字过长处理为省略号

    只需对显示文字格式修改即可 yAxis type category axisLine show false 轴线 axisTick show false 去除刻度 axisLabel formatter function params co
  • silk lobe资源公众号_资源合集

    11 月 十一月 iOS内置韩文字体 Apple SD Gothic Neo 锤子 黑 Smartisan 与方正合作定制的UI黑体 Emoji 鸽了好久的可爱 Emoji 字体 移植到安卓手机 沙扬娜拉 岩田仿宋 复古聚珍仿宋风格 返璞归
  • chatgpt赋能python:Python如何优化中文SEO

    Python如何优化中文SEO Python 作为一种流行的编程语言 可以用来开发各种不同的应用程序 当涉及到网络营销和搜索引擎优化 SEO 时 Python的功能也非常有用 在本篇文章中 我们将介绍如何使用Python来优化中文SEO 以
  • opencv显示对比

    在opencv中我们一般都要展示处理前后图像的对比 有时候我们会imshow两次来展示两张图片 那为什么我们不放在一个图片里呢 这样显然是更加优雅的模式 上代码 Mat combineImage Mat before Mat after a
  • Go语言实现Onvif客户端:4、配置网络信息

    Go语言实现Onvif客户端 4 配置网络信息 文章目录 Go语言实现Onvif客户端 4 配置网络信息 1 思路 2 代码 上一节获取到网络接口token后 就可进行一些网络配置了 这里我们暂时只实现进行ip地址的配置接口和封装 1 思路
  • 【SpringCloud】pom.xml文件解析

    本文档为本人学习交流所用 参考原文档 https www cnblogs com hoyong articles 13034270 html 1 pom xml是什么 pom是Project Object Model 项目对象模型 的缩写
  • 虚表

    虚表 虚函数表 C 中 一个类存在虚函数 那么编译器就会为这个类生成一个虚函数表 在虚函数表里存放的是这个类所有虚函数的地址 虚表从属于类 编译器会为包含虚函数的类加上一个成员变量 该成员变量是一个指向虚函数表的指针 因此虚表指针是一个成员
  • UE4安卓打包配置(大陆内网络整顿后,Android打包时AndroidWorks无法使用的解决方法)

    由于国内进行了网络整顿 UE4官网上用CodeWorksforAndroid下载安卓打包工具配置的方法已经不能使用了 开了VPN也链接不上 这使得用UE4打包配置安卓游戏变得非常麻烦 博主捣鼓了好几天才打包成功 深感在中国学习UE4的艰难与
  • 力扣-图解算法数据结构-剑指 Offer 05. 替换空格

    题目要求 力扣题解 代码 program mydemo description 剑指 Offer 05 替换空格 author Mr zeng create 2021 03 05 11 04 public class Solution1 p
  • @escook/request-miniprogram基于 Promise 的小程序网路请求库

    安装 npm install escook request miniprogram 导入 按需导入 http 对象 import http from escook request miniprogram 将按需导入的 http 挂载到 wx
  • 静态资源存放的位置

    存放的四个位置 classpath META INF resources classpath resources classpath static classpath public 如果要访问的话 是当前项目的根路径 静态资源名 因为这个图
  • C#中浮点数的比较

    前几天去面试 被问到怎么比较两个浮点数的大小 当时只说了个大概 看得出来面试官不是太满意 回来特意查了一下 在MSDN上发现了比较浮点数是否相等的不错的方法 Initialize two doubles with apparently id
  • 接口测试用例设计 - 实战篇

    目录 一 接口测试流程 二 分析接口文档中哪些元素 三 如何设计接口测试用例 3 1 为什么要设计测试用例 3 2 设计接口测试用例从哪些方面考虑 四 常用的接口测试用例覆盖方法 五 接口测试的接口优先级 5 1 优先级 针对所有接口 5
  • MATLAB代码显示内存不足的解决方法

    总结了下大家对于运行MATLAB代码 显示内存不足的问题 在网上进行调研 总结如下 一般out of memenry存在以下几种情况 1 变量需要的存储空间超过了可用的内存空间 2 数据需要的存储空间 超过内存中最大的可用连续存储空间 3
  • 最大子列和问题【简单易懂】

    问题 给定N个整数的序列 求函数的最大值 算法一 例如序列为 1 2 3 4 所以子列分别为 1 1 2 1 2 3 1 2 3 4 2 2 3 2 3 4 3 3 4 4 我们要做的就是依次将这些子列的和求出并比较 得出最大子列和 首先将
  • 2020算法设计与分析 官方考前模拟卷 参考答案

    算法设计与分析 样例试题 算法设计与分析总结笔记 注 此试题仅供了解题型 和期末考试试题没有任何直接关系 FBI Warning 这套题难度较大 千万不要坏了心态 xj大佬说要是考试那么难他直播粪坑蝶泳 Power By 王宏志教授 5 分