【算法不挂科】算法期末考试题库(带解析)【选择题53道&填空题36道&算法填空题7道&问答题33道】
前言
大家好吖,欢迎来到 YY 滴算法不挂科系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
下面是相关传送门
- 【算法不挂科】算法期末考试题库1(带解析)【选择题53道&填空题36道&算法填空题7道&问答题33道】
- 【算法不挂科】算法期末考试【选择题专项练习】<多单元汇总>
目录
- 一.选择题
- 1、衡量一个算法好坏的标准是( )。
- 2、在下列算法中有时找不到问题解的是( )。
- 3.下列随机算法中运行时有时候成功有时候失败的是()
- 4.下列哪⼀种算法是随机化算法( )
- 5.蒙特卡罗算法是( )的⼀种。
- 6.下列哪一种算法不是随机化算法( )
- 7.设f(N),g(N)是定义在正数集上的正函数,如果存在正的常数C和自然数N0,使得当N≥N0时有f(N)≤Cg(N),则称函数f(N)当N充分大时有上界g(N),记作f(N)=O(g(N)),即f(N)的阶( )g(N)的阶.
- 8. 算法是由若干条指令组成的有穷序列,而且满足以下性质( )(1) 输⼊:有0个或多个输入(2) 输出:至少有⼀个输出(3) 确定性:指令清晰,无歧义(4) 有限性:指令执行次数有限,而且执行时间有限
- 9. 函数32n+10nlogn的渐进表达式是( )
- 10.下面关于NP问题说法正确的是( )
- 11.回溯法的效率不依赖于下列哪些因素( )
- 12.下面哪种函数是回溯法中为避免无效搜索采取的策略( )
- 13. 回溯法解旅行售货员问题时的解空间树是( )。
- 14.回溯法在解空间树T上的搜索方式是( ).
- 15.回溯算法和分支限界法的问题的解空间树不会是( ).
- 16.0/1背包问题的回溯算法所需的计算时间为( )
- 17. 实现最大字段和利用的算法是( )。
- 18.下列算法中通常以自底向上的方式求解最优解的是( )。
- 19.下列不是动态规划算法基本步骤的是( )。
- 20.最长公共子序列算法利用的算法是( )。
- 21. 矩阵连乘问题的算法可由( )设计实现。
- 22.备忘录方法是哪种算法的变形。( )
- 23.下列是动态规划算法基本要素的是( )
- 24. ⼀个问题可用动态规划算法或贪心算法求解的关键特征是问题的( )。
- 25.用动态规划算法解决最大字段和问题,其时间复杂性为( ).
- 26.以下不可以使用分治法求解的是( )。
- 27.实现合并排序利用的算法是( )。
- 28.实现大整数的乘法是利用的算法( )。
- 29.实现循环赛日程表利用的算法是( )。
- 30.实现棋盘覆盖算法利用的算法是( )。
- 31.二分搜索算法是利用( )实现的算法。
- 32.Strassen矩阵乘法是利用( )实现的算法。
- 33.合并排序算法是利用( )实现的算法。
- 34.使用分治法求解不需要满足的条件是( )。
- 35.下面问题( )不能使用贪心法解决。
- 36.下列算法中不能解决0/1背包问题的是( )
- 37. ( )是贪心算法与动态规划算法的共同点。
- 38.贪心算法与动态规划算法的主要区别是( )。
- 39、解决活动安排问题,最好⽤( )算法
- 40.采⽤贪⼼算法的最优装载问题的主要计算量在于将集装箱依其重量从⼩到⼤排序,故算法的时间复杂度为 ( ) 。
- 41.背包问题的贪心算法所需的计算时间为( )
- 42.哈弗曼编码的贪心算法所需的计算时间为( )。
- 43.背包问题的贪心算法所需的计算时间为( )。
- 44.回溯算法和分支限界法的问题的解空间树不会是( ).
- 45.广度优先是( )的一种搜索方式。
- 46.下面不是分支界限法搜索方式的是( )。
- 47.最大效益优先是( )的一种搜索方式。
- 48.优先队列式分⽀限界法选取扩展结点的原则是( )。
- 49. 分支限界法解旅行售货员问题时,活结点表的组织形式是( )。
- 50.分支限界法解最大团问题时,活结点表的组织形式是( )。
- 51.从活结点表中选择下⼀个扩展结点的不同⽅式将导致不同的分⽀限界法,以下除( )之外都是最常⻅的⽅式.
- 52.在对问题的解空间树进⾏搜索的⽅法中,⼀个活结点最多有⼀次机会成为活结点的是( ).
- 53、回溯算法和分⽀限界法的问题的解空间树不会是( ).
- 二.填空题
- 1.算法的复杂性有()复杂性和()复杂性之分。
- 2.程序是()用某种程序设计语言的具体实现。
- 3.算法的“确定性”指的是组成算法的每条()是清晰的,无歧义的。
- 4.矩阵连乘问题的算法可由设计实现。
- 5.拉斯维加斯算法找到的解⼀定是()。
- 6.算法是指解决问题的()或 ()。
- 7.从分治法的⼀般设计模式可以看出,用它设计出的程序⼀般是()。
- 8.问题的()是该问题可用动态规划算法或贪心算法求解的关键特征。
- 9.以深度优先方式系统搜索问题解的算法称为() 。
- 10.数值概率算法常用于()的求解。
- 11.计算⼀个算法时间复杂度通常可以计算() 、 () 、或计算步。
- 12.利用概率的性质计算近似值的随机算法是(),运行时以一定的概率得到正确解的随机算法是()。
- 13.解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是(),需要排序的是() ,() 。
- 14.使用回溯法进行状态空间树裁剪分支时一般有两个标准:约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是(),只使用约束条件进⾏裁剪的是()。
- 15.()是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。
- 16.矩阵连乘问题的算法可由()设计实现。
- 17.贪心算法的基本要素是()和()性质 。
- 18.动态规划算法的两个基本要素是()性质和 () 性质。
- 19.算法是由若干条指令组成的有穷序列,且要满足()、 () 、()和 () 四条性质。
- 20.大整数乘积算法是用()来设计的。
- 21.以广度优先或以最小耗费方式搜索问题解的算法称为()。
- 25.舍伍德算法总能求得问题的() 。
- 26.快速排序算法是基于()的⼀种排序算法。
- 27. 动态规划算法的基本思想是将待求解问题分解成若干() ,先求解() ,然后从这些 ()的解得到原问题的解。
- 28.回溯法是一种既带有()又带有()的搜索算法。
- 30.分支限界法是一种既带有 () 又带有 () 的搜索算法。
- 31.分支限界法主要有() 分支限界法和 ()分支限界法。
- 32.回溯法搜索解空间树时,常用的两种剪枝函数为()和() 。
- 33.任何可用计算机求解的问题所需的时间都与其()有关。
- 34.快速排序算法的性能取决于()。
- 35. Prim算法利用()策略求解 ()问题,其时间复杂度是 ()。
- 36. 图的m着色问题可用()法求解,其解空间树中叶子结点个数是 (),解空间树中每个内结点的孩子数是()。
- 三.算法填空
- 1.背包问题的贪⼼算法
- 2.最⼤⼦段和: 动态规划算法
- 3.快速排序
- 4.排列问题
- 5.给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出⼀特定元素x。据此容易设计出⼆分搜索算法:
- 6、合并排序描述如下:
- 7、以下是计算xm的值的过程
- 四.问答题
- 1.⽤计算机求解问题的步骤:
- 2. 算法定义:
- 3.算法的三要素
- 4. 算法具有以下5个属性:
- 5. 算法设计的质量指标:
- 6. 迭代法:
- 8.分治法的基本思想是:
- 9.分治法所能解决的问题⼀般具有以下⼏个特征:
- 10、分治法的基本步骤
- 11. 动态规划的基本思想
- 12、动态规划算法的基本步骤
- 13. 分治法与动态规划法的相同点是:
- 14. 回溯法
- 15. 分⽀限界法:
- 16. 分⽀限界法与回溯法的相同点是:都是⼀种在问题的解空间树T中搜索
- 17. 分治法所能解决的问题⼀般具有的⼏个特征是:
- 18. ⽤分⽀限界法设计算法的步骤是:
- 19. 常⻅的两种分⽀限界法的算法框架:
- 20. 回溯法中常⻅的两类典型的解空间树是⼦集树和排列树。
- 21. 分⽀限界法的搜索策略是:
- 22. 请叙述动态规划算法与贪⼼算法的异同。
- 23. 请说明动态规划⽅法为什么需要最优⼦结构性质。
- 24. 请说明:
- 27. 概率算法
- 28.概率算法的⼀个基本特征
- 29.概率算法⼤致分为四类:
- 30.数值概率算法
- 31.蒙特卡罗算法
- 32.拉斯维加斯算法
- 33.舍伍德算法
一.选择题
1、衡量一个算法好坏的标准是( )。
A、运⾏速度快
B、占⽤空间少
C、时间复杂度低
D、代码短
- C
2、在下列算法中有时找不到问题解的是( )。
A、蒙特卡罗算法
B、拉斯维加斯算法
C、舍伍德算法
D、数值概率算法
- B
- 拉斯维加斯算法有时成功有时失败
3.下列随机算法中运行时有时候成功有时候失败的是()
A、数值概率算法
B、舍伍德算法
C、拉斯维加斯算法
D、蒙特卡罗算法
- C
4.下列哪⼀种算法是随机化算法( )
A. 贪⼼算法
B. 回溯法
C.动态规划算法
D.舍伍德算法
- D
5.蒙特卡罗算法是( )的⼀种。
A、分⽀界限算法
B、概率算法
C、贪⼼算法
D、回溯算法
- B
- 利用概率的性质计算近似值的随机算法是(数值概率算法),运行时以一定的概率得到正确解的随机算法是(蒙特卡罗算法)。
6.下列哪一种算法不是随机化算法( )
A. 蒙特卡罗算法
B. 拉斯维加斯算法
C.动态规划算法
D.舍伍德算法
- C
7.设f(N),g(N)是定义在正数集上的正函数,如果存在正的常数C和自然数N0,使得当N≥N0时有f(N)≤Cg(N),则称函数f(N)当N充分大时有上界g(N),记作f(N)=O(g(N)),即f(N)的阶( )g(N)的阶.
A.不⾼于
B.不低于
C.等价于
D.逼近
- A
- 对比
8. 算法是由若干条指令组成的有穷序列,而且满足以下性质( )(1) 输⼊:有0个或多个输入(2) 输出:至少有⼀个输出(3) 确定性:指令清晰,无歧义(4) 有限性:指令执行次数有限,而且执行时间有限
A .(1)(2)(3)
B.(1)(2)(4)
C.(1)(3)(4)
D.(1)(2)(3)(4)
- D
9. 函数32n+10nlogn的渐进表达式是( )
A. 2n
B. 32n
C. nlogn
D. 10nlogn
- B
10.下面关于NP问题说法正确的是( )
A NP问题都是不可能解决的问题
B P类问题包含在NP类问题中
C NP完全问题是P类问题的⼦集
D NP类问题包含在P类问题中
- B
11.回溯法的效率不依赖于下列哪些因素( )
A.满⾜显约束的值的个数
B. 计算约束函数的时间
C. 计算限界函数的时间
D. 确定解空间的时间
- D
12.下面哪种函数是回溯法中为避免无效搜索采取的策略( )
A.递归函数
B.剪枝函数
C.随机数函数
D.搜索函数
- B
13. 回溯法解旅行售货员问题时的解空间树是( )。
A、⼦集树
B、排列树
C、深度优先⽣成树
D、⼴度优先⽣成树
- B
14.回溯法在解空间树T上的搜索方式是( ).
A.深度优先
B.⼴度优先
C.最⼩耗费优先
D.活结点优先
- A
15.回溯算法和分支限界法的问题的解空间树不会是( ).
A.有序树
B.⼦集树
C.排列树
D.⽆序树
- D
16.0/1背包问题的回溯算法所需的计算时间为( )
A、O(n*2n)
B、O(nlogn)
C、O(2的n次方)
D、O(n)
- A
17. 实现最大字段和利用的算法是( )。
A、分治策略
B、动态规划法
C、贪⼼法
D、回溯法
- B
18.下列算法中通常以自底向上的方式求解最优解的是( )。
A、备忘录法
B、动态规划法
C、贪⼼法
D、回溯法
- B
19.下列不是动态规划算法基本步骤的是( )。
A、找出最优解的性质
B、构造最优解
C、算出最优解
D、定义最优解
- A
20.最长公共子序列算法利用的算法是( )。
A、分⽀界限法
B、动态规划法
C、贪⼼法
D、回溯法
- B
21. 矩阵连乘问题的算法可由( )设计实现。
A、分⽀界限算法
B、动态规划算法
C、贪⼼算法
D、回溯算法
- B
22.备忘录方法是哪种算法的变形。( )
A、分治法
B、动态规划法
C、贪⼼法
D、回溯法
- B
23.下列是动态规划算法基本要素的是( )
A、定义最优解
B、构造最优解
C、算出最优解
D、⼦问题重叠性质
- D
24. ⼀个问题可用动态规划算法或贪心算法求解的关键特征是问题的( )。
A、重叠⼦问题
B、最优⼦结构性质
C、贪⼼选择性质
D、定义最优解
- B
25.用动态规划算法解决最大字段和问题,其时间复杂性为( ).
A.logn
B.n
C.n2
D.nlogn
- B
26.以下不可以使用分治法求解的是( )。
A、棋盘覆盖问题
B、选择问题
C、归并排序
D、0/1背包问题
- D
- 01背包问题中的子问题并非完全独立
27.实现合并排序利用的算法是( )。
A、分治策略
B、动态规划法
C、贪⼼法
D、回溯法
- A
28.实现大整数的乘法是利用的算法( )。
A、贪⼼法
B、动态规划法
C、分治策略
D、回溯法
- C
29.实现循环赛日程表利用的算法是( )。
A、分治策略
B、动态规划法
C、贪⼼法
D、回溯法
- A
30.实现棋盘覆盖算法利用的算法是( )。
A、分治法
B、动态规划法
C、贪⼼法
D、回溯法
- A
31.二分搜索算法是利用( )实现的算法。
A、分治策略
B、动态规划法
C、贪⼼法
D、回溯法
- A
32.Strassen矩阵乘法是利用( )实现的算法。
A、分治策略
B、动态规划法
C、贪⼼法
D、回溯法
- A
33.合并排序算法是利用( )实现的算法。
A、分治策略
B、动态规划法
C、贪⼼法
D、回溯法
- A
34.使用分治法求解不需要满足的条件是( )。
A、⼦问题必须是⼀样的
B、⼦问题不能够重复
C、⼦问题的解可以合并
D、原问题和⼦问题使⽤相同的⽅法解
- A
35.下面问题( )不能使用贪心法解决。
A、单源最短路径问题
B、N皇后问题
C、最⼩花费⽣成树问题
D、背包问题
- B
- N皇后问题无法使用贪心法有效求解。这是因为贪心法通常依据某种启发式策略,每一步都选择在当前看来最优或最好的选择,而不考虑全局最优解。然而,N皇后问题的关键在于找到一个满足条件的配置,其中N个皇后能够互不攻击地放置在N×N的棋盘上。这个问题要求同时考虑所有皇后的位置,而不仅仅是当前正在放置的皇后。
36.下列算法中不能解决0/1背包问题的是( )
A、贪⼼法
B、动态规划
C、回溯法
D、分⽀限界法
- A
- 贪心法通常要求每一步都做出在当前看来最优的选择,并期望这些局部最优选择能够累积成全局最优解。然而,在01背包问题中,选择某个物品是否放入背包不仅取决于该物品本身的价值和重量,还受到其他物品以及背包剩余容量的影响
37. ( )是贪心算法与动态规划算法的共同点。
A、重叠⼦问题
B、构造最优解
C、贪⼼选择性质
D、最优⼦结构性质
- D
38.贪心算法与动态规划算法的主要区别是( )。
A、最优⼦结构
B、贪⼼选择性质
C、构造最优解
D、定义最优解
- B
39、解决活动安排问题,最好⽤( )算法
A.分治
B.贪⼼
C.动态规划
D.穷举
- B
40.采⽤贪⼼算法的最优装载问题的主要计算量在于将集装箱依其重量从⼩到⼤排序,故算法的时间复杂度为 ( ) 。
A、O(n2n)
B、O(nlogn)
C、O(2n)
D、O(n)
- B
41.背包问题的贪心算法所需的计算时间为( )
A、O(n×2的n次方)
B、O(nlogn)
C、O(2的n次方)
D、O(n)
- B
42.哈弗曼编码的贪心算法所需的计算时间为( )。
A、O(n*2n)
B、O(nlogn)
C、O(2的n次方)
D、O(n)
- B
43.背包问题的贪心算法所需的计算时间为( )。
A、O(n*2n)
B、O(nlogn)
C、O(2n)
D、O(n)
- B
44.回溯算法和分支限界法的问题的解空间树不会是( ).
A.有序树
B.⼦集树
C.排列树
D.⽆序树
- D
45.广度优先是( )的一种搜索方式。
A、分⽀界限法
B、动态规划法
C、贪⼼法
D、回溯法
- A
46.下面不是分支界限法搜索方式的是( )。
A、⼴度优先
B、最⼩耗费优先
C、最⼤效益优先
D、深度优先
- D
47.最大效益优先是( )的一种搜索方式。
A、分⽀界限法
B、动态规划法
C、贪⼼法
D、回溯法
- A
48.优先队列式分⽀限界法选取扩展结点的原则是( )。
A、先进先出
B、后进先出
C、结点的优先级
D、随机
- C
49. 分支限界法解旅行售货员问题时,活结点表的组织形式是( )。
A、最⼩堆
B、最⼤堆
C、栈
D、数组
- A
50.分支限界法解最大团问题时,活结点表的组织形式是( )。
A 、最⼩堆
B 、最⼤堆
C 、栈
D、数组
- B
51.从活结点表中选择下⼀个扩展结点的不同⽅式将导致不同的分⽀限界法,以下除( )之外都是最常⻅的⽅式.
A.队列式分⽀限界法
B.优先队列式分⽀限界法
C.栈式分⽀限界法
D.FIFO分⽀限界法
- C
52.在对问题的解空间树进⾏搜索的⽅法中,⼀个活结点最多有⼀次机会成为活结点的是( ).
A.回溯法
B.分⽀限界法
C.回溯法和分⽀限界法
D.回溯法求解⼦集树问题
- B
53、回溯算法和分⽀限界法的问题的解空间树不会是( ).
A.有序树
B.⼦集树
C.排列树
D.⽆序树
- D
二.填空题
1.算法的复杂性有()复杂性和()复杂性之分。
- 时间
- 空间
2.程序是()用某种程序设计语言的具体实现。
- 算法
3.算法的“确定性”指的是组成算法的每条()是清晰的,无歧义的。
- 指令
4.矩阵连乘问题的算法可由设计实现。
- 动态规划
5.拉斯维加斯算法找到的解⼀定是()。
- 正确解
6.算法是指解决问题的()或 ()。
- 一种方法
- 一个过程
7.从分治法的⼀般设计模式可以看出,用它设计出的程序⼀般是()。
- 递归算法
8.问题的()是该问题可用动态规划算法或贪心算法求解的关键特征。
- 最优子结构性质
9.以深度优先方式系统搜索问题解的算法称为() 。
- 回溯算法
10.数值概率算法常用于()的求解。
- 数值问题
11.计算⼀个算法时间复杂度通常可以计算() 、 () 、或计算步。
- 循环次数
- 基本操作的频率
12.利用概率的性质计算近似值的随机算法是(),运行时以一定的概率得到正确解的随机算法是()。
- 数值概率算法
- 蒙特卡罗算法
13.解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是(),需要排序的是() ,() 。
- 动态规划
- 回溯法
- 分支界限法
14.使用回溯法进行状态空间树裁剪分支时一般有两个标准:约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是(),只使用约束条件进⾏裁剪的是()。
- 0/1背包问题
- N皇后问题
15.()是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。
- 贪心选择性质
- 注:贪心算法与动态规划算法的重要特征是——最优⼦结构性质
16.矩阵连乘问题的算法可由()设计实现。
- 动态规划
17.贪心算法的基本要素是()和()性质 。
- 贪心选择性质
- 最优子结构性质
18.动态规划算法的两个基本要素是()性质和 () 性质。
- 最优字结构
- 重叠子问题
19.算法是由若干条指令组成的有穷序列,且要满足()、 () 、()和 () 四条性质。
- 输入
- 输出
- 确定性
- 有界性
20.大整数乘积算法是用()来设计的。
- 分治法
21.以广度优先或以最小耗费方式搜索问题解的算法称为()。
- 分支界限法
25.舍伍德算法总能求得问题的() 。
- 一个解
26.快速排序算法是基于()的⼀种排序算法。
- 分治策略
27. 动态规划算法的基本思想是将待求解问题分解成若干() ,先求解() ,然后从这些 ()的解得到原问题的解。
- 子问题
- 子问题
- 子问题
28.回溯法是一种既带有()又带有()的搜索算法。
- 系统性
- 跳跃性
30.分支限界法是一种既带有 () 又带有 () 的搜索算法。
- 系统性
- 跳跃性
31.分支限界法主要有() 分支限界法和 ()分支限界法。
- 队列式
- 优先级队列式
32.回溯法搜索解空间树时,常用的两种剪枝函数为()和() 。
- 约束函数
- 限界函数
33.任何可用计算机求解的问题所需的时间都与其()有关。
- 规模
34.快速排序算法的性能取决于()。
- 划分的对称性
35. Prim算法利用()策略求解 ()问题,其时间复杂度是 ()。
- 贪心
- 最小生成树
- o(n的2次方)
36. 图的m着色问题可用()法求解,其解空间树中叶子结点个数是 (),解空间树中每个内结点的孩子数是()。
- 回溯法
- m的n次方
- m
三.算法填空
1.背包问题的贪⼼算法
void Knapsack(int n, float M, float v[], float w[], float x[])
{Sort(n, v, w);int i;for (i = 1; i <= n; i++)x[i] = 0;float c = M;for (i = 1; i <= n; i++){if (w[i] > c)break;x[i] = 1;c -= w[i];}if (i <= n)x[i] = c / w[i];
}
2.最⼤⼦段和: 动态规划算法
int MaxSum(int n, int a[])
{
int sum=0, b=0; //sum存储当前最⼤的b[j], b存储b[j]
for(int j=1; j<=n; j++) {
if (b>0) b+= a[j] ;
else b=a[i]; ; //⼀旦某个区段和为负,则从下⼀个位置累和
if(b>sum) sum=b;
}
return sum;
}
3.快速排序
template <typename Type>
void QuickSort(Type a[], int p, int r)
{if (p < r) {int q = Partition(a, p, r);QuickSort(a, p, q - 1); // 对左半段排序QuickSort(a, q + 1, r); // 对右半段排序}
}
4.排列问题
#include <iostream>
#include <algorithm> // 为了使用 std::swaptemplate <class Type>
void perm(Type list[], int k, int m)
{// 产生 [list[k:m]] 的所有排列if (k == m){// 只剩下一个元素,打印排列for (int i = 0; i <= m; ++i)std::cout << list[i];std::cout << std::endl;}else{// 还有多个元素待排列,递归产生排列for (int i = k; i <= m; ++i){std::swap(list[k], list[i]); // 交换 list[k] 和 list[i]perm(list, k + 1, m); // 递归调用 perm 函数std::swap(list[k], list[i]); // 恢复 list[k] 和 list[i] 的原始顺序(回溯)}}
}int main()
{// 示例数组int arr[] = {1, 2, 3};int n = sizeof(arr) / sizeof(arr[0]);// 生成并打印所有排列perm(arr, 0, n - 1);return 0;
}
5.给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出⼀特定元素x。据此容易设计出⼆分搜索算法:
template <class Type>
int BinarySearch(Type a[], const Type& x, int l, int r)
{while (l <= r){// 计算中间索引,注意使用整数除法// 为了避免 (l + r) 可能的整数溢出,使用 l + (r - l) / 2int m = l + (r - l) / 2;if (x == a[m]){return m; // 找到元素,返回索引}else if (x < a[m]){r = m - 1; // 元素在左半部分,更新右边界}else{l = m + 1; // 元素在右半部分,更新左边界}}return -1; // 未找到元素,返回 -1
}
6、合并排序描述如下:
template
void Mergesort(Type a[ ], int left, int right)
{
if (left<right){
int i=( left+right)/2;
Mergesort(a, left, i );
Mergesort(a, i+1, right);
Merge(a,b, left,i,right);//合并到数组b
Copy(a,b, left,right ); //复制到数组a
}
}
7、以下是计算xm的值的过程
int power ( x, m )
{ //计算xm 的值并返回。
y=( 1 );i=m;
While(i- - >0)
y=y*x;
(return y) ;
}
四.问答题
1.⽤计算机求解问题的步骤:
1、问题分析2、数学模型建⽴3、算法设计与选择4、算法指标5、算法分析
6、算法实现7、程序调试8、结果整理⽂档编制
2. 算法定义:
算法是指在解决问题时,按照某种机械步骤⼀定可以得到问题结果的处理过
程
3.算法的三要素
1、操作2、控制结构3、数据结构
4. 算法具有以下5个属性:
有穷性:⼀个算法必须总是在执⾏有穷步之后结束,且每⼀步都在有穷时
间内完成。
确定性:算法中每⼀条指令必须有确切的含义。不存在⼆义性。只有⼀个
⼊⼝和⼀个出⼝
可⾏性:⼀个算法是可⾏的就是算法描述的操作是可以通过已经实现的基
本运算执⾏有限次来实现的。
输⼊:⼀个算法有零个或多个输⼊,这些输⼊取⾃于某个特定对象的集
合。
输出:⼀个算法有⼀个或多个输出,这些输出同输⼊有着某些特定关系的
量。
5. 算法设计的质量指标:
正确性:算法应满⾜具体问题的需求;
可读性:算法应该好读,以有利于读者对程序的理解;
健壮性:算法应具有容错处理,当输⼊为⾮法数据时,算法应对其作出反
应,⽽不是产⽣莫名其妙的输出结果。
效率与存储量需求:效率指的是算法执⾏的时间;存储量需求指算法执⾏
过程中所需要的最⼤存储空间。⼀般这两者与问题的规模有关。
经常采⽤的算法主要有迭代法、分治法、贪婪法、动态规划法、回溯法、分⽀
限界法
6. 迭代法:
也称“辗转法”,是⼀种不断⽤变量的旧值递推出新值的解决问题的⽅法。
7.利⽤迭代算法解决问题,需要做好以下三个⽅⾯的⼯作:
1)、确定迭代模型。在可以⽤迭代算法解决的问题中,⾄少存在⼀个直接
或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
2)、建⽴迭代关系式。所谓迭代关系式,指如何从变量的前⼀个值推出其
下⼀个值的公式(或关系)。迭代关系式的建⽴是解决迭代问题的关键,通常
可以使⽤递推或倒推的⽅法来完成。
3)、对迭代过程进⾏控制。在什么时候结束迭代过程?这是编写迭代程序
必须考虑的问题。不能让迭代过程⽆休⽌地重复执⾏下去。迭代过程的控制通
常可分为两种情况:⼀种是所需的迭代次数是个确定的值,可以计算出来;另
⼀种是所需的迭代次数⽆法确定。对于前⼀种情况,可以构建⼀个固定次数的
循环来实现对迭代过程的控制;对于后⼀种情况,需要进⼀步分析出⽤来结束
迭代过程的条件。
8.分治法的基本思想是:
将⼀个规模为n的问题分解为k个规模较⼩的⼦问题,这些⼦问题互相独⽴且
与原问题相同。递归地解这些⼦问题,然后将各个⼦问题的解合并得到原问题
的解。
9.分治法所能解决的问题⼀般具有以下⼏个特征:
(1)该问题的规模缩⼩到⼀定的程度就可以容易地解决;
(2)该问题可以分解为若⼲个规模较⼩的相同问题,即该问题具有最优⼦
结构性质;
(3)利⽤该问题分解出的⼦问题的解可以合并为该问题的解;
(4)该问题所分解出的各个⼦问题是相互独⽴的,即⼦问题之间不包含公
共的⼦⼦问题。
10、分治法的基本步骤
分治法在每⼀层递归上都有三个步骤:
(1)分解:将原问题分解为若⼲个规模较⼩,相互独⽴,与原问题形式相
同的⼦问题;
(2)解决:若⼦问题规模较⼩⽽容易被解决则直接解,否则递归地解各个
⼦问题;
(3)合并:将各个⼦问题的解合并为原问题的解。
11. 动态规划的基本思想
前⽂主要介绍了动态规划的⼀些理论依据,我们将前⽂所说的具有明显的
阶段划分和状态转移⽅程的动态规划称为标准动态规划,这种标准动态规划是
在研究多阶段决策问题时推导出来的,具有严格的数学形式,适合⽤于理论上
的分析。在实际应⽤中,许多问题的阶段划分并不明显,这时如果刻意地划分
阶段法反⽽麻烦。⼀般来说,只要该问题可以划分成规模更⼩的⼦问题,并且
原问题的最优解中包含了⼦问题的最优解(即满⾜最优⼦化原理),则可以考
虑⽤动态规划解决。
动态规划的实质是分治思想和解决冗余,因此,动态规划是⼀种将问题实
例分解为更⼩的、相似的⼦问题,并存储⼦问题的解⽽避免计算重复的⼦问
题,以解决最优化问题的算法策略。
由此可知,动态规划法与分治法和贪⼼法类似,它们都是将问题实例归纳
为更⼩的、相似的⼦问题,并通过求解⼦问题产⽣⼀个全局最优解。
贪⼼法的当前选择可能要依赖已经作出的所有选择,但不依赖于有待于做
出的选择和⼦问题。因此贪⼼法⾃顶向下,⼀步⼀步地作出贪⼼选择;
⽽分治法中的各个⼦问题是独⽴的(即不包含公共的⼦问题),因此⼀旦递归
地求出各⼦问题的解后,便可⾃下⽽上地将⼦问题的解合并成问题的解。
不⾜之处:如果当前选择可能要依赖⼦问题的解时,则难以通过局部的贪
⼼策略达到全局最优解;如果各⼦问题是不独⽴的,则分治法要做许多不必要
的⼯作,重复地解公共的⼦问题。
解决上述问题的办法是利⽤动态规划。该⽅法主要应⽤于最优化问题,这
类问题会有多种可能的解,每个解都有⼀个值,⽽动态规划找出其中最优(最
⼤或最⼩)值的解。若存在若⼲个取最优值的解的话,它只取其中的⼀个。在
求解过程中,该⽅法也是通过求解局部⼦问题的解达到全局最优解,但与分治
法和贪⼼法不同的是,动态规划允许这些⼦问题不独⽴,(亦即各⼦问题可包
含公共的⼦问题)也允许其通过⾃身⼦问题的解作出选择,该⽅法对每⼀个⼦
问题只解⼀次,并将结果保存起来,避免每次碰到时都要重复计算。
因此,动态规划法所针对的问题有⼀个显著的特征,即它所对应的⼦问题
树中的⼦问题呈现⼤量的重复。动态规划法的关键就在于,对于重复出现的⼦
问题,只在第⼀次遇到时加以求解,并把答案保存起来,让以后再遇到时直接
引⽤,不必重新求解。
12、动态规划算法的基本步骤
设计⼀个标准的动态规划算法,通常可按以下⼏个步骤进⾏:
(1)划分阶段:按照问题的时间或空间特征,把问题分为若⼲个阶段。注意这
若⼲个阶段⼀定要是有序的或者是可排序的(即⽆后向性),否则问题就⽆法
⽤动态规划求解。
(2)选择状态:将问题发展到各个阶段时所处于的各种客观情况⽤不同的状态
表示出来。当然,状态的选择要满⾜⽆后效性。
(3)确定决策并写出状态转移⽅程:之所以把这两步放在⼀起,是因为决策和
状态转移有着天然的联系,状态转移就是根据上⼀阶段的状态和决策来导出本
阶段的状态。所以,如果我们确定了决策,状态转移⽅程也就写出来了。但事
实上,我们常常是反过来做,根据相邻两段的各状态之间的关系来确定决策。
(4)写出规划⽅程(包括边界条件):动态规划的基本⽅程是规划⽅程的通⽤
形式化表达式。
⼀般说来,只要阶段、状态、决策和状态转移确定了,这⼀步还是⽐较简单
的。动态规划的主要难点在于理论上的设计,⼀旦设计完成,实现部分就会⾮
常简单。根据动态规划的基本⽅程可以直接递归计算最优值,但是⼀般将其改
为递推计算。实际应⽤当中经常不显式地按照上⾯步骤设计动态规划,⽽是按
以下⼏个步骤进⾏:
(1)分析最优解的性质,并刻划其结构特征。
(2)递归地定义最优值。
(3)以⾃底向上的⽅式或⾃顶向下的记忆化⽅法(备忘录法)计算出最优值。
(4)根据计算最优值时得到的信息,构造⼀个最优解。
步骤(1)~(3)是动态规划算法的基本步骤。在只需要求出最优值的情形,
步骤(4)可以省略,若需要求出问题的⼀个最优解,则必须执⾏步骤(4)。
此时,在步骤(3)中计算最优值时,通常需记录更多的信息,以便在步骤
(4)中,根据所记录的信息,快速地构造出⼀个最优解。
总结:动态规划实际上就是最优化的问题,是指将原问题的⼤实例等价于
同⼀最优化问题的较⼩实例,⾃底向上的求解最⼩实例,并将所求解存放起
来,存放的结果就是为了准备数据。与递归相⽐,递归是不断的调⽤⼦程序求
解,是⾃顶向下的调⽤和求解。
13. 分治法与动态规划法的相同点是:
将待求解的问题分解成若⼲个⼦问题,先求解⼦问题,然后从这些⼦问题
的解得到原问题的解。
两者的不同点是:适合于⽤动态规划法求解的问题,经分解得到的⼦问题
往往不是互相独⽴的。⽽⽤分治法求解的问题,经分解得到的⼦问题往往是互
相独⽴的。
14. 回溯法
回溯法也称为试探法,该⽅法⾸先暂时放弃关于问题规模⼤⼩的限制,并将
问题的候选解按某种顺序逐⼀枚举和检验。当发现当前候选解不可能是解时,
就选择下⼀个候选解;倘若当前候选解除了还不满⾜问题规模要求外,满⾜所
有其他要求时,继续扩⼤当前候选解的规模,并继续试探。如果当前候选解满
⾜包括问题规模在内的所有要求时,该候选解就是问题的⼀个解。在回溯法
中,放弃当前候选解,寻找下⼀个候选解的过程称为回溯。扩⼤当前候选解的
规模,以继续试探的过程称为向前试探。
15. 分⽀限界法:
这是⼀种⽤于求解组合优化问题的排除⾮解的搜索算法。类似于回溯法,
分枝定界法在搜索解空间时,也经常使⽤树形结构来组织解空间。然⽽与回溯
法不同的是,回溯算法使⽤深度优先⽅法搜索树结构,⽽分枝定界⼀般⽤宽度
优先或最⼩耗费⽅法来搜索这些树。因此,可以很容易⽐较回溯法与分枝定界
法的异同。相对⽽⾔,分枝定界算法的解空间⽐回溯法⼤得多,因此当内存容
量有限时,回溯法成功的可能性更⼤。
算法思想:分枝限界(branch and bound)是另⼀种系统地搜索解空间的⽅
法,它与回溯法的主要区别在于对E-节点的扩充⽅式。每个活节点有且仅有⼀
次机会变成E-节点。当⼀个节点变为E-节点时,则⽣成从该节点移动⼀步即可
到达的所有新节点。在⽣成的节点中,抛弃那些不可能导出(最优)可⾏解的
节点,其余节点加⼊活节点表,然后从表中选择⼀个节点作为下⼀个E-节点。
从活节点表中取出所选择的节点并进⾏扩充,直到找到解或活动表为空,扩充
过程才结束。
有两种常⽤的⽅法可⽤来选择下⼀个E-节点(虽然也可能存在其他的⽅
法):
- 先进先出(F I F O) 即从活节点表中取出节点的顺序与加⼊节点的顺序相
同,因此活
节点表的性质与队列相同。 - (优先队列)最⼩耗费或最⼤收益法在这种模式中,每个节点都有⼀个对应
的耗费或收益。如果查找 ⼀个具有最⼩耗费的解,则活节点表可⽤最⼩堆来建
⽴,下⼀个E-节点就是具有最⼩耗费 的活节点;如果希望搜索⼀个具有最⼤收
益的解,则可⽤最⼤堆来构造活节点表,下⼀个 E-节点是具有最⼤收益的活节
点
16. 分⽀限界法与回溯法的相同点是:都是⼀种在问题的解空间树T中搜索
问题解的算法。
不同点:(1)求解⽬标不同;
(2)搜索⽅式不同;
(3)对扩展结点的扩展⽅式不同;
(4)存储空间的要求不同。
17. 分治法所能解决的问题⼀般具有的⼏个特征是:
(1)该问题的规模缩⼩到⼀定的程度就可以容易地解决;
(2)该问题可以分解为若⼲个规模较⼩的相同问题,即该问题具有最优⼦
结构性质;
(3)利⽤该问题分解出的⼦问题的解可以合并为该问题的解;
(4)原问题所分解出的各个⼦问题是相互独⽴的,即⼦问题之间不包含公
共的⼦问题。
18. ⽤分⽀限界法设计算法的步骤是:
(1)针对所给问题,定义问题的解空间(对解进⾏编码);
(2)确定易于搜索的解空间结构(按树或图组织解) ;
(3)以⼴度优先或以最⼩耗费(最⼤收益)优先的⽅式搜索解空间,并在搜
索过程中⽤剪枝函数避免⽆效搜索。
19. 常⻅的两种分⽀限界法的算法框架:
(1)队列式(FIFO)分⽀限界法:按照队列先进先出(FIFO)原则选取下⼀
个节点为扩展节点。
(2)优先队列式分⽀限界法:按照优先队列中规定的优先级选取优先级最
⾼的节点成为当前扩展节点。
20. 回溯法中常⻅的两类典型的解空间树是⼦集树和排列树。
当所给的问题是从n个元素的集合S中找出满⾜某种性质的⼦集时,相应
的解空间树称为⼦集树。这类⼦集树通常有2n个叶结点,遍历⼦集树需O(2n)计
算时间 。
当所给的问题是确定n个元素满⾜某种性质的排列时,相应的解空间树称
为排列树。这类排列树通常有n!个叶结点。遍历排列树需要O(n!)计算时间。
21. 分⽀限界法的搜索策略是:
在扩展结点处,先⽣成其所有的⼉⼦结点(分⽀),然后再从当前的活结
点表中选择下⼀个扩展结点。为了有效地选择下⼀扩展结点,加速搜索的进
程,在每⼀个活结点处,计算⼀个函数值(限界),并根据函数值,从当前活
结点表中选择⼀个最有利的结点作为扩展结点,使搜索朝着解空间上有最优解
的分⽀推进,以便尽快地找出⼀个最优解。
22. 请叙述动态规划算法与贪⼼算法的异同。
共同点:
都需要最优⼦结构性质,
都⽤来求有优化问题。
不同点:
动态规划:每⼀步作⼀个选择—依赖于⼦问题的解。
贪⼼⽅法:每⼀步作⼀个选择—不依赖于⼦问题的解。
动态规划⽅法的条件:⼦问题的重叠性质。
可⽤贪⼼⽅法的条件:最优⼦结构性质;贪⼼选择性质。
动态规划:⾃底向上求解;
贪⼼⽅法: ⾃顶向下求解。
可⽤贪⼼法时,动态规划⽅法可能不适⽤;
可⽤动态规划⽅法时,贪⼼法可能不适⽤。
23. 请说明动态规划⽅法为什么需要最优⼦结构性质。
答:
最优⼦结构性质是指⼤问题的最优解包含⼦问题的最优解。
动态规划⽅法是⾃底向上计算各个⼦问题的最优解,即先计算⼦问题的最优
解,然后再利⽤⼦问题的最优解构造⼤问题的最优解,因此需要最优⼦结
构.
24. 请说明:
(1)优先队列可⽤什么数据结构实现?
(2)优先队列插⼊算法基本思想?
(3)优先队列插⼊算法时间复杂度?
答:(1)堆。
(2)在⼩根堆中,将元素x插⼊到堆的末尾,
然后将元素x的关键字与其双亲的关键字⽐较,
若元素x的关键字⼩于其双亲的关键字,
则将元素x与其双亲交换,然后再将元素x与其新双亲的关键字相
⽐,直到元素x的关键字⼤于双亲的关键字,或元素x到根为⽌。
(3)O( log n)
25. 衡量算法时间效率的⽅法有哪两种?请叙述。
答:有事前分析法和事后分析法两种。
事后分析法:先将算法⽤程序设计语⾔实现,然后度量程序的运⾏时间。
事前分析法:算法的时间效率是问题规模的函数,假如,随着问题规模n的增
⻓,算法执⾏时间的增⻓率和函数f(n)的增⻓率相同,则可记作:
T(n)=○(f(n))
称T(n)为算法的渐进时间复杂度。简称时间复杂度。
26. 在算法复杂性分析中,O、Ω、Θ这三个记号的意义是什么?在忽略常数因
⼦的情况
下,O、Ω、Θ分别提供了算法运⾏时间的什么界?
答:
如果存在两个正常数c和N0,对于所有的N≥N0,有|f(N)|≤C|g(N)|,则记作:f(N)=
O(g(N))。这时我们说f(N)的阶不⾼于g(N)的阶。
若存在两个正常数C和⾃然数N0,使得当N ≥ N0时有|f(N)|≥C|g(N)|,记为
f(N)=Ω(g(N))。这时我们说f(N)的阶不低于g(N)的阶。
如果存在正常数c1,c2和n0,对于所有的n≥n0,有c1|g(N)| ≤|f(N)| ≤ c2|g(N)|
则记作 f(N)= (g,(N))
O、Ω、Θ分别提供了算法运⾏时间的上界、下界、平均
27. 概率算法
很多算法的每⼀个计算步骤都是固定的,⽽概率算法允许算法在执
⾏的过程中随机选择下⼀个计算步骤。许多情况下,当算法在执⾏过程中⾯临
⼀个选择时,随机性选择常⽐最优选择省时。因此概率算法可在很⼤程度上降
低算法的复杂度。
28.概率算法的⼀个基本特征
是对所求解问题的同⼀实例⽤同⼀概率算法求解两次可能得到完全不同的
效果。这两次求解问题所需的时间甚⾄所得到的结果可能会有相当⼤的差别。
29.概率算法⼤致分为四类:
数值概率算法,蒙特卡罗(Monte Carlo)算法,拉斯维加斯(Las Vegas)
算法和舍伍德(Sherwood)算法。
30.数值概率算法
常⽤于数值问题的求解。这类算法所得到的往往是近似解。⽽且近似解的
精度随计算时间的增加不断提⾼。在许多情况下,要计算出问题的精确解是不
可能或没有必要的,因此⽤数值概率算法可得到相当满意的解。
31.蒙特卡罗算法
⽤于求问题的准确解。对于许多问题来说,近似解毫⽆意义。例如,⼀个判
定问题其解为“是”或“否”,⼆者必居其⼀,不存在任何近似解答。⼜如,我们
要求⼀个整数的因⼦时所给出的解答必须是准确的,⼀个整数的近似因⼦没有
任何意义。⽤蒙特卡罗算法能求得问题的⼀个解,但这个解未必是正确的。求
得正确解的概率依赖于算法所⽤的时间。算法所⽤的时间越多,得到正确解的
概率就越⾼。蒙特卡罗算法的主要缺点就在于此。⼀般情况下,⽆法有效判断
得到的解是否肯定正确。
32.拉斯维加斯算法
不会得到不正确的解,⼀旦⽤拉斯维加斯算法找到⼀个解,那么这个解肯定
是正确的。但是有时候⽤拉斯维加斯算法可能找不到解。与蒙特卡罗算法类
似。拉斯维加斯算法得到正确解的概率随着它⽤的计算时间的增加⽽提⾼。对
于所求解问题的任⼀实例,⽤同⼀拉斯维加斯算法反复对该实例求解⾜够多
次,可使求解失效的概率任意⼩。
33.舍伍德算法
总能求得问题的⼀个解,且所求得的解总是正确的。当⼀个确定性算法在最
坏情况下的计算复杂性与其在平均情况下的计算复杂性有较⼤差别时,可以在
这个确定算法中引⼊随机性将它改造成⼀个舍伍德算法,消除或减少问题的好
坏实例间的这种差别。舍伍德算法精髓不是避免算法的最坏情况⾏为,⽽是设
法消除这种最坏⾏为与特定实例之间的关联性。
Θ舍伍德算法 sherwood algorithm
舍伍德算法 ⼀类概率算法的代称。此类算法总能给出所求问题的正确的解。…
当解决某⼀问题的确定性算法的平均情形复杂性⽐最坏情形复杂性低得多时,
通过引⼊随机性来试图减少甚⾄消除“好”、“坏”实体之间这种时间上的差别,
以期望较⼩的运⾏时间。例 …
相关文章:
【算法不挂科】算法期末考试题库(带解析)【选择题53道&填空题36道&算法填空题7道&问答题33道】
前言 大家好吖,欢迎来到 YY 滴算法不挂科系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 下面是相关传送门 【算法不挂科】算法期末考试题库1(带解析)【选择题53道&填空题36道&算法填空题7道&a…...
Java+maven+selenium3+testng 自动化测试环境IDEA
软件测试资料领取:[内部资源] 想拿年薪40W的软件测试人员,这份资料必须领取~ 软件测试面试刷题工具领取:软件测试面试刷题【800道面试题答案免费刷】 idea 、java环境变量jdk maven安装及环境变量配置这里就不多说了,网上有很多…...
【踩坑指南2.0 2025最新】Scala中如何在命令行传入参数以运行主函数
这个地方基本没有任何文档记录,在学习的过程中屡屡碰壁,因此记录一下这部分的内容,懒得看可以直接跳到总结看结论。 踩坑步骤 首先来看看书上让我们怎么写: //main.scala object Start {def main(args:Array[String]) {try {v…...
vue3-watchEffect异步依赖收集
当 b 更新时 a 并不会更新,因为watchEffect的依赖收集在该案例中停止于await asyncFn(),也就是只会收集同步代码的依赖,await 之后的异步代码的依赖并不会收集到 <template> <div>a: {{ a }} <br>b: {{ b }} <br>&l…...
【Go研究】Go语言脚本化的可行性——yaegi项目体验
0x01 背景——云计算中脚本化困境 作为云基础设施管理中,大量需要跟文件系统、容器等相关的操作,这些操作实现通常用脚本来实现。 现在探讨下,这些脚本为什么一定要用脚本语言来实现,以及目前实现中的常见的问题。 常见的两个场…...
Genome Research | 俄亥俄州立于忠堂组-结合深度学习与蛋白质数据库系统探究反刍动物真核微生物...
结合深度学习与蛋白质数据库系统探究反刍动物真核微生物 Probing the eukaryotic microbes of ruminants with a deep-learning classifier and comprehensive protein databases 期刊:Genome Research DOI:https://doi.org/10.1101/gr.279825.124 第一作…...
centos7yum安装mysql5.7
1、安装mysql5.7 (1) 正常安装 [rootBrianZhu /]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm [rootBrianZhu /]# yum -y install mysql57-community-release-el7-10.noarch.rpm [rootBrianZhu /]# yum -y install mysql-community-se…...
JavaScript系列(8)-- Array高级操作
JavaScript Array高级操作 📚 在前七篇文章中,我们探讨了JavaScript的语言特性、ECMAScript标准、引擎工作原理、数值类型、字符串处理、Symbol类型和Object高级特性。今天,让我们深入了解JavaScript中的Array高级操作。数组是最常用的数据结…...
蓝牙架构介绍
架构1:hostcontroller双芯片标准架构 这个标准把蓝牙协议栈分成host和controller两部分,其中host跑在AP上,controller跑在蓝牙模块上,两者之间通过HCI协议进行通信,AP芯片厂商一般会直接采用开源的Bluez来实现Host功能…...
青少年编程与数学 02-006 前端开发框架VUE 08课题、列表渲染
青少年编程与数学 02-006 前端开发框架VUE 08课题、列表渲染 一、列表渲染v-for 指令:key 属性遍历对象响应式更新列表渲染的作用 二、应用示例项目结构public/index.htmlsrc/components/TodoApp.vuesrc/main.jspackage.json构建和运行项目 课题摘要:本文介绍了Vue.js中的列表渲…...
12.3【hardware][day3]
关于使用硬件 DSP 资源实现乘法的含义 在 Xilinx 7 Series FPGA(现场可编程门阵列)中,乘法运算可以通过专门的数字信号处理(DSP)硬件资源来完成。当使用 Verilog 语言编写代码进行乘法运算时,直接使用乘号&…...
降维算法之PCA(PrincipalComponent Analysis,主成分分析)
降维是指在保留数据特征的前提下,以少量的变量表示有许多变量的数据,这有助于降低多变量数据分析的复杂度。比如在分析有 100 个变量的数据时,与其直接分析数据,不如使用 5 个变量表示数据,这样可以使后续分析比较容易…...
【JVM】总结篇-类的加载篇之 类的加载器 和ClassLoader分析
文章目录 类的加载器ClassLoader自定义类加载器双亲委派机制概念源码分析优势劣势如何打破Tomcat 沙箱安全机制JDK9 双亲委派机制变化 类的加载器 获得当前类的ClassLoader clazz.getClassLoader() 获得当前线程上下文的ClassLoader Thread.currentThread().getContextClassLoa…...
Android:文件管理:打开文件意图
三步走: 一、先在AndroidManifest.xml声明provider: <providerandroid:name"androidx.core.content.FileProvider"android:authorities"${applicationId}.FileProvider"android:exported"false"android:grantUriPermi…...
《计算机网络A》单选题(详解)
《计算机网络A》单选题-复习题库 1、计算机网络最突出的优点是( D ) A、存储容量大 B、将计算机技术与通信技术相结合 C、集中计算 D、资源共享 解析:算机网络最突出的优点是 D、资源共享。通过计算机网络&…...
【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus
在Spring Boot 3.0中,你可以使用MyBatis Plus来简化数据库操作。以下是一个基本的集成示例: 1.添加依赖到你的pom.xml: <dependencies> <!-- Spring Boot Starter --> <dependency> <groupId>org.springframework.…...
第147场双周赛:子字符串匹配模式、设计任务管理器、最长相邻绝对差递减子序列、删除所有值为某个元素后的最大子数组和
Q1、子字符串匹配模式 1、题目描述 给你一个字符串 s 和一个模式字符串 p ,其中 p 恰好 包含 一个 * 符号。 p 中的 * 符号可以被替换为零个或多个字符组成的任意字符序列。 如果 p 可以变成 s 的子字符串,那么返回 true ,否则返回 false…...
数据结构C语言描述9(图文结合)--二叉树和特殊书的概念,二叉树“最傻瓜式创建”与前中后序的“递归”与“非递归遍历”
前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…...
开源存储详解-分布式存储与ceph
ceph体系结构 rados:reliable, autonomous, distributed object storage, rados rados采用c开发 对象存储 ceph严格意义讲只提供对象存储能力,ceph的块存储能力实际是基于对象存储库librados的rbd 对象存储特点 对象存储采用put/get/delete…...
Vue 快速入门:开启前端新征程
在当今的 Web 开发领域,Vue.js 作为一款极具人气的 JavaScript 前端框架,正被广泛应用于各类项目之中。它以简洁的语法、高效的数据绑定机制以及强大的组件化开发模式,为开发者们带来了前所未有的开发体验。如果你渴望踏入前端开发的精彩世界…...
GPT系统重大升级,开创国内先河:o1支持图片识别功能正式上线
文章目录 零、前言一、授权码登录体验优化:一步直达聊天界面二、全新“项目”功能:让工作更有条理三、语音功能升级:全新交互体验四、o1支持图片识别五、总结 零、前言 我是虚竹哥,目标是带十万人玩转ChatGPT。 亲爱的用户&…...
常用的数据结构API概览
List ArrayList 1、在初始化一个ArrayList的时候,如果我想同时set一些值 比如存放int[ ] List<int[]> list new ArrayList(Arrays.asList(new int[]{intervals[0][0],intervals[0][1]}));//或者int[] temp new int[]{intervals[0][0],intervals[0][1]}…...
《探秘计算机视觉与深度学习:开启智能视觉新时代》
《探秘计算机视觉与深度学习:开启智能视觉新时代》 一、追溯起源:从萌芽到崭露头角二、核心技术:解锁智能视觉的密码(一)卷积神经网络(CNN):图像识别的利器(二࿰…...
Linux:操作系统不朽的传说
操作系统是计算机的灵魂,它掌控着计算机的硬件和软件资源,为用户和应用程序提供了一个稳定、高效、安全的运行环境。 在众多操作系统中,Linux 的地位举足轻重。它被广泛应用于服务器、云计算、物联网、嵌入式设备等领域。Linux 的成功离不开…...
Excel重新踩坑5:二级下拉列表制作;★数据透视表;
0、在excel中函数公式不仅可以写在单元格里面,还可以写在公式里面。 1、二级下拉列表制作: 2、数据透视表: 概念:通过拖拉就能实现复杂函数才能实现的数据统计问题。 概览:在插入选项中有个数据透视表,数…...
containerd配置镜像加速(含新旧版本)
文章目录 镜像加速使用文档containerd配置说明文档host.toml配置步骤(containerd2.x新版功能,与config.toml解耦,无需重启containerd)传统配置(需要重启containerd) 镜像加速使用文档 关于镜像加速的使用可…...
国产编辑器EverEdit - 常用资源汇总
1 国产编辑器EverEdit-常用资源汇总 EverEdit是一款国产文本编辑器,历经超过15年的更新和维护,拥有不输业界顶级商业文本编辑器(EmEditor、UltraEdit)的实力,甚至在某些方面的功能更强(当然,各有千秋),开发者对文本编辑…...
应急指挥系统总体架构方案
引言 应急指挥系统总体架构方案旨在构建一个高效、智能的应急管理体系,以应对自然灾害、事故灾难等突发事件,保障人民生命财产安全。 背景与挑战 近年来,安全生产形势严峻,自然灾害事故频发,对应急指挥系统的要求越…...
Edge Scdn的应用场景有哪些?
酷盾安全Edge Scdn 具备强大的安全防护能力,通过多层防御机制,如防火墙、DDoS 攻击防护、入侵检测和防御、数据加密等,有效抵御各种网络攻击,包括 DDoS 攻击、CC 攻击、SQL 注入攻击、XSS 跨站脚本攻击等,保障网站和应…...
LeetCode:98.验证二叉搜索树
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:98.验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 …...
mysql报错2059
客户端连接mysql服务时提示2059错误,通常与身份验证插件有关,具体表现为客户端无法加载指定的身份验证插件。这个错误在MySQL 8.0及更高版本中较为常见,因为从MySQL 8.0开始,默认的加密规则从mysql_native_password变为了caching_…...
2025/1/4期末复习 密码学 按老师指点大纲复习
我们都要坚信,道路越是曲折,前途越是光明。 --------------------------------------------------------------------------------------------------------------------------------- 现代密码学 第五版 杨波 第一章 引言 1.1三大主动攻击 1.中断…...
【数据仓库金典面试题】—— 包含详细解答
大家好,我是摇光~,用大白话讲解所有你难懂的知识点 该篇面试题主要针对面试涉及到数据仓库的数据岗位。 以下都是经典的关于数据仓库的问题,希望对大家面试有用~ 1、什么是数据仓库?它与传统数据库有何区别? 数据仓库…...
deepFM模型pytorch实现
deepFM deepfm包含两个部分:因子分解机FM和神经网络DNN,分别负责低阶特征和高阶特征的提取。可以处理全是分类特征的数据,或者分类与数值型结合的数据。 FM部分是对一阶特征和二阶特征(一阶特征之间的交互)的处理。 …...
【Linux】传输层协议UDP
目录 再谈端口号 端口号范围划分 UDP协议 UDP协议端格式 UDP的特点 UDP的缓冲区 UDP注意事项 进一步深刻理解 再谈端口号 在上图中,有两个客户端A和B,客户端A打开了两个浏览器,这两个客户端都访问同一个服务器,都访问服务…...
MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分
MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分 目录 MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分MOE划分不同专家的方法K-Means聚类算法来实现将神经元特征聚类划分成不同专家(行或者列聚类)举例说明怎么聚类,最后神经网络怎么保存M…...
Redis两种主要的持久化方式是什么?
Redis支持两种主要的持久化方式,它们分别是RDB(Redis Database Snapshotting)和AOF(Append Only File)。以下是这两种持久化方式的详细介绍: 一、RDB(Redis Database Snapshotting) …...
【生活】冬天如何选口罩(医用口罩,N95, KN95还是KP95?带不带呼吸阀门?带不带活性炭?)
💡总结一下就是: 日常防护的话,医用口罩就可以啦。要是想长时间佩戴N95(KN95)口罩的话也可以. 在高风险环境(像医院、疫情防控期间),一定要选不带呼吸阀门的N95口罩KN95)…...
机器学习基础-卷积的计算
1 掌握卷积计算的基本过程 1.1 单通道单卷积核 如图3所示,现在有一张形状为[5,5,1]的灰度图,我们需要用图3右边的卷积核对其进行卷积处理,同时再考虑到偏置的作用。计算过程如下: 1.2 单通道多卷积核 如下图所示,左…...
使用LINUX的dd命令制作自己的img镜像
为了避免重复安装同一镜像,配置环境,首先我准备一个正常使用的完整系统。 使用Gparted软件先将母盘(如U盘,TF卡)分区调整为只有数据的大小。如:60G的TF卡,只用了3.5G,将未使用的空间…...
pdf预览兼容问题- chrome浏览器105及一下预览不了
使用的"tato30/vue-pdf": "^1.11.2"预览插件,发现chrome浏览器105及一下预览不了 pdfPreview预览组件: <template><div id"vue_pdf_view"><div class"tool_tip"><template v-if"pa…...
SpringBoot中实现拦截器和过滤器
【SpringBoot中实现过滤器和拦截器】 1.过滤器和拦截器简述 过滤器Filter和拦截器Interceptor,在功能方面很类似,但在具体实现方面差距还是比较大的。 2.过滤器的配置 2.1 自定义过滤器,实现Filter接口(SpringBoot 3.0 开始,jak…...
基于深度学习的视觉检测小项目(六) 项目的信号和变量的规划
• 关于前后端分离 当前流行的一种常见的前后端分离模式是vueflask,vueflask模式的前端和后端之间进行数据的传递通常是借助 API(应用程序编程接口)来完成的。vue通过调用后端提供的 API 来获取或提交数据。例如,前端可能通过发送…...
GitHub的简单操作
引言 今天开始就要开始做项目了,上午是要把git搭好。搭的过程中遇到好多好多的问题。下面就说一下git的简单操作流程。我们是使用的GitHub,下面也就以这个为例了 一、GitHub账号的登录注册 https://github.com/ 通过这个网址可以来到GitHub首页 点击中间绿色的S…...
LLM大语言模型自动化测试(ROUGE和RAGAS)及优化方案
1. 模型自动化测试 模型的测试中,不同类型的任务评测指标有显著差异,比如: 分类任务: 准确率(Accuracy):正确预测的比例。 精确度(Precision)、召回率(Recal…...
你已经分清JAVA中JVM、JDK与JRE的作用和关系了吗?
你已经分清JAVA中JVM、JDK与JRE的作用和关系了吗? 一. JVM、JDK与JRE的关系二. JVM、JDK与JRE的作用2.1 什么是JVM?2.2 什么是JDK?2.3 什么是JRE? 前言 点个免费的赞和关注,有错误的地方请指出,看个人主页有…...
实际开发中,常见pdf|word|excel等文件的预览和下载
实际开发中,常见pdf|word|excel等文件的预览和下载 背景相关类型数据之间的转换1、File转Blob2、File转ArrayBuffer3、Blob转ArrayBuffer4、Blob转File5、ArrayBuffer转Blob6、ArrayBuffer转File 根据Blob/File类型生成可预览的Base64地址基于Blob类型的各种文件的下载各种类型…...
Elasticsearch:Lucene 2024 年回顾
作者:来自 Elastic Chris Hegarty 2024 年对于 Apache Lucene 来说又是重要的一年。在本篇博文中,我们将探讨主要亮点。 Apache Lucene 在 2024 年表现出色,发布了许多版本,包括三年来的首次重大更新,其中包含令人兴奋…...
springboot实战纪实-课程介绍
教程介绍 Spring Boot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。 Spring Boot通过自动配置功能,降低了复杂性,同时支持…...
什么是TDD测试驱动开发(Test Driven Development)?
什么是测试驱动开发? 软件开发团队通常会编写自动化测试套件来防止回归。这些测试通常是在编写应用程序功能代码之后编写的。我们将采用另一种方法:在实现应用程序代码之前编写测试。这称为测试驱动开发 (TDD)。 为什么要应用 TDD?通过在实…...