算法设计与分析期末复习题

news2024/11/24 1:13:32

一:程序阅读分析题(共40分)

1.(8分)阅读“算法1”,分析算法1的功能、时间复杂度。

答案:经典的汉诺塔问题,其目标是将 n 个不同大小的盘子从柱子 A 移动到柱子 C,借助柱子 B 作为辅助。在移动的过程中,必须满足以下条件:

每次只能移动一个盘子。

任何时候,在较小的盘子必须位于较大的盘子上面。

使用柱子 B 作为中介,将顶部的 n-1 个盘子从柱子 A 移动到柱子 B。

将最大的盘子直接从 A 移动到 C。

再次使用柱子 A 作为中介,将 B 上的 n-1 个盘子移动到柱子 C。

汉诺塔问题的时间复杂度是 O(2^n)

2.(8分)阅读“算法2”,分析算法2的功能,设计算法的一个输入,并给出对应的算法输出结果。

答案:蒙特卡罗方法,用于估计圆周率(π)。蒙特卡罗方法是一种统计模拟方法,利用随机数来解决计算问题。这里的具体方法是通过估计单位圆内的点占单位正方形的比例来计算π。

1初始化点的总数 n 和落在单位圆内的点数 m。

2循环 n 次,每次生成一个点的坐标 (x, y),其中 x 和 y 是 [0,1] 范围内的随机数。

3检查每个点是否位于单位圆内,即判断 x*x + y*y <= 1 是否成立。如果成立,增加 m 的值。

4估算π的值为 4.0 * m / n。这是因为单位圆面积与包围它的正方形面积的比是 π/4。

3.(8分)“算法3”为回溯法求无向不带权图G的最大团问题的递归函数backtrack(),请您依据递归函数,写出该问题解的形式、解空间的组织结构和搜索条件。假设用邻接矩阵g[][]存储无向不带权图G。

答案:解的形式

在最大团问题中,解是指无向不带权图中的一个顶点子集,其中任何两个顶点都相邻。这个问题的解可以用一个数组 bestx[] 来表示,其中 bestx[i] = 1 表示顶点 i 属于最大团,而 bestx[i] = 0 则表示顶点 i 不属于最大团。

解空间的组织结构

解空间可以组织为一个决策树,其中每个节点代表一个顶点的决策过程(是否加入团中)。树的每一层对应图中的一个顶点,每个节点有两个可能的分支:将当前顶点加入团中(即 x[t] = 1)和不加入(即 x[t] = 0)。通过遍历这棵决策树,可以探索所有可能的顶点组合。

搜索条件

基本终止条件:当考察完所有顶点后(即 t > n),检查当前团是否是到目前为止找到的最大团。如果是,则更新 bestx[] 和 bestn。

可行性函数(Place(t)):这个函数判断将顶点 t 加入当前团中是否可行。可行性的基本条件是顶点 t 必须与当前团中的所有顶点相邻。这可以通过检查邻接矩阵 g[][] 来实现,确保对于任意已在团中的顶点 i(即 x[i] = 1),都有 g[t][i] = 1。

剪枝条件:如果当前已经选入团中的顶点数 cn 加上剩余可考察的顶点数(n - t)小于已知的最大团大小 bestn,则不可能通过继续添加剩余的顶点得到更大的团,此时应剪枝。

4.(8分)阅读“算法4”,算法4中的time为结构体数据类型,定义了开始时间start_time和结束时间end_time两个数据项,请您设计一个n=6的实例,并给出算法4得到的x的值。

答案:假设我们有一个由 6 个会议组成的数组 SE,每个会议有一个开始时间 start_time 和一个结束时间 end_time。我们需要选择尽可能多的会议,而这些会议之间不会相互冲突。

假设会议时间如下:

会议 1:开始时间 = 9:00, 结束时间 = 10:00

会议 2:开始时间 = 10:15, 结束时间 = 11:15

会议 3:开始时间 = 10:30, 结束时间 = 11:30

会议 4:开始时间 = 11:20, 结束时间 = 12:20

会议 5:开始时间 = 12:30, 结束时间 = 13:30

会议 6:开始时间 = 13:00, 结束时间 = 14:00

这些会议已根据结束时间排列。

贪心算法过程

该贪心算法从第一个会议开始,每次选择下一个与当前会议不冲突的最早结束的会议。这是一个典型的“最早完成时间优先”策略,用于解决活动选择问题。

初始化

x[] = {false, false, false, false, false, false} 表示选择状态的数组,初始状态没有会议被选择。

选择第一个会议,因此 x[1] = true。

j = 1 表示当前选择的最后一个会议是第 1 个。

算法执行过程

i = 2:会议 2 的开始时间是 10:15,会议 1 的结束时间是 10:00。因为 10:15 >= 10:00,所以 x[2] = true,更新 j = 2。

i = 3:会议 3 的开始时间是 10:30,现在 j = 2,会议 2 的结束时间是 11:15。因为 10:30 < 11:15,所以 x[3] = false。

i = 4:会议 4 的开始时间是 11:20,会议 2 的结束时间是 11:15。因为 11:20 >= 11:15,所以 x[4] = true,更新 j = 4。

i = 5:会议 5 的开始时间是 12:30,会议 4 的结束时间是 12:20。因为 12:30 >= 12:20,所以 x[5] = true,更新 j = 5。

i = 6:会议 6 的开始时间是 13:00,会议 5 的结束时间是 13:30。因为 13:00 < 13:30,所以 x[6] = false。

结果

最终,x[] = {true, true, false, true, true, false}。所选会议为 1, 2, 4, 5。这些会议的选择遵循了最大化参加会议数量的目标,同时确保会议时间不冲突

5.(8分)阅读“算法5”,分析算法的功能,并给出一个例子,展示算法的运行过程。

算法5: MergeSort (int A[],int low,int high)

        if (low<high)

           {

              Int middle=(low+high)/2;   //分解

              MergeSort(A,low,middle); //对左半部分A[low:middle]递归 

              MergeSort(A,middle+1,high); //对右半部分A[middle+1:high]递归

              Merge(A,low,middle,high); //将两个有序子序列A[low:middle]、

A[middle+1:high]合并为一个有序序列

           }

}

答案:算法功能

归并排序(MergeSort)是一种高效的排序算法,采用分治法(Divide and Conquer)的一个典型应用。它将一个大数组分成两个小数组去解决。然后将这些数据排序后再将排序好的数组合并在一起。这个方法首先将数组分解最小可能的单元,然后将它们排序后再合并起来,整个数组最终排序完成。

步骤解析

分解:将当前区间一分为二,即找到中间点 middle。

递归:递归地对左半部分 A[low:middle] 和右半部分 A[middle+1:high] 进行排序。

合并:将两个已排序的子序列合并成一个完整的已排序序列。

示例输入与过程演示

假设有一个数组 A = [38, 27, 43, 3, 9, 82, 10],我们希望对其进行排序。

初始调用

MergeSort(A, 0, 6)

分解的过程

low = 0, high = 6, middle = 3

对左半部分进行排序:MergeSort(A, 0, 3)

对右半部分进行排序:MergeSort(A, 4, 6)

左半部分继续分解

low = 0, high = 3, middle = 1

对左半部分进行排序:MergeSort(A, 0, 1)

对右半部分进行排序:MergeSort(A, 2, 3)

最左边的部分继续分解

最后分解到单个元素,开始合并:

MergeSort(A, 0, 1) 分解到 MergeSort(A, 0, 0) 和 MergeSort(A, 1, 1) 然后合并 [38] 和 [27] 得到 [27, 38]

同理,MergeSort(A, 2, 3) 会合并 [43] 和 [3] 得到 [3, 43]

再将 [27, 38] 和 [3, 43] 合并得到 [3, 27, 38, 43]

右半部分的处理

同样地,MergeSort(A, 4, 6) 会逐步分解并合并得到 [9, 10, 82]

最终合并

将两部分 [3, 27, 38, 43] 和 [9, 10, 82] 合并得到最终排序数组 [3, 9, 10, 27, 38, 43, 82]

结论

归并排序是一种稳定的排序方法,其时间复杂度为O(nlogn),不依赖于输入数据的初始排列状态。虽然需要额外的存储空间进行合并操作,但其分治策略使得它非常适合处理大规模数据集。

二:计算题(共20分)

1.(8分)给定5种字符a,b,c,d,e及它们出现的频率0.45,0.25,0.15,0.10,0.05,选择一种编码方法,求这5个字符的编码方案。

  1. 描述所用的编码方法(4分)
  2. 给出5个字符的编码(2分)
  3. 求该编码方案的平均码长(2分)

答案:1. 描述所用的编码方法

为了有效编码这五个字符,我们选择使用霍夫曼编码(Huffman Coding)。这种方法是一种广泛使用的最优前缀编码方法,其目的是通过使用不等长的编码减少编码后的总体长度。字符频率越高,其对应的编码长度越短,这样可以最大限度地减少平均编码长度。

霍夫曼编码的步骤:

将所有字符按照它们的频率排列,并视为一个森林,每个字符是一个节点。

每次从森林中选出两个频率最低的树合并,这两个树的根节点将成为一个新节点的两个子节点,新节点的频率是两个子节点频率之和。

重复上述过程直到森林中只剩下一个树,这棵树就是霍夫曼树。

从霍夫曼树的根节点到每个字符节点的路径定义了字符的编码。向左是0,向右是1。

2. 给出5个字符的编码

设定初始频率如下:e (0.05), d (0.10), c (0.15), b (0.25), a (0.45)。

构建霍夫曼树的过程如下:

合并 e (0.05) 和 d (0.10) 得到 0.15

合并上述生成的 0.15 与 c (0.15) 得到 0.30

合并 b (0.25) 和最后得到的 0.30 得到 0.55

最后合并 a (0.45) 和上一步的 0.55 得到 1.00(整棵树)

根据树,我们可以得到编码:

a: 0

b: 10

c: 110

d: 1110

e: 1111

3. 求该编码方案的平均码长

计算平均码长的公式为:

Average Code Length=∑所有字符(字符频率×字符编码长度)Average Code Length=∑所有字符​(字符频率×字符编码长度)

具体计算:

0.45×1+0.25×2+0.15×3+0.10×4+0.05×4=0.45+0.50+0.45+0.40+0.20=2.000.45×1+0.25×2+0.15×3+0.10×4+0.05×4=0.45+0.50+0.45+0.40+0.20=2.00

因此,这种编码方案的平均码长为 2.00 位。

2.(12分)给定序列X={E, F, G, A, B, C, B}和Y={E,B, D, F, A, G, B, A},求它们的最长公共子序列。

  1. 写出所用的求解方法(2分)
  2. 描述该方法求解的步骤(4分)
  3. 给出求解过程(4分)
  4. 给出求解结果(2分)

1. 所用的求解方法

这里使用动态规划方法来求解最长公共子序列问题(Longest Common Subsequence, LCS)。这种方法通过构建一个二维表来记录两个序列中所有位置的最长公共子序列的长度,并逐步扩展到整个序列。

2. 描述该方法求解的步骤

初始化表格:创建一个二维数组 LCS,其维度为 (len(X)+1) × (len(Y)+1)。这里,len(X) 和 len(Y) 分别是序列 X 和 Y 的长度。LCS[i][j] 表示序列 X 的前 i 个元素和序列 Y 的前 j 个元素的最长公共子序列的长度。

填充边界:将 LCS[0][j] 和 LCS[i][0] 的所有值初始化为 0,表示空序列与任何序列的最长公共子序列长度为 0。

填充表格:对于每一对 (i, j),如果 X[i-1] == Y[j-1],则 LCS[i][j] = LCS[i-1][j-1] + 1;否则,LCS[i][j] = max(LCS[i-1][j], LCS[i][j-1])。

回溯构建子序列:从 LCS[len(X)][len(Y)] 开始回溯,如果 X[i-1] == Y[j-1],则这个字符是公共子序列的一部分,并继续对 LCS[i-1][j-1] 回溯;否则,根据 LCS[i-1][j] 和 LCS[i][j-1] 的值决定向上或向左回溯。

3. 给出求解过程

假设序列 X = {E, F, G, A, B, C, B},Y = {E, B, D, F, A, G, B, A}。

我们构建一个表格,填充过程如下(略过初始化步骤):

4. 给出求解结果

从表格的右下角 LCS[7][8] = 5 开始回溯,可得到最长公共子序列为 {E, F, A, B, B}。

三:分析编程题(共30分)

1、(15分)0-1背包问题:给定n个物品,1个背包,背包容量为W,n个物品的重量和价值分别为:(wi,vi)i=1,2,3,...,n。物品不能分割,请设计一算法,求解在不超过背包容量的前提下,怎么装能够使得装入的物品总价值最大。

  1. 给出选用的算法策略(2分)
  2. 写出该算法策略的思想(4分)
  3. 写出存储0-1背包问题的输入、输出所用的数据结构(2分)
  4. 给出求解问题的算法步骤(可以选择自然语言、伪码、流程图、程序设计语言中的任何一种形式描述)(7分)

1. 选用的算法策略

对于0-1背包问题,推荐使用动态规划算法。这是因为它能有效地处理每个物品只能被选用一次的约束,同时寻找最大价值的组合。

2. 该算法策略的思想

动态规划方法解决0-1背包问题的核心思想是使用一个表格来保存每个子问题的最优解。表格的每一行代表考虑到某个物品,每一列则代表不同的背包容量。通过逐步增加考虑的物品和背包的容量,我们可以构建出一个解的表格,其中包含了在不同背包容量和不同物品选择情况下的最大价值。

3. 输入输出的数据结构

输入数据结构:

int n: 物品的数量。

int W: 背包的最大容量。

int w[]: 一个数组,存储每个物品的重量。

int v[]: 一个数组,存储每个物品的价值。

输出数据结构:

int max_value: 能装入背包的最大价值。

4. 求解问题的算法步骤(伪码形式)

function optimalLoading(n, C, w):

    sort w in ascending order    // 将箱子按重量升序排序

    int currentWeight = 0       // 当前装载的总重量

    int count = 0               // 已装载的箱子数量

    for i from 1 to n:

        if currentWeight + w[i] <= C:  // 如果加上这个箱子不超过载重限制

            selected[i] = true         // 标记这个箱子为已装载

            currentWeight += w[i]      // 更新当前的总重量

            count += 1                 // 增加已装载的箱子数量

        else:

            selected[i] = false        // 标记这个箱子为未装载

    return (count, selected)  // 返回已装载的箱子数量和装载状态

这个算法首先将所有箱子按照重量从轻到重排序,然后依次尝试装载每个箱子。一旦当前箱子的重量加上已装载的总重量超过船的载重限制,该箱子就不被装载。最终算法返回能装载的最大箱子数量以及每个箱子的装载状态。

2.(15分)最优装载问题:给定n个箱子,其重量为wi(i=1,2,3,...,n)),某艘船的载重量为C,船的体积不受限制,在不超过船的载重量的前提下,设计一算法,将尽量多的箱子装到船上。

  1. 给出选用的算法策略(2分)
  2. 写出该算法策略的思想(4分)
  3. 写出存储最优装载问题的输入、输出所用的数据结构(2分)
  4. 给出求解问题的算法步骤(可以选择自然语言、伪码、流程图、程序设计语言中的任何一种形式描述)(7分)

1. 选用的算法策略

对于最优装载问题,推荐使用贪心算法。这种策略在处理载重限制下尽可能多地装载物品的问题时表现出色。

2. 该算法策略的思想

贪心算法的核心思想是在每一步选择中都采取当前条件下最优的选择,即每次选择最轻的箱子来装载。这样做可以保证在限定的载重量下装入最大数量的箱子。由于船的体积不受限制,我们只需关注总重量不超过船的载重量。

3. 存储最优装载问题的输入、输出所用的数据结构

输入数据结构:

int n: 箱子的总数。

int C: 船的最大载重量。

int[] w: 存储每个箱子的重量的数组。

输出数据结构:

int max_count: 最大可以装载的箱子数量。

bool[] selected: 一个布尔数组,标记哪些箱子被选中进行装载。

4. 算法步骤(Python代码形式描述)

def optimalLoading(w, C):

    # 对箱子重量进行排序

    w.sort()

    currentWeight = 0  # 当前船上载重

    count = 0          # 已装载的箱子数

    selected = []      # 装载的箱子索引

    # 遍历排序后的箱子重量

    for weight in w:

        if currentWeight + weight <= C:  # 检查加上当前箱子是否超载

            currentWeight += weight     # 更新当前载重

            selected.append(weight)     # 添加此箱子为已装载

            count += 1                  # 装载箱子数增加

        else:

            break  # 超过载重后停止装载

    return count, selected  # 返回总装载箱子数和装载的箱子重量列表

# 示例调用

n = 5  # 箱子数量

C = 100  # 船的载重量

w = [20, 50, 30, 10, 40]  # 箱子重量

max_count, loaded_weights = optimalLoading(w, C)

print("可装载箱子数量:", max_count)

print("装载的箱子重量:", loadedWeights)

这段代码首先将箱子按重量排序,然后逐一检查每个箱子是否可以加入到船上而不超过载重限制。它记录了已装载的箱子的数量和它们的重量,以实现尽可能多地装载箱子。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1835988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PDM 测试

文章目录 硬件拓扑AP 生成 PDM输出数据路径AP 输入时域数据频域数据逻辑分析与抓包硬件拓扑 如果使用 AP 需要注意公地 AP 生成 PDM输出 AP 的 output 选择 PDM,MCU 提供 Bit clock,AP 生成 PDM 数据,AP 配置如下 数据路径 AP sin data -> PDM -> codec -> RA…

Git的下载安装及可视化工具小乌龟

一、 Git 的下载 第1步&#xff1a;下载Git&#xff0c;下载地址&#xff1a;Git for Windows 这个就需要去 Git 官网下载对应系统的软件了&#xff0c;下载地址为 git-scm.com或者gitforwindows.org&#xff0c;或者阿里镜像&#xff08;感谢评论区的星悸迷航同学&#…

el-pagination分页组件导致发送两次请求

场景 有一个搜索框&#xff0c;搜索显示表格内容&#xff0c;下面有分页组件&#xff0c;大概长这样&#xff1a; 当分页组件选择到别的页数&#xff08;非第一页&#xff09;&#xff0c;再进行查询&#xff0c;查询的内容会显示在第一页&#xff0c;此时会发送两次网络请求。…

TIA Portal 博途 集成自动化软件下载安装,TIA Portal 轻松驾驭复杂工业设备

在博途TIA Portal的全方位赋能下&#xff0c;用户可以轻松驾驭复杂的工业设备&#xff0c;实现设备的精准配置、高效编程、便捷调试和实时监控。 在配置方面&#xff0c;博途TIA Portal以其强大的配置功能&#xff0c;帮助用户快速定义设备的各项参数&#xff0c;使设备能够快速…

洛谷 P3379:最近公共祖先(LCA)← RMQ+欧拉序

【题目来源】https://www.luogu.com.cn/problem/P3379【题目描述】 如题&#xff0c;给定一棵有根多叉树&#xff0c;请求出指定两个点直接最近的公共祖先。【输入格式】 第一行包含三个正整数 N,M,S&#xff0c;分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N−…

MFC绘制哆啦A梦

OnPaint绘制代码 CPaintDC dc(this); // 用于绘画的设备上下文CRect rc;GetWindowRect(rc);int cxClient rc.Width();int cyClient rc.Height();// 辅助线HPEN hPen CreatePen(PS_DOT, 1, RGB(192, 192, 192));HPEN hOldPen (HPEN)SelectObject(dc, hPen);MoveToEx(dc, cxC…

论文学习_Fuzz4All: Universal Fuzzing with Large Language Models

论文名称发表时间发表期刊期刊等级研究单位Fuzz4All: Universal Fuzzing with Large Language Models2024年arXiv-伊利诺伊大学 0.摘要 研究背景模糊测试再发现各种软件系统中的错误和漏洞方面取得了巨大的成功。以编程或形式语言作为输入的被测系统&#xff08;SUT&#xff…

git\repo

常用git和repo命令_repo git-CSDN博客文章浏览阅读1.5w次&#xff0c;点赞9次&#xff0c;收藏112次。常用git和repo命令文章收集了最近使用的一些repo和git命令&#xff0c;下图是个人理解的git文件状态转换图。 相关概念 名称 意义 repo 谷歌用Python脚本写的调用git的一个脚…

Springboot集成SSE消息推送

SSE介绍 SSE&#xff08;Server-Sent Events&#xff09;的全称是服务器推送事件&#xff0c;它是一种基于 HTTP 协议的实时通信技术&#xff0c;用于在客户端和服务器之间建立持久、单向的链接&#xff0c;允许服务器向客户端发送异步消息。 了解 websocket 的小伙伴&…

257、二叉树的所有路径

给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 代码如下&#xff1a; class Solution { public:void traversal(TreeNode* cur, vector<int>& path, vector<string> &result){path.push_back(cur…

南阳理工学院(期末)算法分析练习题

一、算法阅读分析题&#xff1a; 1.分析如下算法&#xff0c;回答问题&#xff08;10分&#xff09;。 该算法的作用是什么(2分)&#xff1f;分析该算法的时间复杂度(5分)?设计算法的一个输入&#xff0c;并给出对应的算法输出结果(3分) &#xff08;1&#xff09;该算法的作…

虹软ArcSoft—真正离线免费的人脸识别SDK

虹软ArcSoft—真正离线免费的人脸识别SDK 高级功能收费 还是很好滴 人证核验功能是C/C的SDK&#xff0c;需要封装为C#&#xff0c;然后暴露为Restful API使用

2024年阿里巴巴全球数学竞赛首次向人工智能(AI)开放

大家好&#xff0c;我是微学AI&#xff0c;最近大家突然开始关注阿里巴巴全球数学竞赛了&#xff0c;在这个人工智能爆发的时代&#xff0c;2024年阿里巴巴全球数学竞赛首次向人工智能&#xff08;AI&#xff09;开放&#xff0c;要求参赛的AI模型在比赛前提交源代码&#xff0…

【向量检索】之向量数据库Milvus,Faiss详解及应用案例

Reference https://www.modb.pro/db/509268 笔记︱几款多模态向量检索引擎&#xff1a;Faiss 、milvus、Proxima、vearch、Jina等 - 知乎 (zhihu.com) 向量数据库入坑指南&#xff1a;聊聊来自元宇宙大厂 Meta 的相似度检索技术 Faiss - 苏洋的文章 - 知乎 常用的三种索引方…

ssh-add id_rsa_gitlab1 Error connecting to agent: No such file or directory

ssh-add id_rsa_gitlab1 Error connecting to agent: No such file or directory 目录 ssh-add id_rsa_gitlab1 Error connecting to agent: No such file or directory1. 启动 SSH 代理2. 添加 SSH 密钥3. 使用 Git Bash 或其他终端4. 使用 Pageant&#xff08;适用于 PuTTY 用…

大模型技术工程师:抓住时代机遇,成为行业精英_

伴随AI大模型的火热&#xff0c;中国科技大厂们正在掀起一场「跑步AI化」的风暴。从顶层战略到业务线重构&#xff0c;AI无疑已成为大厂们押注未来的新故事。 大模型时代已经到来 大模型已成为全球竞争热点&#xff0c;一个大模型时代已经到来。 大模型具备三个特点&#xf…

Vue3-国足18强赛抽签

Vue3国足18强赛抽签 国足遇到这个对阵&#xff0c;能顺利出现吗&#xff1f; 1、系统演示 Vue3模拟国足18强赛抽签 2、关键代码 开始抽签 <script setup> import FenDang from "/components/chouqian/FenDang.vue"; import {ref} from "vue";le…

CHATGPT说这个运算放大器是比较器,我说这是运放典型的同相比例放大器,一个光控电路分析

纠正 图1 光控电路 该电路来自一个问题&#xff0c;链接见文末。 因GPT的分析有误&#xff0c;特此纠正。 引用图片和答案用于分析&#xff0c;如侵权请联系本人。 电路分析&#xff1a; 该电路为光控灯电路&#xff0c;灯光为LED发光二极管 D。 光敏电阻RG的阻值和光线强度关…

重学java 72.正则表达式

人长大之后就在频繁地离别&#xff0c;相聚反而时日无多 —— 24.6.17 一、正则表达式的概念及演示 1.概述 正则表达式是一个具有特殊规则的字符串 2.作用&#xff1a;校验 3.String中有一个校验正则的方法&#xff1a; boolean matches(String regex) —— 校验字符串是否…

从11个视角看全球Rust程序员4/4:深度解读JetBrains最新报告

讲动人的故事,写懂人的代码 8 Rust程序员最喜欢用什么工具调试程序? 用println!或dbg!宏来调试一下 2022年:55%2023年:55%在IDE里玩玩UI调试 2022年:27%2023年:29%在控制台里调试调试 2022年:11%2023年:10%不调试,任性 2022年:5%2023年:6%有其他奇思妙想 2022年:1%…