用于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个整 ... 
随机推荐
- 文字和表单(checkbox/radio)元素垂直对齐方法,兼容Firefox和IE。
			这几天在做表单时总会碰到复选框(checkbox)和单选框(radio)与文字不对齐的问题,要不是checkbox上浮了,要不是文字上浮.在前端开发过程中,单(复)选框和它们后面的提示文字在不进行任何 ... 
- VS  编程常见错误及解决方法
			1. VS2013 无法打开包括文件:“cv.h"等一些头文件 解决方法: cv.h是build\include文件夹下的头文件,所在文件夹位置是D:\Program Files (x86) ... 
- set,multiset容器类型
			set和multiset会根据特定的排序准则,自动将元素排序.两者不同处在于multiset允许元素重复而set不允许. 一.集和多集(set 和multiset 容器类) 在使用set和multis ... 
- Cocos2dx开发(3)——Cocos2dx打包成APK,ANT环境搭建
			前面cocos2dx的运行环境(Android SDK,JDK,),最后Cocos2dx的APK的打包环境,最运行环境上再加ANT环境就好了 1.ANT下载配置 官网下载:http://ant.apa ... 
- Struts2中的链接标签 <s:url>和<s:a>---在action中获取jsp表单提交的参数(转)
			转自:http://sgl124764903.iteye.com/blog/444183 1.普通链接 Web程序中最普通的应用是链接到其他页面,下面看Welcome.jsp. <%@ page ... 
- windowsphone 中CollectionViewSource和ObservableCollection的使用
			功能描述:一级菜单省份 联动显示省份下的城市 直接上代码 public class City { public string Num { get; set; } public string Name ... 
- Django socketio 安装
			如果你还没有安装过 gevent,首先需要安装 libevent, 编译安装 libevent 需要安装 Pyhton 开发库. 在Debain上可以运行如下指令: $ sudo apt-get in ... 
- CodeForces 554B(扫房间)
			CodeForces 554B Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u ... 
- DevOps - Development And Operations
			简介: 研发运维一体化 相关资料: 关于DevOps你必须知道的11件事 我眼中的DevOps DevOps 门户 docker for dotnet系列 docker4dotnet #1 前世今生 ... 
- NSSet与NSArray区别
			NSSet与NSArray区别 NSSet到底什么类型,其实它和NSArray功能性质一样,用于存储对象,属于集合: NSSet , NSMutableSet类声明编程接口对象,无序的集合, ... 
