`
ansjsun
  • 浏览: 203806 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

算法实现系列第四章.启发式搜索_A*搜索

阅读更多

..很郁闷启发式搜索和A*搜索.自己对照文档写了下..发现和之前学的有出入...算了先写这个吧..等我回去翻翻笔记...如果有问题再来补充..明白的同学可以直接拍砖...

 

下面我们对这个图进行..最短路径的查

 

package algorithm;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;

/**
 * A* 搜索见得的java例子,也是启发式搜索.和我映像里有点出入...
 * 
 * @author ansj
 * 
 */
public class HeuristicSearching {
	public static void main(String[] args) {
		// 设置节点
		Node v1 = new Node("v1", 0);
		Node v2 = new Node("v2");
		Node v3 = new Node("v3");
		Node v4 = new Node("v4");
		Node v5 = new Node("v5");
		Node v6 = new Node("v6");

		// 设置关联关系
		v1.hm.put(v2, 40);
		v1.hm.put(v3, 30);
		v1.hm.put(v4, 20);
		v1.hm.put(v5, 10);

		v2.hm.put(v6, 10);

		v3.hm.put(v2, 2);
		v3.hm.put(v6, 15);

		v4.hm.put(v2, 15);
		v4.hm.put(v3, 6);

		v5.hm.put(v4, 15);

		openNode(v1);

		System.out.println(v1);
		System.out.println(v2);
		System.out.println(v3);
		System.out.println(v4);
		System.out.println(v5);
		System.out.println(v6);

	}

	private static List<Node> open = new ArrayList<Node>();

	private static void openNode(Node from) {
		// TODO Auto-generated method stub

		Node temp = null;
		Integer pathWeight = null;
		if (from == null) {
			return;
		}
		for (Entry<Node, Integer> entry : from.hm.entrySet()) {
			temp = entry.getKey();
			// 如果此节点已经关闭.则忽略
			if (temp.close) {
				continue;
			}
			pathWeight = entry.getValue();
			if (temp.min > from.min + pathWeight) {
				temp.min = pathWeight + from.min;
			}
			open.add(temp);
		}
		// 每次关闭掉路径最短的节点
		Node nodeMin = findAndRemoveMinNode();
		if(nodeMin!=null){
			openNode(nodeMin);
		}

	}

	private static Node findAndRemoveMinNode() {
		// TODO Auto-generated method stub
		Node node = null;
		for (int i = 0; i < open.size(); i++) {
			if (node == null) {
				node = open.get(i);
			} else if (open.get(i).min < node.min) {
				node = open.get(i);
			}
		}
		open.remove(node) ;
		return node;
	}

	// 节点对象
	private static class Node {
		// 节点名称
		private String name;
		private boolean close = false;
		// 最短的路径
		private int min = Integer.MAX_VALUE;
		// 可以到达的节点及其长度
		private HashMap<Node, Integer> hm = new HashMap<Node, Integer>();

		private Node(String name) {
			this.name = name;
		}

		private Node(String name, Integer pathWeight) {
			this.name = name;
			this.min = pathWeight;
		}

		public String toString() {
			return this.name + ":" + this.min;
		}
	}
}
 

 

 

 

 

 

 

  • 大小: 48 KB
分享到:
评论

相关推荐

    头歌启发式搜索算法参考答案

    A* (A-Star) 是一种常用的路径搜索算法,广泛应用于游戏开发和其他需要寻找最优路径的场景中。该算法结合了 Dijkstra 算法的广度优先特性和贪婪最佳优先搜索算法的最佳优先特性,能够有效地找到两点之间的最短路径。...

    A*算法实现

    A* 算法结合了最佳优先搜索(Best-First Search)和Dijkstra算法的优点,通过引入启发式信息来有效减少搜索空间,提高路径搜索效率。 算法的核心在于它使用一个评估函数`f(n)`来决定节点的优先级,这个函数由两部分...

    A*算法入门

    A*算法通过结合启发式搜索策略,能够在复杂的环境中快速找到一条接近最优的路径。 #### 三、关键概念 1. **搜索空间**:通常将问题所在的环境抽象成一个由节点组成的网络,每个节点代表环境中的一个位置。在本文的...

    A星算法求解旅行商TSP问题

    A星算法是一种启发式搜索算法,结合了广度优先搜索和贪心算法的特点,用于寻找图中两点间最短路径。其核心思想是在搜索过程中利用启发式信息来指导搜索方向,提高搜索效率。 **算法描述**: 1. **状态表示**: - **...

    7、省选+NOI-第七部分 计算几何_2020.08.27.pdf

    3. **启发式搜索(A*)**:结合启发式函数提高搜索效率。 4. **迭代加深搜索(IDA*)**:逐步增加深度限制以减少内存消耗。 5. **随机化搜索**:利用随机性解决问题。 ### 七、其他算法 1. **STL**:标准模板库的使用...

    c ACM必须掌握的算法.doc

    10. **双向广度搜索**、**A*算法**及**最小耗散优先**:高效寻找目标路径的启发式搜索策略。 三、图论及其他 1. **路径问题**:如0/1边权最短路径、非负边权的Dijkstra算法等。 2. **传递闭包**:用于计算图中的...

    图搜索的通用算法

    1. **A*算法**:这是一种常用的启发式搜索算法,它结合了盲目搜索和启发式搜索的优点,旨在寻找最优路径。 #### 三、A*算法详解 A*算法的核心在于其估价函数\( f(n) = g(n) + h(n) \)的设计,其中: - \( g(n) \)...

    多机调度问题贪心算法是什么以及学习多机调度问题贪心算法的意义

    3. **启发式方法**:虽然贪心算法不能保证得到全局最优解,但作为启发式方法,它能够提供一种近似最优解决方案,为复杂问题的求解提供了一个合理的起点。 4. **资源优化**:通过合理地分配任务和资源,贪心算法能够...

    八数码问题求解,要求:设计估价函数,给出算法伪代码,并采用c或python编程实现,演示A算法的搜索过程,代码要适当加注释,实验

    **A*算法** 是一种启发式搜索算法,它的主要特点是在搜索过程中使用估价函数`f(n)`来指导搜索方向,`f(n)`是由两部分组成的:实际路径代价`g(n)`(从初始状态到当前节点n的实际代价)和启发式函数`h(n)`(从当前节点...

    A* findingpath

    A* 算法结合了Dijkstra算法的全局最优性和Greedy最佳优先搜索算法的效率,通过引入启发式函数来指导搜索,以减少计算量并提高性能。 **算法基础** 1. **节点与边**:在A* 算法中,我们通常将路径表示为一系列节点...

    A星算法matlab源码及详细注释.doc

    根据提供的文档信息,本文将对A星算法的MATLAB实现及其关键步骤进行详细的解析与解释。...A星算法通过结合实际成本和启发式成本,能够在复杂环境中高效地寻找最优路径,广泛应用于机器人导航、游戏AI等领域。

    遗传算法5.ppt

    遗传算法是一种启发式搜索算法,它模仿自然界中的进化过程来寻找优化问题的解决方案。本章节将详细介绍遗传算法的基本概念及其在随机优化搜索中的应用。 1. **个体与种群**: - **个体**:指在解决问题时,针对...

    人工鱼群算法源代码

    人工鱼群算法是一种基于自然启发式原理的优化算法,通过对鱼类行为的模拟,能够在复杂的问题空间中寻找到较好的解决方案。通过对上述代码的解析,我们可以更深入地理解AFSA的工作机制及其在实际应用中的局限性。

    人工鱼群算法_人工鱼群算法原理_人工鱼群_matlab_源码

    总结来说,人工鱼群算法是一种启发式优化方法,通过模拟鱼类的集体行为来寻找复杂问题的最优解。在MATLAB中,通过设计合适的个体行为规则和全局优化策略,我们可以实现高效的人工鱼群算法,解决实际问题。不断研究和...

    K-MEANS算法(K均值算法).doc

    2. **使用其他启发式方法初始化**:比如K-Means++算法,它通过特定的规则选择初始中心点,从而降低算法对初值的依赖。 综上所述,K-Means算法作为一种经典的聚类方法,在许多领域都有着广泛的应用,但同时也存在...

    A*算法的实例最优路径搜寻

    A*(A-star)算法是一种在图形搜索中用于找到从起始节点到目标节点最优路径的启发式搜索算法。这个算法结合了Dijkstra算法的最短路径保证和Greedy最佳优先搜索的速度,通过一个评估函数来指导搜索过程,使得搜索更...

    ACMer 要学的知识

    3. **启发式搜索**:如A*算法,结合实际问题的启发信息找到近似最优解。 4. **DLX**: Dancing Links 算法,用于解决0-1背包问题等组合优化问题。 **七、动态规划** 1. **动态规划概念**:通过将大问题分解为子问题...

    人工智能技术导论(廉师友)考试复习重点总结.docx

    - **启发式搜索**:利用特定的信息或启发式函数来引导搜索,提高效率。 #### 第四章:遗传算法与神经网络 ##### 一、遗传算法的基础概念 1. **遗传操作**: - **选择**:根据适应度选择个体。 - **交叉**:两...

    人工智能试卷

    **解析:**AO\*算法是一种适用于非确定性问题求解的启发式搜索算法。它分为两部分:一个是搜索过程,即寻找解的路径;另一个是评估过程,即利用启发式信息评估解的质量。 **4. 机器学习的学习系统结构模型由环境、_...

Global site tag (gtag.js) - Google Analytics