深度优先算法,广度优先算法,hill climbing,贪心搜索,A*算法,启发式搜索算法是什么,比起一般搜索法算法有什么区别
深度优先算法(Depth-First Search, DFS)
深度优先搜索是一种用于遍历或搜索树或图的算法。它沿着树的深度遍历树的节点,尽可能深地搜索树的分支。当节点v的所在边都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,直到所有节点都被访问为止。深度优先搜索是一个递归算法,它利用了后进先出的栈结构,在图的遍历中特别有效。
特点与应用:
内存消耗较小:由于只需存储一条从根节点到当前节点的路径。
找到解后停止:在搜索到解后,可以立即停止,不需要遍历整个图。
可能陷入死循环:在遍历图时,如果不记录已经访问过的节点,可能会陷入无限循环的情况。
不保证最短路径:深度优先搜索不保证找到的路径是最短的。
应用场景:如解决迷宫问题、排列组合问题、拓扑排序、解决连通性问题等。
在栈内完成,先进后出,探索完的节点入栈,当完成这一次的探索重新进入到这个节点时出栈,再次探索另一个节点时再次入栈
广度优先算法(Breadth-First Search, BFS)
广度优先搜索是最简便的图的搜索算法之一,属于盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。它从图的某个顶点V0开始,依次访问V0的各个未被访问过的邻接点,然后从这些邻接点出发,再依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到。这一过程类似于树的按层次遍历。
特点与应用:
找到最短路径:在无权图中,广度优先搜索可以保证找到从源点到目标点的最短路径。
遍历顺序确定:按层次依次访问,各层访问顺序是唯一的。
应用场景:如编写国际跳棋AI、计算最少编辑多少个地方就可将错拼的单词改成正确的单词、根据你的人际关系网络找到关系最近的医生等。
先进先出,访问的节点完全展开访问后出队,以此展开后边的节点,已经访问的节点不再继续访问
Hill Climbing(爬山算法)
爬山算法是一种局部择优的方法,属于启发式搜索算法。它从当前的节点开始,和周围的邻居节点的值进行比较,如果当前节点不是最大的,就用最高的邻居节点来替换当前节点,从而实现向“山峰”的高处攀爬的目的。如此循环直到达到最高点。
特点:
局部最优:容易陷入局部最优解,而非全局最优解。
避免遍历:通过启发选择部分节点,提高搜索效率。
应用场景:适用于对最优解要求不是非常严格,且搜索空间不是很大的情况。
贪心搜索(Greedy Search)
贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。它不保证会得到最优解,但在某些问题中,贪心算法的解足够接近最优解或者确实是最优解。
特点:
简单直观:通常直接且易于实现。
效率高:在很多情况下,贪心算法的运行时间较短。
无记忆:每次选择都是独立的,不依赖于之前的状态。
不保证最优解:在某些问题中,贪心选择可能导致非最优的全局解。
背包问题
A*算法
A算法是一种启发式搜索算法,它结合了最佳优先搜索和Dijkstra算法的特点。A算法通过维护一个优先队列(通常是最小堆),并根据启发式函数(如g(n) + h(n),其中g(n)是从起点到当前点的实际距离,h(n)是从当前点到目标点的估计距离)来评估节点的优先级。A*算法能够找到从起点到终点的最短路径,并且比纯粹的启发式搜索算法(如爬山算法)更加可靠和高效。
特点:
找到最短路径:在多数情况下,A*算法能够找到从起点到终点的最短路径。
启发式搜索:利用启发式函数来评估节点的优先级,提高搜索效率。
应用场景:如路径规划、游戏AI、图形学中的光照计算等。
启发式搜索算法(Heuristic Search Algorithm) 是一种利用启发性信息来指导搜索过程的算法。这种启发性信息通常是有利于尽快找到问题解的有价值信息,能够显著减少搜索空间的大小,提高搜索效率。
启发式搜索算法的基本特点
启发性信息:启发式搜索算法利用启发性信息来评估搜索过程中每个节点的价值,从而决定搜索的方向和顺序。这种信息可以是节点与目标节点之间的估计距离、代价或其他相关指标。
节点选择:在启发式搜索中,节点的选择不是盲目的,而是基于启发性信息进行的。算法会优先扩展那些看起来更有可能通向目标节点的节点。
效率提升:由于利用了启发性信息,启发式搜索算法能够省略大量无用的搜索路径,从而显著提高搜索效率。
与一般搜索算法的区别
搜索策略:
一般搜索算法(如深度优先搜索、广度优先搜索等)通常采用确定性的搜索策略,即按照固定的规则(如先深后广或先广后深)进行搜索。
启发式搜索算法则采用启发式的搜索策略,即根据启发性信息来指导搜索过程,使搜索更加灵活和高效。
节点评估:
一般搜索算法在搜索过程中通常不对节点进行特别的评估,只是简单地按照搜索策略进行遍历。
启发式搜索算法则会对每个节点进行评估,并根据评估结果来决定节点的扩展顺序和搜索方向。
搜索效率:
一般搜索算法在搜索空间较大时,可能会遇到搜索效率低下的问题,因为它们可能会遍历大量无用的节点。
启发式搜索算法由于利用了启发性信息来指导搜索过程,因此能够显著减少搜索空间的大小,提高搜索效率。
结果质量:
一般搜索算法在找到解时通常无法保证解的质量(如是否最优),因为它们只是按照固定的规则进行搜索。
启发式搜索算法虽然也无法保证总是找到最优解(这取决于启发性信息的准确性和问题的复杂度),但在很多情况下能够找到接近最优的解或高质量的解。
适用性:
一般搜索算法适用于搜索空间较小或问题结构较简单的情况。
启发式搜索算法则更适用于搜索空间较大、问题结构较复杂或需要快速找到高质量解的情况。
综上所述,启发式搜索算法通过利用启发性信息来指导搜索过程,显著提高了搜索效率和质量,是现代优化算法和人工智能领域中的重要工具之一。
相关文章:
深度优先算法,广度优先算法,hill climbing,贪心搜索,A*算法,启发式搜索算法是什么,比起一般搜索法算法有什么区别
深度优先算法(Depth-First Search, DFS) 深度优先搜索是一种用于遍历或搜索树或图的算法。它沿着树的深度遍历树的节点,尽可能深地搜索树的分支。当节点v的所在边都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程…...
《python语言程序设计》2018版第8章第14题金融:信用卡号合法性 利用6.29题
一、之前6.29题我做的代码 这是用数字来进行分辨的 is_txt 4383576018402626 #合法def split_the_data_even(vis_n):current_a1 vis_n // 10000a_t1 vis_n % 10000# print("1th", a_t1)a_t2 current_a1 % 10000# print("2th", a_t2)current_a3 curre…...
QT 基础学习
1> 使用绘制事件完成钟表的绘制 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QDebug> #include <QTime> #include <QTimer> #include <QDateTime> //#include <string> #includ…...
【Gephi】可视化教程
此教程专供欣欣向荣及其舍友使用 文章目录 导入数据上色改变布局设置节点大小统计拓扑结构输出图形保存文件 导入数据 点击【文件】-【导入电子表格】 先选择csv格式的network 直接下一步 点击完成 【图的类型】改为“有向的” 点击确认 会弹出报错,直接clos…...
演化式原型开发-系统架构师(六十五)
1快速迭代式的原型开发能够有效控制成本,()是指开发过程中逐步改进和细化原型直到产生目标系统。 A可视化原型开发 B抛弃式原型开发 C演化式原型开发 D增量式原型开发 解析: 原型开发分为两大类:快速原型开发(抛弃…...
初识爬虫4
1.理解代理ip,正向代理和反向代理 2.代理ip分类,根据匿名度分类:透明,匿名,高匿 3.防止频繁向同一个域名发送请求被封ip,需使用代理ip # -*- coding: utf-8 -*- import requestsurl https://www.baidu.comproxies {…...
Golang | Leetcode Golang题解之第387题字符串中的第一个唯一字符
题目: 题解: type pair struct {ch bytepos int }func firstUniqChar(s string) int {n : len(s)pos : [26]int{}for i : range pos[:] {pos[i] n}q : []pair{}for i : range s {ch : s[i] - aif pos[ch] n {pos[ch] iq append(q, pair{ch, i})} e…...
【CanMV K230 AI视觉】 人体检测
【CanMV K230 AI视觉】 人体检测 人体检测 动态测试效果可以去下面网站自己看。 B站视频链接:已做成合集 抖音链接:已做成合集 人体检测 人体检测是判断摄像头画面中有无出现人体,常用于人体数量检测,人流量监控以及安防监控等。…...
解决浏览器自动将http网址转https
删除浏览器自动使用https的方式 在浏览器地址栏输入:chrome://net-internals/#hsts PS:如果是edge浏览器可输入:edge://net-internals/#hsts 在Delete domain security policies搜索框下,输入要删除的域名,然后点击delete 解决方法&#…...
linux邮件配置
1. 非加密邮件配置 cat <<EOF > smtp.sh #!/bin/bash providerqq account3282941991 passwordzqdtygmmndsgb22i3ee echo "Waiting For A Moment..." rpm -qa sendmail &> /dev/null|| yum install sendmail -y >/dev/null echo " set from$…...
基于springboot+vue乒乓球预约管理系统
基于springbootvuemysql实现的乒乓球预约管理系统(源码数据库部署视频) ### 主要技术 SpringBoot、LayUI、Vue、MySQL ### 系统角色 用户、管理员 ### 系统功能 前台: 首页、乒乓球场、公告信息、留言反馈、个人中心 后台: …...
Linux 基础命令-文件权限与所有权
1. 文件权限概述 在Linux中,每个文件和目录都有与之关联的权限和所有权,来控制谁可以访问、修改或执行文件。文件权限与所有权可以防止未经授权的用户对文件进行访问或修改。 1.1 文件权限的组成 每个文件在Linux系统中都有三种类型的权限:…...
气压测试实验(用IIC)
I2C: 如果没有I2c这类总线,连接方法可能会如下图: 单片机所有的通讯协议,无非是建立在引脚(高低电平的变换高低电平持续的时间)这二者的组合上,i2c 多了一个clock线,负责为数据传输打节拍。 (i2…...
C++ lambda闭包消除类成员变量
原文链接:https://blog.csdn.net/qq_51470638/article/details/142151502 一、背景 在面向对象编程时,常常要添加类成员变量。 然而类成员一旦多了之后,也会带来干扰。 拿到一个类,一看成员变量好几十个,就问你怕不…...
等待唤醒机制和阻塞队列
1. 等待唤醒机制 由于线程的随机调度,可能会出现“线程饿死”的问题:也就是一个线程加锁执行,然后解锁,其他线程抢不到,一直是这个线程在重复操作 void wait() 当前线程等待,直到被其他线程唤醒 void no…...
IO多路复用是如何处理多个客户端同时访问一个数据的
1. 原理概述 IO多路复用通过单个线程或进程监听多个文件描述符的状态变化,当某个文件描述符就绪(例如,有数据可读、可写或发生异常)时,线程或进程会收到通知,并对该文件描述符执行相应的IO操作。这种方式显…...
QT中使用UTF-8编码
在Qt中,确保应用程序使用UTF-8编码是非常重要的,尤其是在处理国际化和多语言文本时。以下是一些确保在Qt应用程序中使用UTF-8编码的方法: ### 1. 设置全局默认编码 在应用程序启动时,可以设置全局默认编码为UTF-8。这可以通过调…...
我对 monorepo 的一些思考
我对 monorepo 的一些思考 我对 monorepo 的一些思考 前言它的由来技术选型 管理工具语言与打包调试工具测试框架代码规范与质量控制本地引用与发包替换发包流程Github 相关配置部署 使用手册 功能特性总结如何使用?清除默认的包(可选)模板包介绍 packagesapps 更新…...
Java学习Day41:骑龙救!(springMVC)
springMVC与sevlet都是对应表现层web的,但是越复杂的项目使用SpringMVC越方便 基于Java实现MVC模型的轻量级web框架 目标: 小案例: 1.导入依赖 spring-context: 提供 Spring 框架的核心功能,如依赖注入、事件发布和其他应用上…...
Redis 常用命令总结
文章目录 目录 文章目录 1 . 前置内容 1.1 基本全局命令 KEYS EXISTS 编辑 DEL EXPIRE TTL TYPE 1.2 数据结构和内部编码 2. String类型 SET GET MGET MSET SETNX INCR INCRBY DECR DECYBY INCRBYFLOAT 命令小结 内部编码 3 . Hash 哈希类型 HSET …...
爆火Agent Harness:驯服AI的终极秘籍,三大巨头如何让AI从玩具变工具?
文章深入探讨了Agent Harness在AI落地中的关键作用,指出当前许多Agent应用存在长程任务失忆、遗留代码迷路、生成交付断链、确定性和安全性翻车等问题。文章剖析了Anthropic、OpenAI、LangChain三大巨头的Harness实践,如Anthropic的脚手架和独立评估器解…...
SmallThinker-3B-Preview赋能Java后端:智能客服系统数据库设计
SmallThinker-3B-Preview赋能Java后端:智能客服系统数据库设计 最近在做一个Java后端的智能客服项目,核心是要接入一个轻量级的AI模型——SmallThinker-3B-Preview。模型选好了,代码逻辑也搭得差不多了,但一到数据库设计这块&…...
【技术干货】把 Claude 变成“本地自动化工程师”:Anthropic Computer Use 能力与实战落地指南
摘要 Anthropic 在 Claude Code 中正式引入 Computer Use 能力,让大模型可以直接操作你的桌面应用和浏览器,从“写代码助手”升级为“全栈自动化代理”。本文从原理、典型场景、跨平台替代方案,到如何用统一 OpenAI 兼容 API(基于…...
7大维度测评:2023年开源付费墙绕过工具终极选择指南
7大维度测评:2023年开源付费墙绕过工具终极选择指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字内容访问需求日益增长的今天,选择一款高效可靠的开源…...
嵌入式轻量级任务调度框架cola_os解析与实践
1. 嵌入式轻量级任务调度框架cola_os深度解析在嵌入式开发中,我们经常面临一个经典困境:对于功能简单、实时性要求不高的多任务场景,使用完整的RTOS显得过于臃肿,而裸机轮询又难以维护。今天要介绍的cola_os正是为解决这个问题而生…...
python异常模拟工具类(异常生成工具类)
文章目录创建代码类使用主要是做测试的时候方便,创建代码类 1、新建python文件exception_mock_utils.py,代码为: import random import time from typing import Any, Optionalclass ExceptionMockUtils:"""异常模拟工具类用…...
收藏!小白也能看懂的大模型推理能力训练与未来趋势深度解析
文章讨论了大模型的发展历程,从早期的“读很多书”模式到引入“思考”能力的转变。重点介绍了推理式思考与智能体式思考的区别,以及Qwen团队在模型训练中的经验与挑战。文章指出,未来的重心将从单纯训练模型“思考”转向训练智能体“边想边做…...
3个技巧让Blender对齐效率提升10倍:QuickSnap插件全攻略
3个技巧让Blender对齐效率提升10倍:QuickSnap插件全攻略 【免费下载链接】quicksnap Blender addon to quickly snap objects/vertices/points to object origins/vertices/points 项目地址: https://gitcode.com/gh_mirrors/qu/quicksnap 在三维建模的日常工…...
别再只跑例程了!深入解析ESP32S3的Camera模块:从DVP时序到图像缓冲区的底层逻辑
深入解析ESP32S3的Camera模块:从DVP时序到图像缓冲区的底层逻辑 当你在ESP32S3上成功运行了第一个Camera例程,看到LCD屏幕上显示出模糊的测试图像时,那种成就感可能很快就会被新的疑问取代:为什么图像有时会卡顿?为什么…...
Rust实战:通过DLL注入与IAT Hook技术拦截Windows API调用
1. 为什么需要Hook Windows API? 在Windows系统开发中,Hook技术就像给系统功能安装了一个"监听器"。想象一下,当你点击某个按钮时,原本应该弹出标准对话框,但通过Hook技术,我们可以在这个动作发生…...
