1.搜索为什么是 AI 系统的重要组成部分?

2.状态空间图是什么?

状态空间图是对问题的一种表示方法。通过状态空间图,人们可以探索和分析通往解的可能的可选路径。某个具体问题的解将对应状态空间图中的一条路径。有时只需要搜索问题的任意一个解即可
状态空间图常用于描述和分析复杂的系统和问题,如计算机程序、自动控制系统、游戏规则等。它可以帮助我们理解系统或问题的运行机制,找到问题的解决方案,优化系统的性能,以及进行系统的模拟和仿真。

3.描述生成-测试范式。

问题求解的一种直接方式就是先给出可能的解,再检查每个可能的解,看看是否有候选解能够构成问题的解

生成-测试范式(Generate-and-Test Paradigm)是一种问题解决方法,其中包括两个主要步骤:生成和测试。

在生成阶段,系统通过生成可能的解决方案来尝试解决问题。这些解决方案可以是基于预定义规则、算法或启发式方法生成的,也可以是随机生成的。生成阶段的目标是生成尽可能多的潜在解决方案。

在测试阶段,系统对生成的解决方案进行评估和验证。系统会应用特定的评估准则或测试条件来检查生成的解决方案是否满足问题的要求。如果解决方案符合要求,它将被接受为有效解决方案;如果不符合要求,它将被丢弃。

生成和测试的过程会反复进行,直到找到一个满足问题要求的有效解决方案,或者耗尽了所有可能的解决方案。

4.生成器有什么属性?

生成器是一种特殊类型的迭代器,它具有以下属性:

  1. 迭代性(Iterable):生成器可以被迭代,可以使用for循环或者next()函数逐个获取生成器的值。
  2. 惰性计算(Lazy Evaluation):生成器是按需生成值的,只有在需要使用时才会计算下一个值,这样可以节省内存和计算资源。
  3. 状态维持(State Maintenance):生成器可以维持内部状态,并在每次迭代时更新状态。这使得生成器可以记住上一个生成的值,并在下一次迭代时使用。
  4. 可暂停和恢复(Pause and Resume):生成器可以在每个值的生成之间暂停执行,并在需要时恢复执行。这使得生成器非常适合处理大型数据集或无限序列。
  5. 一次性(One-time):生成器通常是一次性的,即迭代结束后无法再次使用。如果需要多次迭代生成器的值,可以通过创建新的生成器来实现。
  6. 可以使用生成器表达式或生成器函数来创建生成器。

5.回溯法如何对完全枚举法进行改进?

回溯法是一种通过尝试不同的选择来搜索问题解空间的算法。与完全枚举法相比,回溯法可以通过剪枝操作来减少搜索的空间,从而提高效率。

下面是回溯法对完全枚举法进行改进的几个常见方法:

  1. 剪枝策略(Pruning):在回溯的过程中,通过判断当前路径是否有可能达到最优解,来决定是否继续搜索。如果当前路径已经无法达到最优解,可以提前结束该路径的搜索,从而减少不必要的计算。
  2. 限定搜索空间(Bounding):在回溯的过程中,通过设定上下界或限制条件,来缩小搜索空间。例如,在解决旅行商问题时,可以通过计算当前路径的总长度,并与已知的最短路径进行比较,如果当前路径已经超过最短路径,就可以提前结束该路径的搜索。
  3. 启发式搜索(Heuristic Search):在回溯的过程中,通过一些启发式规则或评估函数来指导搜索方向。这样可以优先选择可能更有希望达到最优解的路径,从而提高搜索效率。
  4. 问题分解(Problem Decomposition):将大问题分解为多个子问题,并对每个子问题进行回溯搜索。通过将问题分解为更小的子问题,可以减少搜索空间并简化问题的求解。
  5. 记忆化搜索(Memoization):在回溯的过程中,记录已经计算过的结果,避免重复计算。这样可以大大减少重复的计算量,提高效率。

6.用一两句话描述贪心算法。

贪心算法是一种基于贪心策略的算法,每步选择当前最优解,希望通过局部最优解的选择来达到全局最优解。

在这里插入图片描述

7.陈述旅行商问题。

旅行商问题(Traveling Salesman Problem,TSP)是一个经典的组合优化问题,目标是找到一条最短路径,使得一个旅行商可以经过所有给定的城市并回到起始城市,同时每个城市只能访问一次。TSP是一个NP-困难问题,没有已知的高效算法可以在多项式时间内解决。因此,解决TSP通常需要使用启发式算法、近似算法或精确算法的优化方法来找到近似最优解。

8.简述 3 种盲目搜索算法。

  1. 深度优先搜索(DFS):
    • 从起始节点开始,沿着一条路径一直向前搜索,直到达到叶子节点或找到目标节点。
    • 如果搜索到某个节点没有可扩展的子节点,就回溯到上一个节点继续搜索其他路径。
    • DFS使用栈来保存待访问的节点,具有较低的内存消耗,但可能会陷入无限循环或搜索到较深的路径。
  2. 广度优先搜索(BFS):
    • 从起始节点开始,逐层地扩展搜索,先访问离起始节点最近的节点。
    • BFS使用队列来保存待访问的节点,每次从队列中取出一个节点进行扩展,直到找到目标节点或搜索完整个图。
    • BFS适用于求解最短路径问题,但可能会消耗较多的内存。
  3. 迭代加深的深度优先搜索(DFS-ID):
    • DFS-ID是一种深度优先搜索的变体,它通过限制搜索深度来控制搜索空间的规模。
    • 从初始深度开始,逐渐增加搜索深度,每次进行完整的DFS搜索。
    • DFS-ID对于大型搜索空间具有较好的内存效率,并且能够找到最优解,但在搜索空间较大时仍可能面临时间复杂度较高的问题。

这三种盲目搜索算法都没有利用问题的特殊性质,只是根据搜索策略进行无差别的搜索。它们在搜索空间较小或问题较简单时可以有效,但在搜索空间较大或问题复杂时可能会面临搜索时间过长或无法找到最优解的问题。

9.在何种意义上,盲目搜索算法是盲目的?

盲目搜索算法之所以被称为“盲目”,是因为它们在搜索过程中没有利用问题的特殊性质或领域知识,而是根据事先定义的搜索策略进行无差别的搜索。它们不考虑问题的具体约束、目标函数或启发信息,只是简单地按照搜索策略进行扩展和搜索,直到找到目标或搜索完整个搜索空间。
盲目搜索算法通常只关注当前节点的邻居节点,而不考虑其他可能更有希望达到目标的路径。它们没有预先对搜索空间进行评估或排序,只是根据搜索策略按照固定的顺序进行搜索。因此,盲目搜索算法可能会在搜索空间中进行大量的无效搜索,导致搜索时间过长或无法找到最优解。
盲目搜索算法的盲目性意味着它们没有利用问题的特殊性质或启发信息,只是按照固定的策略进行搜索。虽然它们简单易实现,但在搜索空间较大或问题复杂时,效率可能较低。因此,在实际应用中,可能需要结合问题的特点,选择更加智能化的搜索算法或结合其他优化方法来解决问题。

10.按照完备性、最优性和时空复杂性,比较本章描述的 3 种盲目搜索算法。

对于深度优先搜索(DFS)、广度优先搜索(BFS)和迭代加深的深度优先搜索(DFS-ID),可以按照完备性、最优性和时空复杂性进行比较:

  1. 完备性:
    • 深度优先搜索(DFS):DFS不保证找到最优解,可能会陷入无限循环或搜索到较深的路径,因此不是完备的。
    • 广度优先搜索(BFS):BFS在有限状态空间中是完备的,可以找到最优解,但在无限状态空间中不完备。
    • 迭代加深的深度优先搜索(DFS-ID):DFS-ID是完备的,可以找到最优解,但在无限状态空间中仍然需要进行无限次的深度优先搜索。
  2. 最优性:
    • 深度优先搜索(DFS):DFS不保证找到最优解,因为它只会优先探索深度较大的路径。
    • 广度优先搜索(BFS):BFS可以找到最短路径,因此在求解最短路径问题时是最优的。
    • 迭代加深的深度优先搜索(DFS-ID):DFS-ID可以找到最优解,因为它是通过不断增加搜索深度来进行搜索的。
  3. 时空复杂性:
    • 深度优先搜索(DFS):DFS的时间复杂性为O(b^m),空间复杂性为O(bm),其中b是分支因子,m是最大搜索深度。
    • 广度优先搜索(BFS):BFS的时间复杂性为O(bd),空间复杂性为O(bd),其中b是分支因子,d是最短路径的深度。
    • 迭代加深的深度优先搜索(DFS-ID):DFS-ID的时间复杂性为O(b^d),空间复杂性为O(bd),其中b是分支因子,d是最大搜索深度。

综上所述,深度优先搜索(DFS)不保证完备性和最优性,但在空间复杂性上相对较低;广度优先搜索(BFS)保证完备性和最优性,但在空间复杂性上相对较高;迭代加深的深度优先搜索(DFS-ID)保证完备性和最优性,但在空间复杂性上介于DFS和BFS之间。因此,在选择算法时需要根据具体问题的特点和要求进行权衡和选择。

11.在什么情况下,DFS 比 BFS 好?

深度优先搜索(DFS)比广度优先搜索(BFS)更适合以下情况:

  1. 空间限制:DFS使用栈来保存待访问的节点,相比BFS使用队列,DFS的空间复杂性较低。如果问题的搜索空间较大,而内存有限,DFS可能是更好的选择。
  2. 解决路径问题:如果问题是要找到一条路径,而不是最短路径,那么DFS可以更快地找到一个可行解。由于DFS优先探索深度较大的路径,因此它可能更早找到一个解,而不必搜索整个状态空间。
  3. 搜索深度限制:在某些情况下,问题的解可能位于较深的层次上,而DFS探索深度较大的路径,因此在限制搜索深度的情况下,DFS可能更快地找到解。
  4. 图的拓扑排序:DFS可以用于拓扑排序,即对有向无环图进行排序。DFS从一个节点开始,沿着一条路径一直向前搜索,直到达到叶子节点,然后回溯到上一个节点继续搜索其他路径。这种特性使得DFS在进行拓扑排序时更加方便。

需要注意的是,DFS不保证找到最优解,可能会陷入无限循环或搜索到较深的路径。因此,在选择DFS还是BFS时,需要根据具体问题的要求和特点进行权衡和选择。

12.在什么情况下,BFS 比 DFS 好?

广度优先搜索(BFS)比深度优先搜索(DFS)更适合以下情况:

  1. 求解最短路径问题:BFS可以保证找到最短路径,因为它按照层级逐步扩展搜索,先访问离起始节点最近的节点。如果问题是要找到最短路径或最优解,那么BFS是更好的选择。
  2. 状态空间较小:如果问题的状态空间相对较小,BFS可以在合理的时间内搜索完整个状态空间,并找到最优解。相比之下,DFS可能会陷入无限循环或搜索到较深的路径,无法找到最优解。
  3. 无限状态空间的近似解:如果问题的状态空间是无限的,但只需要找到一个近似解而不必找到最优解,BFS的空间复杂性可能会限制其使用。在这种情况下,可以使用BFS的变种,如受限深度优先搜索(Limited DFS)或迭代加深的深度优先搜索(DFS-ID),以限制搜索深度并控制空间复杂性。
  4. 图的连通性检测:BFS可以用于检测图的连通性,即判断两个节点之间是否存在路径。BFS从起始节点开始,逐层扩展搜索,直到找到目标节点或搜索完整个图。这种特性使得BFS在连通性检测中更加方便。

需要注意的是,BFS的空间复杂性较高,尤其在搜索空间较大时。因此,在选择BFS还是DFS时,需要根据具体问题的要求和特点进行权衡和选择。

13.在什么意义上,可以说 DFS-ID 是 BFS 和 DFS 的折中?

可以说迭代加深的深度优先搜索(DFS-ID)是深度优先搜索(DFS)和广度优先搜索(BFS)的折中,主要体现在以下几个方面:

  1. 完备性:DFS-ID是完备的,可以找到最优解,这一点与BFS相同。DFS可能会陷入无限循环或搜索到较深的路径,不保证完备性。
  2. 最优性:DFS-ID可以找到最优解,这一点与BFS相同。BFS可以保证找到最短路径,而DFS不保证找到最优解。
  3. 空间复杂性:DFS-ID在空间复杂性上介于DFS和BFS之间。DFS的空间复杂性较低,但可能会陷入无限循环或搜索到较深的路径。BFS的空间复杂性较高,尤其在搜索空间较大时。DFS-ID通过限制搜索深度,既能够保证较低的空间复杂性,又能够找到最优解。
  4. 时间复杂性:DFS-ID的时间复杂性与DFS相同,都是O(bd),其中b是分支因子,d是最大搜索深度。BFS的时间复杂性是O(bd)。因此,DFS-ID在时间复杂性上与DFS和BFS相比没有明显的优势或劣势。

综上所述,DFS-ID在完备性和最优性方面与BFS相似,而在空间复杂性方面与DFS相似。因此,DFS-ID可以被视为DFS和BFS的一种折中方法,综合了两者的优点,并在一些问题中表现出更好的性能。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐