搜索
Spikeeee-
消磨到死的那些希望的亡灵:苍白、凄惨、哭的哀伤。
展开
-
4.5 联机局部搜索(LRTA*(learn real time A*) - agent) --- 实现代码附详细注释
是不是英美思维逻辑习惯从后往前啊还是按着自己的理解重新写了一下很简单的算法 但是很有效局部对单一状态判别, 不断更新H(s):从s到达目标的估计代价,且将每走一步的权值加入了计算,而不仅仅只是启发函数,这样使得看起来最优的方案,如果其是错误的,到达目标的预估代价会越变越大import mathdirections4 = {'N': (-1, 0), 'E': (0, 1), 'S': (1, 0), 'W': (0, -1)}# directions8 = dict(directions4原创 2021-04-20 14:50:35 · 879 阅读 · 1 评论 -
4.5 联机搜索(online-dfs-agent) --- 实现代码附详细注释
蛮简单的算法,但因为对python不太熟悉,实现过程不是一般的痛苦…联机dfs传统dfs的区别只是要维护一个回溯序列和一个解序列启发式函数使用的是与目标的曼哈顿距离,在一些极限条件下,因为每次只能感知一步,所以效果并不好,但总体情况下还是具有一定优化能力整体流程见书中描述:Python代码:import mathdirections4 = {'W': (-1, 0), 'N': (0, 1), 'E': (1, 0), 'S': (0, -1)}directions8 = dict(dir原创 2021-04-17 15:09:44 · 763 阅读 · 2 评论 -
4.3 与或搜索树(and-or-search) --- 实现代码附详细注释(待完善)
书上好像使用的状态的映射写的, 这样在List上更加直观但是感觉普适性较低,所以本人用多个参量记录状态但是在输出表结构上出现了问题主要的点是不太明白为什么在循环中遇到了一个出现过的节点便直接退出,那不会忽略它后继节点的状态嘛?并且由于刚上手Python几日, 对List还是不太熟, 所以对输出有点困难,基本程序结构是正确的, 可以调试来进行阅读与或搜索树只适用于连续空间离散化的一个时间片进行处理,从而得到一个解序列的算法目的是通过该解序列,计算启发式函数,得出启发值,整体可以通过每个时间片得出的原创 2021-04-15 22:57:56 · 1316 阅读 · 2 评论 -
3.6 八数码问题 - 启发式搜索(A* Search) --- 实现代码附详细注释
参考博客:https://blog.csdn.net/qq_32400847/article/details/51816685#include<cmath> #include<queue> #include<cstdio> #include<cstring> #include<iostream>#include<algorithm> using namespace std; int Hash[15]原创 2021-04-12 17:14:48 · 252 阅读 · 0 评论 -
4.1 八皇后问题 - 遗传算法(genetic-algorithm) --- 实现代码附详细注释
久闻遗传算法大名,算法实现的好有趣书上讲解十分详细且精简,所以不进行赘述了,建议直接看书上介绍遗传算法并不保证你能获得问题的最优解,但是使用遗传算法的最大优点在于你不必去了解和操心如何去“找”最优解。而只要简单的“否定”一些表现不好的个体就行了。C++实现代码:#include <iostream>#include <time.h>#include <stdlib.h>#include <algorithm>#include <cm原创 2021-04-14 16:29:28 · 329 阅读 · 0 评论 -
4.1 八皇后问题 - 传统dfs,爬山法,首选爬山法,模拟退火 --- 实现代码附详细注释
传统解法 - 广度优先搜索(DFS):#include <iostream>#include <cstdio>using namespace std;#define ll long longconst int maxn = 200005;const int INF = 0x3f3f3f;int n,a[50],ans = 0;bool vis[3][50];int cnt = 0;void dfs(int i) { ++cnt; if(i ==原创 2021-04-13 23:55:51 · 756 阅读 · 0 评论 -
0-1背包问题 -- 动态规划,分支界限
d[i][j] 为选择体积编号为i-n的物体放如容量为j的背包中的最大重量#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int maxn = 10005;const int INF = 0x3f3...原创 2020-05-06 15:09:20 · 305 阅读 · 0 评论 -
3.4.5 迭代加深的深度优先搜索(iterative-deepening search) --- 实现代码附详细注释
用链式前向星或者邻接表存图会更加方便的 懒得改了就这样吧 注释之后有时间补上因为dfs是相同代价搜索 所以路径代价没有用处import pandas as pdimport sysfrom pandas import Series, DataFrame # 城市信息:city1 city2 path_cost_city_info = None # 按照路径消耗进行排序的FIFO,低路径消耗在前面# 优先队列_frontier_priority = [] # 节点数据结构...原创 2021-04-07 15:23:51 · 2217 阅读 · 1 评论 -
3.4.2 一致代价搜索 (uniform-cost search) --- 实现代码附详细注释
import pandas as pdfrom pandas import Series, DataFrame # 城市信息:city1 city2 path_cost_city_info = None # 按照路径消耗进行排序的FIFO,低路径消耗在前面# 优先队列_frontier_priority = [] # 节点数据结构class Node: def __init__(self, state, parent, action, path_cost): ...原创 2021-04-03 18:26:09 · 1907 阅读 · 1 评论 -
On Average They‘re Purple (bfs求最短路)
题目链接:https://ac.nowcoder.com/acm/contest/12606/H由分析得所求颜色变化数为最短路径上步数减一利用bfs求最短路径#include <iostream>#include <cstdio>#include <cmath>#include <vector>#include <queue>using namespace std;#define ll long longconst int IN原创 2021-03-08 19:43:45 · 214 阅读 · 0 评论 -
蓝桥杯 九宫幻方(dfs)
问题描述 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。三阶幻方又被称作九宫格,在小学奥数里有一句非常有名的口诀:“二四为肩,六八为足,左三右七,戴九履一,五居其中”,通过这样的一句口诀就能够非常完美的构造出一个九宫格来。4 9 2 3 5 7 8 1 6有意思的是,所有的三阶幻方,都可以通过这样一个九宫格进行若干镜像和旋转操作之后得到。现在小明准备将一个三阶幻原创 2021-03-04 20:59:44 · 375 阅读 · 1 评论 -
蓝桥11CJava I.作物杂交(dfs)
试题 I: 作物杂交时间限制: 1.0s 内存限制: 512.0MB本题总分:25 分【问题描述】作物杂交是作物栽培中重要的一步。已知有 N 种作物 (编号 1 至 N ),第i 种作物从播种到成熟的时间为 Ti。作物之间两两可以进行杂交,杂交时间取两种中时间较长的一方。如作物 A 种植时间为 5 天,作物 B 种植时间为 7 天,则 AB 杂交花费的时间为 7 天。作物杂交会产生固定的作物,新产生的作物仍然属于 N 种作物中的一种。初始时,拥有其中 M 种作物的种子 (数量无限,可以支持多次杂交原创 2021-03-02 20:26:18 · 1512 阅读 · 1 评论 -
蓝桥杯 分考场(暴力dfs - 着色问题)
资源限制时间限制:1.0s 内存限制:256.0MB问题描述 n个人参加某项特殊考试。 为了公平,要求任何两个认识的人不能分在同一个考场。 求是少需要分几个考场才能满足条件。输入格式 第一行,一个整数n(1<n<100),表示参加考试的人数。 第二行,一个整数m,表示接下来有m行数据 以下m行每行的格式为:两个整数a,b,用空格分开 (1<=a,b<=n) 表示第a个人与第b个人认识。输出格式 一行一个整数,表示最少分几个考场。样例输入5原创 2021-03-03 20:46:56 · 147 阅读 · 1 评论