通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

A算法和A*算法的区别是什么

A算法和A*算法的区别是:A算法由f(n)=g(n)+h(n)俩个因素决定,g(n)是这一步的代价函数,h(n)是这一步的预估函数;对于A*算法来说,评判函数也是f(n)=g∗(n)+h∗(n)这个,只不过加了约束条件,g∗(n)>0,h∗(n)<=任意h(n)。

一、A算法和A*算法的区别

A算法由f(n)=g(n)+h(n)俩个因素决定,g(n)是这一步的代价函数,h(n)是这一步的预估函数;对于A*算法来说,评判函数也是f(n)=g∗(n)+h∗(n)这个,只不过加了约束条件,g∗(n)>0,h∗(n)<=任意h(n)。

以上只不过是定义,对于一个实例来说,h(n)很多种,h(n)只是估值函数的一个集合,有各种方法h1(n)h2(n)h3(n)…,取其中任意一个方法带入上述公式,组成评判函数,都是A算法的实现,现在取从集合中一个函数h∗(n),使得它比集合中任意的函数都优异,这样的算法叫A*算法。也就是A*算法是优异的A算法,(因为估值函数优异)。

A搜索算法

我们通过一个八数码的例子来解释A搜索算法。

问题描述:

3×3九宫棋盘,放置数码为1 -8的8个棋牌,剩下一个空格,只能通过棋牌向空格的移动来改变棋盘的布局。

要求:根据给定初始布局(即初始状态)和目标布局(即目标状态),如何移动棋牌才能从初始布局到达目标布局,找到合法的走步序列。

问题讨论:

A搜索算法如何解决八数码问题呢?还记得启发式算法离不开估价函数(f(x)=g(x)+h(x)),那么对于八数码问题我们赋予估价函数实际意义,g(x)是当前被考察和扩展的节点n在搜索图中的节点深度,h(x)是节点X与目标状态Sg相比较,不在目标位的棋牌个数(不包含空格)。

那么初始状态的f(x)=0+4=4。

在解决的过程中,我们还要借助OPEN表,CLOSE表。

OPEN表中存放还未扩展的节点,CLOSE表中存放已扩展的节点。

解题流程:

将初始节点装入OPEN表

如果OPEN表为空,则失败,退出;否则,取出OPEN表中名列前茅个节点,加入到CLOSE表中。

如果节点是目标节点,则成功,退出。

如果节点可扩展,将节点的扩展节点加入到OPEN表中,将OPEN表按照估价函数由小到大排列;

否则跳转第2步。

A*搜索算法

我们同样用八数码问题来解释A* 算法。

A*算法中估价函数的定义:g(x)是当前被考察和扩展的节点n在搜索图中的节点深度,h(x)是节点X与目标状态Sg相比较,每个错位棋牌在假设不受阻拦的情况下,移动到目标状态相应位置所需移动次数的总和(不包含空格)。

A*算法比A算法更有效率。

延伸阅读:

二、JavaBean的使用

在jsp中我们可以使用动作标签来访问JavaBean,也可以使用脚本代码访问,在这里我们介绍名列前茅种。

主要有三种动作标签

  • <jsp:useBean>:声明并创建对象。
  • <jsp:setProperty>:设置指定属性的值。
  • <jsp:getProperty>:获取指定属性的值。

使用的时候,还要注意他们的声明格式:

<jsp:useBean id="对象名" class="类名" scope="有效范围"/>

<jsp:setProperty name=" 对象名" property="属性名" value="指定值"/>

<jsp:getProperty name=" 对象名" property=" 属性名"/>

我们接着上面的例子再接着举几个例子。

<jsp:useBean id="user1" class="beans.User" scope="session"/>

这句话的意思是,定义一个User类的对象user1,范围是session。

类名必须使用完全限定类名。

Scope属性有page, requese, session, application四个可选值,分别代表页面,请求,会话,应用4种范围。

<jsp:setProperty name="user1" property="name" value="苍井空"/>

这句话的意思是,设定user1对象的name属性值为"苍井空"。

<jsp:setProperty>还有几种变型:

  1. <jsp:setProperty name=" beanname " property=" propertyname" />
  2. <jsp:setProperty name=" beanname" property=" propertyname" param=" paramname"/>
  3. <jsp:setProperty name=" beanname" property="*" />

这几种变型主要处理form表单提交时的属性赋值。

  1. 将propertyname的值提交给beanname中的属性名称相同的属性。
  2. 将请求参数名称为paramname的值提交给propertyname属性。
  3. 将所有的属性与请求参数关联,实现自动复制并自动转换数据类型。

以上就是关于A算法和A*算法的区别的内容希望对大家有帮助。

相关文章