用于A*的 二叉堆 AS3实现
package
com.copper.isometric.pathing
{
import
flash.sampler.startSampling;
/**
* A*中用于开放列表的 二叉堆
* @author vanCopper
*
*/
public
class
BinaryHeap
{
private
var
struct:
Array
= [-
1
];
private
var
compareFunc:Function =
function
(x:
Object
,y:
Object
):
Boolean
{
if
(y ==
null
)
return
true
;
return
x < y;
};
/**
*
* @param compareFunc n
*
* function (x:Object,y:Object):Boolean
* {
* return x < y;
* };
*/
public
function
BinaryHeap(compareFunc:Function =
null
)
{
if
(compareFunc !=
null
)
this
.compareFunc = compareFunc;
}
/**
* 向二叉堆添加新元素
* @param value
*
*/
public
function
insert(value:
Object
):
void
{
if
(value ==
null
)
return
;
var
len:
int
= struct.length;
struct[len] = value;
var
parent:
int
= len >>
1
;
while
(parent >=
1
&& compareFunc(struct[len],struct[parent]))
{
var
temp:
Object
= struct[parent];
struct[len] = temp;
struct[parent] = value;
len = parent;
parent = parent >>
1
;
}
}
/**
* 删除二叉堆的第一个元素 并返回该元素
* @return
*
*/
public
function
shift():
Object
{
var
n:
int
=
1
;
var
shiftObj:
Object
= struct[n];
if
(shiftObj ==
null
)
return
null
;
var
len:
int
= struct.length;
struct[n] = struct[len -
1
];
struct.length --;
var
moveObj:
Object
= struct[n];
var
left:
int
= n <<
1
;
var
right:
int
= left +
1
;
var
endLen:
int
= struct.length;
while
(right < endLen)
{
var
min:
int
= compareFunc(struct[left],struct[right]) ? left : right;
if
(compareFunc(moveObj,struct[min]))
{
// 停止 二叉堆完成
break
;
}
else
{
var
tempObj:
Object
= struct[min];
struct[min] = moveObj;
struct[n] = tempObj;
n = min;
left = n <<
1
;
right = left +
1
;
}
}
return
shiftObj;
}
public
function
get
length():
int
{
return
struct.length;
}
public
function
toString():
String
{
return
struct.toString();
}
}
}
用于A*的 二叉堆 AS3实现的更多相关文章
- 数据结构 之 二叉堆(Heap)
注:本节主要讨论最大堆(最小堆同理). 一.堆的概念 堆,又称二叉堆.同二叉查找树一样,堆也有两个性质,即结构性和堆序性. 1.结构性质: 堆是一棵被完全填满的二叉树,有可能的 ...
- PriorityBlockingQueue优先队列的二叉堆实现
转载请注明原创地址http://www.cnblogs.com/dongxiao-yang/p/6293807.html java.util.concurrent.PriorityBlockingQu ...
- 笔试算法题(46):简介 - 二叉堆 & 二项树 & 二项堆 & 斐波那契堆
二叉堆(Binary Heap) 二叉堆是完全二叉树(或者近似完全二叉树):其满足堆的特性:父节点的值>=(<=)任何一个子节点的键值,并且每个左子树或者右子树都是一 个二叉堆(最小堆或者 ...
- 二叉堆 及 大根堆的python实现
Python 二叉堆(binary heap) 二叉堆是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树.二叉堆满足堆特性:父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子 ...
- 纯数据结构Java实现(6/11)(二叉堆&优先队列)
堆其实也是树结构(或者说基于树结构),一般可以用堆实现优先队列. 二叉堆 堆可以用于实现其他高层数据结构,比如优先队列 而要实现一个堆,可以借助二叉树,其实现称为: 二叉堆 (使用二叉树表示的堆). ...
- 【nodejs原理&源码杂记(8)】Timer模块与基于二叉堆的定时器
[摘要] timers模块部分源码和定时器原理 示例代码托管在:http://www.github.com/dashnowords/blogs 一.概述 Timer模块相关的逻辑较为复杂,不仅包含Ja ...
- 【nodejs原理&源码杂记(8)】Timer模块与基于二叉堆的定时器
目录 一.概述 二. 数据结构 2.1 链表 2.2 二叉堆 三. 从setTimeout理解Timer模块源码 3.1 timers.js中的定义 3.2 Timeout类定义 3.3 active ...
- 二叉堆 与 PriorityQueue
堆在存储器中的表示是数组,堆只是一个概念上的表示.堆的同一节点的左右子节点都没有规律. 堆适合优先级队列(默认排列顺序是升序排列,快速插入与删除最大/最小值). 数组与堆 堆(完全二叉树)(构造大顶堆 ...
- AC日记——二叉堆练习3 codevs 3110
3110 二叉堆练习3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 给定N(N≤500,000)和N个整 ...
随机推荐
- TestNG目录
1 - 简介 2 - 注解 3 - testng.xml 4 - 执行 TestNG 5 - 测试方法, 测试类 和 测试组 5.1 - 测试方法 5.2 - 测试组 5.3 ...
- Ajax之HTTp请求
71.Ajax的基础概念 *运用html和css来实现页面表达信息 *运用XMLHttpRequest和web服务器进行数据的异步交换 *运用JavaScript操作DOM来实现动态局部刷新 2 ...
- jQuery 源码基本框架
抽丝剥茧, 7000+ 行的 jQuery 源码基本可以概括为以下的伪代码 (function (window, undefined) { //将 document 封装成 jQuery 对象并缓存 ...
- MOS管(场效应管)导通条件
场效应管的导通与截止由栅源电压来控制,对于增强型场效应管来说,N沟道的管子加正向电压即导通,P沟道的管子则加反向电压.一般2V-4V就可以了. 但是,场效应管分为增强型(常开型)和耗尽型(常闭型 ...
- getJSON回调函数不执行问题?
利用getJSON异步请求时,回调函数不执行,不知道是什么问题? php 返回数据 header("Content-type:text/json"); echo json_enco ...
- ubuntu 实现界面切换
1.按ALT+CTRL+F1切换到字符界面(Linux实体机) 如果是VMware虚拟机安装的Linux系统,则切换到字符界面的时候需要以下操作 按下ALT+CTRL+SPACE(空格),ALT+CT ...
- 接受POST表单传过来的信息 可以用foreach循环进行遍历操作
if(isset($_POST['Goods'])){ foreach($_POST['Goods'] as $_k =>$_v){ ...
- objective-c(初始化)
objective-c(初始化) 创建对象 (编程语言 Objective-C 2.0) 1.类对象与实例化 类的定义完成后,编译器在内存中自动生成唯一的类对象,实例对象都是通过调用类对象的类方法生成 ...
- Children of the Candy Corn
poj3083:http://poj.org/problem?id=3083 题意:给你一个迷宫,然后给你一个起点和终点,现在给你种规则,一种是先向左,无法向左则向前,无法向前则向右,否则则向后,另外 ...
- Java switch-case
首先从原理上来阐述这个问题: switch(表达式){case 常量表达式1:语句1;....case 常量表达式2:语句2;default:语句;}1.default就是如果没有符合的case就执行 ...