0
点赞
收藏
分享

微信扫一扫

人工智能-第二版-学习笔记

Java架构领域 2022-04-07 阅读 87
人工智能

第一章 人工智能概述

人工智能研究领域的应用:

  • 搜索算法和拼图
  • 二人博弈
  • 自动推理
  • 产生式系统和专家系统
  • 细胞自动机
  • 神经计算
  • 进化计算
  • 知识表示
  • 不确定性推理

第二章 盲目搜索

2.1 状态空间图

状态空间图(state-space graph)是对一个问题的表示,通过问题表示,分析解的可能的可替代路径。

假币问题
有12枚硬币,已知其中一枚是假的或是伪造的,但是不知道假币是比其他币更轻还是更重。普通的秤可以用于确定任何两组硬币的质量,即一组硬币比另一组硬币更轻或更重。

2.2 生成与测试范式

生成与测试范式(generate-and-test paradigm)。解决问题的直接方法是提出可能的解,然后检查每个提议,查看是否有提议构成了最终解。

n皇后问题
将n个皇后放在n*n的棋盘上,任何两个皇后都不互相攻击。
约束条件为:任何两个皇后都不应该占据相同的行、列或对角线。
n皇后问题-leetcode

class Solution:
    def solveNQueens(self, n: int) -> List[List[str]]:
        def generateBoard():
            board = list()
            for i in range(n):
                row[queens[i]] = "Q"
                board.append("".join(row))
                row[queens[i]] = "."
            return board

        def solve(row: int, columns: int, diagonals1: int, diagonals2: int):
            if row == n:
                board = generateBoard()
                solutions.append(board)
            else:
                availablePositions = ((1 << n) - 1) & (~(columns | diagonals1 | diagonals2))
                while availablePositions:
                    position = availablePositions & (-availablePositions)
                    availablePositions = availablePositions & (availablePositions - 1)
                    column = bin(position - 1).count("1")
                    queens[row] = column
                    solve(row + 1, columns | position, (diagonals1 | position) << 1, (diagonals2 | position) >> 1)

        solutions = list()
        queens = [-1] * n
        row = ["."] * n
        solve(0, 0, 0, 0)
        return solutions

# 作者:LeetCode-Solution
# 链接:https://leetcode-cn.com/problems/n-queens/solution/nhuang-hou-by-leetcode-solution/

2.2.1 回溯

4皇后问题,完全枚举法有1820种方法,每行每列只能放一个皇后,则只有4^4=256种可能。

2.2.2 贪婪算法

贪婪算法(greedy algorithm)是另一种经典搜索算法,先将一个问题分成几个步骤进行操作。贪婪算法总是包含了一个已优化的目标函数。
Dijkstra的最短路径算法
数学中的拟阵(Matroid)理论可以用于识别是否能够成功使用贪婪算法。

2.2.3 旅行销售员问题

旅行销售员问题(Traveling Salesperson Problme,TSP),给定n个顶点,必须找到始于某个顶点,有且只有一次经过图中的每个顶点。

2.3 盲目搜索算法

盲目搜索算法是不使用领域知识的不知情搜索算法:

  • 深度优先搜索(DFS)
  • 广度优先搜索(BFS)
  • 迭代加深(DFS-ID)的深度优先搜索

2.3.1 深度优先搜索

深度优先搜索,每当搜索方法可以选出选择,选择最左(或最右)的分支,通常选择最左分支。
15拼图

2.3.2 广度优先搜索

传教士和食人者(Missionaries and Cannibals)问题

举报

相关推荐

0 条评论