搜索 —— 启发式搜索
【概述】
启发式搜索算法,就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。
有时我们会遇到这样的一类题:题目描述的是一道时间复杂度很高的 NP 问题,我们要找到其中的最优解,显然不可能在短时间内找到最优解。
此时我们可以利用启发式搜索算法,来进行求解。
在程序设计竞赛中,启发式搜索的题目并不是很多,但启发式搜索算法在数据建模竞赛中应用的比较广泛。
【随机数据生成】
在开始学习启发式搜索算法之前,首先了解一下随机数据生成。
在 C++ 中,随机数据生成是利用 <cstdlib> 来调用 rand() 与 srand() 函数,来生成伪随机数序列,其中:
- rand() 函数:返回 0~RAND_MAX 间的随机整数
- srand(unsigned int seed):根据 seed 的值,来初始化伪随机数序列
在 windows 环境下,RAND_MAX=32767,当利用 srand() 初始化时,如果 seed 的值不变,那么利用 rand() 生成的随机整数将一直相同,因此,我们需要利用一个时刻改变的变量对其进行初始化
在 <ctime> 中,有一个 time(time_t *t) 函数,其可以获取当前系统时间,因此,在实际应用中,常利用以下方式来生成随机序列:
srand(time(0));
int num=rand();
cout<<num<<endl;
【常见的启发式搜索算法】
常见的启发式搜索算法有:A* 算法、蚁群算法、遗传算法、模拟退火、禁忌搜索、爬山法等,但在程序设计竞赛中,常用的是 A*算法、模拟退火、爬山法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?