讨论题:
搜索可以获取目标信息、有效信息
它是对问题的一种表示方法,它有很多条路径,某个具体问题的解将对应状态空间图中的一条路径
先给出所有可能的解,然后再筛选出所有符合条件的解
完备的、非冗余、知情的
完全枚举法会查看所有可能的情况,即使当前步骤不能得到解,它也会继续往后搜索;而回溯法在当前步骤无法不能得到解时,会回溯到前一步, 寻找能够摆放当前步骤的位置,若找不到,则撤销前一步,以此往复。
贪心算法会将一个问题拆解成好几个步骤,然后找出当前步骤的最优解
给定n个顶点的加权图(即每条边上带有开销值),求从某个顶点Vi出发经过加权图中的所有顶点(每个顶点只经过一次),然后返回到Vi的最短路径
深度优先搜索(DFS): 从起始顶点开始,沿着一条路径一直向下访问直到末端,然后回溯并继续探索下一条路径。
广度优先搜索(BFS):从起始顶点开始,首先访问起始顶点的所有相邻顶点,然后依次访问这些相邻顶点的相邻顶点,以此类推,直到所有顶点都被访问过。
迭代加深的深度优先搜索(DFS-ID):它会先以较浅的深度进行深度优先搜索,在搜索过程中若未找到目标,则逐渐增加深度限制,并重复进行深度优先搜索,直至找到目标为止
没有确定的目标,搜索方法是随机的抽取
完备性:
·深度优先搜索:在所有路径都不是很深的情况下,DFS是完备;在某几条路径很长的情况下,DFS不是完备的
·广度优先搜索:如果搜索空间的分支因子是有限的,那么 BFS 是完备的
·迭代加深的深度优先搜索:如果给定的搜索空间是有限的,并且DFS-ID算法能够遍历所有可能的输入样本,那么它具有完备性。但是,如果搜索空间无限大或算法无法遍历所有输入样本,那么DFS-ID可能无法解决所有情况,从而导致不完备性。
树很深;分支因子不太大;并且解出现在树中的位置相对较深
搜索树的分支因子不太大(一个适度的 b 值),当整棵树的分支因子实际上很大时, BFS 会因为有过多的路径需要探索而不堪重负;解出现在树中的位置在合理的深度(一个适度的 d 值);所有路径都不是特别深
在时间复杂度上,DFS-ID比BFS稍好;在空间复杂度上,它与DFS相同
练习题:
只称重两次只有在特定情况下能够求解
当第一组和第二组的重量相同时,说明假币在第三组中,拿出第一组中的一枚硬币与第三组中的其中一枚比较,若重量相等则另一枚是假币,若重量不相等则这枚是假币
不是完备的。将扩展的子节点以随机顺序放在开放表中,无法保证在有限的步骤中找到解。
不是最优的。由于节点扩展顺序是随机的,无法保证在最少的步骤中找到解。
不完备也不是非冗余的。首先,这个生成器是随机地分配皇后的位置,这无法保证皇后遍历过每一个位置,造成不完备 ;其次,这个随机分配有可能分配到同一个地方,产生同一个解,造成冗余
def factor_sum(n):
return sum(f for f in range(1, n) if n % f == 0)
perfect_numbers = [num for num in range(1, 101) if factor_sum(num) == num]
print(perfect_numbers)
节点 |
离出发点的距离 |
前面点 |
0 |
0 |
无 |
1 |
4 |
0 |
2 |
7 |
1 |
3 |
6 |
1 |
4 |
7 |
3 |
建立一个二维数组,在相应的位置标上号,若对应的是空位置,则标上0
15枚:4次
20枚:4次
先将所有的硬币等分成相同的个数,进行比较,然后再等分,直到找到假币为止