关于8数码问题的启发函数讨论.

hhttllkkk 2009-11-25 11:12:26
小弟才疏学浅.最近因此问题以茶饭不思了.因此特来求教!!
想必8数码问题在这就不用描述了...
小弟打算使用启发搜索解决此问题.然而当我把框架程序写完后,突然发现我并没有想出理想的启发函数
小弟翻书后发现主要存在两种普遍的启发函数:
1:最简单的...同过判断目前状态与目标状态间布局的不同给出启发值
2:把当前状态中每一个位置的数字移动到他目标位置所需的步数求和.给出启发值
但是小弟发现当我使用这两种启发函数时..经常出现启发式搜索的结果远差与广度优先..
因此小弟特想请教各位高人..推荐一些优秀的启发函数..使得搜索的效率得到提高..
跪谢...ORZ
...全文
409 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gnefuil 2009-12-18
  • 打赏
  • 举报
回复
启发函数都是具体问题具体分析,没有万能的函数,只有从问题的特点出发拍拍脑袋想出来。能满足一些条件的,可以叫做A*搜索。
广度优先其实也是最简单的启发式搜索,它有最简单的启发函数,就是每个结点的深度。对于8数码问题来说,最简单的方法就是把楼主说的第2条加上结点的深度,作为估价函数,然后每次寻找值最小的进行扩展。对于这个估价函数,也可以在两个值上再加上权重,通过调整权重得到更好的效果。
FancyMouse 2009-11-26
  • 打赏
  • 举报
回复
启发函数要是配合A*用的话结果肯定对只是效率有差别。结果不对说明要么启发函数设计错了(用A*的话要有那几个不等式),要么程序写错了。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧