解迷宫算法
解迷宫算法又称走迷宫算法是一种自动求解迷宫的方法。解迷宫算法主要可以分成两大类,一种是用来走没走过的迷宫且无法得知整个迷宫的方法,这类方法较常见的有随机老鼠算法、沿墙法、普莱吉算法和特雷莫算法;另一类是适用于可以一次看到整个迷宫时所使用的方法,这类方法较常见的有死路填充法和最短路径算法。
不包含循环路径的迷宫称为“简单连接”或“完美”的迷宫,其等价于图论中的树。解迷宫算法与图论密切相关。直观上来说,若以适当的方式拉开迷宫中的路径,其结果可能会是一棵树。
概述一个典型的解迷宫算法会
取描述某个迷宫环境的消息做为输入。例如:用一个矩阵,矩阵中每个数字用来代表迷宫里面的一格;
并且经过一些运算之后,给出有关“应该如何移动”的指示作为输出。例如:+1, +1 表示“x坐标和y坐标都要各加1”。
算法的输入根据其类型而定:有的算法是假设了“能以鸟瞰式的方式看到整个迷宫”为前提,所以输入时会描述整个迷宫的环境;有的算法是设计给机器人实际在迷宫里走迷宫的,所以输入时仅会描述机器人视线范围内的环境。 解迷宫算法在人工智能、机器人学甚至是游戏编程(游戏内NPC的寻路算法)等领域中都有相当的应用。
另 ...
mysql修改用户权限
连接mysql1mysql -uroot -P3306 -hlocalhost -p
授权语法说明1`grant` 权限 `on` 库名.表名 `to` 用户;
权限
all privileges所有权限select,delete,update,create,drop中的任意组合
库名.表名
*.*所有库database.*指定database库database.table指定database库的table表
用户
‘user’@’host’
授权例子给远程用户test1赋予mysql库user表的select权限1grant select on mysql.user to test1@'%';
给本地用户test赋予mysql库的所有权限1grant all privileges on mysql.* to test@localhost;
撤消权限1`revoke` 权限 `on` 库名.表名 `from` 用户;
权限
all所有权限select,delete,update,create,drop中的任意组合
库名.表名
*.*所有库database.* ...
MySQL8.0允许root远程登录
连接mysql1mysql -uroot -P3306 -hlocalhost -p
新建远程root用户1create user 'root'@'%' IDENTIFIED with mysql_native_password by '123456';
旧的工具使用mysql_native_password加密认证。
8.0默认使用caching_sha2_password加密认证。
允许登陆1grant all privileges on *.* to 'root'@'%' ;
1flush privileges;
MySQL创建数据库
连接mysql1mysql -uroot -P3306 -hlocalhost -p
-uroot -u后的root是mysql用户名-P3306 -h后的3306是mysql端口-hlocalhost -h后的localhost是mysql主机最后的-p表示需要输入密码
创建数据库1CREATE DATABASE tablename;
创建名字是tablename的数据库;
1CREATE DATABASE IF NOT EXISTS tablename DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
如果名字是tablename的数据库不存在,则创建数据库tablename,并设置字符集为utf8。
mysql命令行创建用户、修改密码
创建用户1CREATE USER user1@127.0.0.1 IDENTIFIED WITH mysql_native_password BY '123456';
user1 用户名
127.0.0.1 允许的IP地址。 IPV6::1 远程 % 本地 localhost 、 127.0.0.1
mysql_native_password 加密方式。 旧的mysql_native_password,新的caching_sha2_password
修改密码1ALTER USER 'root'@'::1' IDENTIFIED WITH mysql_native_password BY '123456';
迭代深化深度优先搜索
迭代深化深度优先搜索 (iterative deepening depth-first search (IDS or IDDFS)))是对状态空间的搜索策略。它重复地运行一个有深度限制的深度优先搜索,每次运行结束后,它增加深度并迭代,直到找到目标状态。
IDDFS 与广度优先搜索有同样的时间复杂度,而空间复杂度远优。
IDDFS 第一次访问节点的累积顺序是广度优先的。
例子
走这张图
深度0
A,没了
深度1
ABCE,没了
深度2
A, B, D, F,
这时该往回走
C, G, E,完了, F(F撞了)
深度3
A, B, D, F, E,
这时该往回走
C, G,完了, E, F, B(这三个撞了)
算法以下虚拟码展示了由递归地使用限制深度的 DFS (深度优先搜索) 算法来实现的 IDDFS 算法 (叫作 DLS).
123456789101112131415procedure IDDFS(root) for depth from 0 to ∞ found ← DLS(root, depth) if found ≠ null ...
蒙特卡洛树搜索
蒙特卡洛树搜索(英语:Monte Carlo tree search;简称:MCTS)是一种用于某些决策过程的启发式搜索算法,最引人注目的是在游戏中的使用。一个主要例子是电脑围棋程序,它也用于其他棋盘游戏、即时电子游戏以及不确定性游戏。
历史基于随机抽样的蒙特卡洛方法可以追溯到20世纪40年代。布鲁斯·艾布拉姆森(Bruce Abramson)在他1987年的博士论文中探索了这一想法,称它“展示出了准确、精密、易估、有效可计算以及域独立的特性。”他深入试验了井字棋,然后试验了黑白棋和国际象棋的机器生成的评估函数。1992年,B·布鲁格曼(B. Brügmann)首次将其应用于对弈程序,但他的想法未获得重视。2006年堪称围棋领域蒙特卡洛革命的一年,雷米·库洛姆(Remi Coulom)描述了蒙特卡洛方法在游戏树搜索的应用并命名为蒙特卡洛树搜索。列文特·科奇什(Levente Kocsis)和乔鲍·塞派什瓦里(Csaba Szepesvári)开发了UCT算法,西尔万·热利(Sylvain Gelly)等人在他们的程序MoGo中实现了UCT。2008年,MoGo在九路围棋中达到段位水平, ...
范围最值查询
范围最值查询(英语:Range Minimum Query),是针对数据集的一种条件查询。若给定一个数组{\displaystyle A[1,n]},范围最值查询指定一个范围条件{\displaystyle i}到{\displaystyle j},要求取出{\displaystyle A[i,j]}中最大/小的元素。
若{\displaystyle A=[3,5,2,5,4,3,1,6,3]},条件为{\displaystyle [3,8]}的范围最值查询返回1,它是子数组{\displaystyle A[3,8]=[2,5,4,3,1,6]}中最小的元素。
通常情况下,数组A是静态的,即元素不会变化,例如插入、删除和修改等,而所有的查询是以在线的方式给出的,即预先并不知道所有查询的参数。
RMQ问题有预处理{\displaystyle O(n)}之后每次查询{\displaystyle O(1)}的算法。
范围最值查询问题(RMQ)与最近公共祖先(LCA)问题有直接联系,它们可以互相转化。RMQ的算法常常应用在严格或者近似子串匹配等问题的处理中。
算法Sparse Table创建一 ...
舞蹈链
在计算机科学中, 舞蹈链(Dancing Links), 也叫 DLX, 是由 Donald Knuth 提出的数据结构,目的是快速实现他提出的的 X算法. X算法是一种递归算法,时间复杂度不确定, 深度优先, 通过回溯寻找精确覆盖问题所有可能的解。有一些著名的精确覆盖问题,包括铺砖块,八皇后问题,数独问题。
名字来自于这个算法的工作方式,算法中的迭代让链接与同伴链接”跳舞”,很像“精心编排的舞蹈”。 Knuth 归功于 Hiroshi Hitotsumatsu 与 Kōhei Noshita 在1979的研究 , 但是Knuth的论文让舞蹈链流行。
算法实现文章的剩余部分讨论这种算法在Algorithm X中的应用,强烈建议读者先阅读 X算法 。
主要思想舞蹈链的主要思想来自于 双向链表
12x.left.right ← x.right;x.right.left ← x.left;
以上代码会从链表中移除x元素
12x.left.right ← x;x.right.left ← x;
以上代码会恢复x元素在链表中的位置(如果x的左侧元素和右侧元素没有变的话)。不管链表中有多少个元素, ...
线性散列
线性散列 (LH) 是一种动态数据结构,它实现哈希表并一次增加或收缩一个存储桶。它是由Witold Litwin于1980年发明的。巴埃萨-耶茨和索萨-波尔曼对此进行了分析。 它是许多称为动态散列的方案中的第一个,例如拉尔森的线性散列与部分扩展,线性散列与优先级分割,线性散列与部分扩展和优先级分割,或递归线性散列。
动态散列数据结构的文件结构会适应文件大小的变化,因此避免了昂贵的定期文件重组。线性哈希文件通过拆分进行扩展 将一个预定的桶一分为二,通过将两个预定的桶合并为一个来收缩。重建的触发因素取决于方案的风格;它可能是存储桶或负载因子(记录数除以存储桶数)的溢出,超出了预定范围。 在线性哈希中有两种类型的桶,一种是要拆分的,另一种是要拆分的 已经分裂了。虽然可扩展散列只拆分溢出的存储桶,但螺旋散列(又名螺旋存储)在桶上不均匀地分布记录,例如 插入、删除或检索成本高的存储桶最早排队 进行拆分。
线性哈希也已制成可扩展的分布式数据结构 LH。在 LH 中,每个存储桶驻留在不同的服务器上。 LH 本身已扩展,可在存在 失败的存储桶。LH 和 LH 中基于键的操作(插入、删除、更新、读取)和 ...