第二次算法设计与分析作业

本文深入探讨了算法的时间复杂度,如θ(n^2)的性质,以及如何通过排序优化操作。同时,介绍了图的DFS和BFS遍历在迷宫问题中的应用,强调了它们在寻找路径问题上的优势。此外,还讨论了组合数学中的组合计算公式及其在解决实际问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.1.4

  1. M ( n ) = ∑ i = 0 n ∑ j = 1 i 1 = ∑ i = 0 n i = n ( n + 1 ) 2 ∈ θ ( n 2 ) M(n)=\sum\limits_{i=0}^{n}\sum\limits_{j=1}^{i}1=\sum\limits_{i=0}^{n}i=\frac{n(n+1)}{2}\in\theta(n^2) M(n)=i=0nj=1i1=i=0ni=2n(n+1)θ(n2)
  2. 提前排好序, M ( n ) = ∑ i = 1 n 2 = 2 n M(n)=\sum\limits_{i=1}^{n}2=2n M(n)=i=1n2=2n
  3. 不能

3.1.8

| E X A M P L E
A | X E M P L E
A E | X M P L E
A E E | M P L X
A E E L | P M X
A E E L M | P X
A E E L M P | X

3.1.14

  1. 从第一个开始,到最后一个光盘,与它左边的每一个 1 ≤ i ≤ n 1\le i\le n 1in暗盘互换。
  2. 时间复杂度为 ∑ i = 1 n i = n ( n + 1 ) / 2 \sum_{i=1}^{n}i=n(n+1)/2 i=1ni=n(n+1)/2

3.2.5

  1. 5 ⋅ 996 = 4980 5\cdot996=4980 5996=4980
  2. 1 ⋅ 996 = 996 1\cdot996=996 1996=996
  3. 2 ⋅ 996 = 1992 2\cdot996=1992 2996=1992

3.2.8

  1. 将所需子串的数量初始化为0。除最后一个字符外,对每个字符做如下操作。如果遇到一个A的时候,计算它后面所有B的数量,然后把这个数字加到所需子串的数量上。数目加入到所需子串的计数中。扫描结束后,返回 计数的最后一个值。时间效率为 n + ( n − 1 ) + ⋅ ⋅ ⋅ + 2 = n ( n + 1 ) / 2 − 1 ∈ θ ( n 2 ) n+(n-1)+\cdot\cdot\cdot+2=n(n+1)/2-1\in\theta(n^2) n+(n1)++2=n(n+1)/21θ(n2)
  2. 将所需子串的数量和遇到的A的数量初始化为0。 从左到右扫描文本,直到文本用完,然后做以下工作。如果遇到一个A,增加A的计数;如果遇到一个B,则将A的计数的当前值加到所需的子串计数。在文本用完后,返回所需子串计数的最后值。由于该算法对一个给定的文本进行单次处理,在每个字符上花费的时间是恒定的。所以该算法是线性的。

3.3.3

  1. [ n / 2 ] [n/2] [n/2]
  2. ( x 1 + x n ) / 2 (x_1+x_n)/2 (x1+xn)/2

3.3.7

  1. C ( n , k ) = k [ ( n − 1 ) + ( n − 2 ) + ⋅ ⋅ ⋅ + 1 ] = k ( n − 1 ) n 2 ∈ θ ( k n 2 ) C(n,k)=k[(n-1)+(n-2)+\cdot\cdot\cdot+1]=\frac{k(n-1)n}{2}\in\theta(kn^2) C(n,k)=k[(n1)+(n2)++1]=2k(n1)nθ(kn2)

3.4.2

  1. 寻找哈密尔顿电路的问题与旅行推销员问题非常相似。产生以第一个顶点为起点和终点的顶点的排列组合。形成顶点的排列组合,例如以第一个顶点为起点和终点,并检查当前排列组合中的每一对连续的 是否由一条边连接。如果是这样 情况下,当前的排列组合代表一个哈密尔顿电路,否则。则需要生成一个下一个排列组合。

3.4.4

  1. 人1到工作2,人2到工作1,人3到工作3,人4到工作4,任务的总(最小)成本是13。职务的总(最低)费用为13。

3.5.7

  1. 从一个任意的顶点开始DFS(或BFS)遍历,并将所访问的顶点标记为1。当遍历的堆栈(队列)变空时。所有与起始顶点处于同一连接部分的顶点。如果还有未访问过的顶点,就重新开始遍历,而且只有这些顶点会被标记为1。剩余的顶点,则从其中一个顶点重新开始遍历,并将所有被访问的顶点标记为 2,以此类推,直到没有未访问的顶点为止。

3.5.8

  1. 设F是一个图的DFS森林。不难看出是2色图,当且仅当没有后边连接两个顶点时 都在奇数层或都在偶数层。这就是DFS 遍历需要验证的就是这个属性。请注意,DFS遍历可以将顶点标记为 偶数或奇数,当它第一次到达它们时。
  2. 与(1)部分类似,当且仅当一个图的BFS 森林中没有连接同一层次上的顶点的交叉边。使用BFS 遍历来检查这种交叉边是否存在。

3.5.10

  1. 在这里插入图片描述
  2. DFS在穿越迷宫时比BFS方便得多。当DFS移动到下一个顶点时,它与当前顶点的连接方式是 一个边,这在BFS中通常不是 BFS的情况。事实上,DFS可以被认为是对一个古老的迷宫追踪右手规则的概括。古老的右手规则的概括:以这样的方式穿过迷宫 的方式穿过迷宫,使你的右手始终接触到一堵墙。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值