用于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个整 ...
随机推荐
- Lua-C交互函数
lua_gettable(lua_State * , tableIndex) //获取表的在key位置的值 过程:tableIndex为表在栈的位置,例:-2为第二个位置 , 此时会弹(出)栈作为参数 ...
- Cocos2dx开发(3)——Cocos2dx打包成APK,ANT环境搭建
前面cocos2dx的运行环境(Android SDK,JDK,),最后Cocos2dx的APK的打包环境,最运行环境上再加ANT环境就好了 1.ANT下载配置 官网下载:http://ant.apa ...
- js submit的問題
form 里面有input name="submit"的时候 $('#seachform').submit();不起作用
- Java学习----对象间的继承
继承:子类可以使用父类非私有的成员变量和方法 public class Father { public String name; public String bloodType; private in ...
- js事件练习--登录界面演示。
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Bootstrap_网格系统
首先添加CSS样式: [class *= col-]{ background-color: #eee; border: 1px solid #ccc; } [class *= col-] [class ...
- WordPress批量修改文章内容、URL链接、文章摘要
通过SQL语句来批量修改wordpress博客内容,文章中所有语句都使用默认的wp_表前缀,如果您的数据表前缀不是wp_则需要在语句中作相应更改. 方法/步骤 批量修改文章内容 如果您想替换之前写 ...
- mysql数据类型——浮点和定点型
mysql数据类型 字节 含义 float(m,d) 4字节 单精度浮点型,8位精度,m是十进制数字的总个数,d是小数点后面的数字个数 double(m,d) 8字 ...
- js+dom开发第十六天
一.css常用标签及页面布局 1.常用标签 position(定位) z-index(定位多层顺序) background(背景) text-align(针对字符自动左右居中) margin(外边距) ...
- Django Web在Apache上的部署
1. 安装配置Apache 2. 安装wsgi_mod模块 3. 开放相应端口 vim /etc/sysconfig/iptables # Firewall configuration written ...