亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rtree.java

?? 一個java實現的R樹
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package rtree;import java.util.*;/** * To create a new RTree use the first two constructors. You must specify the dimension, the fill factor as * a float between 0 and 0.5 (0 to 50% capacity) and the variant of the RTree which is one of: * <ul> *  <li>RTREE_QUADRATIC</li> * </ul> * The first constructor creates by default a new memory resident page file. The second constructor takes * the page file as an argument. If the given page file is not empty, then all data are deleted. * <p> * The third constructor initializes the RTree from an already filled page file. Thus, you may store the * RTree into a persistent page file and recreate it again at any time. * <p> * Created: Tue May 18 12:57:35 1999 * <p> * @author Hadjieleftheriou Marios * @version 1.003 */public class RTree {    public final String version = "1.003";    public final String date = "December 7th 1999";    /** Page file where data is stored. */    protected PageFile file = null;    /** static identifier used for the parent of the root node. */    public static final int NIL = -1;    /** Available RTree variants. */    public static final int RTREE_LINEAR = 0;    public static final int RTREE_QUADRATIC = 1;    public static final int RTREE_EXPONENTIAL = 2;    public static final int RSTAR = 3;    /**      * Creates a memory resident RTree with an empty root node, which is stored in page 0 and has a      * parent identifier equal to NIL. A new memory page file is created and used as a storage manager     * by default.     *     * @param  dimension  The data dimension.     * @param  fillFactor A percentage between 0 and 0.5. Used to calculate minimum number of entries     *                    present in each node.     * @param  capacity   The maximun number of entries that each node can hold.     * @param  type       The RTree variant to use.     */    public RTree(int dimension, float fillFactor, int capacity, int type) {	this(dimension, fillFactor, capacity, new MemoryPageFile(), type);    }    /**      * Creates a new RTree with an empty root node, which is stored in page 0 and has     * a parent identifier equal to NIL. The given page file is used for storing the rtree nodes.     * If the page file is not empty, than all entries will be overwritten.     *     * @param  dimension  The data dimension.     * @param  fillFactor A percentage between 0 and 0.5. Used to calculate minimum number of entries     *                    present in each node.     * @param  capacity   The maximun number of entries that each node can hold.     * @param  file       The page file to use for storing the nodes of the rtree.     * @param  type       The RTree variant to use.     */    public RTree(int dimension, float fillFactor, int capacity, PageFile file, int type) {	if (dimension <= 1) {	    throw new IllegalArgumentException("Dimension must be larger than 1.");	}	if (fillFactor < 0 || fillFactor > 0.5) {	    throw new IllegalArgumentException("Fill factor must be between 0 and 0.5.");	}	if (capacity <= 1) {	    throw new IllegalArgumentException("Capacity must be larger than 1.");	}	if (type != RTREE_QUADRATIC /*&& type != RTREE_LINEAR && type != RTREE_EXPONENTIAL && type != RSTAR*/) {	    throw new IllegalArgumentException("Invalid tree type.");	}	if (file.tree != null) {	    throw new IllegalArgumentException("PageFile already in use by another rtree instance.");	}	file.initialize(this, dimension, fillFactor, capacity, type);	this.file = file;	Leaf root = new Leaf(this, NIL, 0);	file.writeNode(root);    }    /**     * Creates an rtree from an already initialized page file, probably stored into persistent storage.     */    public RTree(PageFile file) {	if (file.tree != null) {	    throw new IllegalArgumentException("PageFile already in use by another rtree instance.");	}	if (file.treeType == -1) {	    throw new IllegalArgumentException("PageFile is empty. Use some other RTree constructor.");	}	file.tree = this;	this.file = file;    }    /**     * Retruns the maximun capacity of each Node.     */    public int getNodeCapacity() {	return file.nodeCapacity;    }    /**      * Returns the percentage between 0 and 0.5, used to calculate minimum number of entries     * present in each node.     */    public float getFillFactor() {	return file.fillFactor;    }    /**      * Returns the data dimension.     */    public int getDimension() {	return file.dimension;    }    /**      * Returns the page length.     */    public int getPageSize() {	return file.pageSize;    }    /**      * Returns the level of the root Node, which signifies the level of the whole tree. Loads one     * page into main memory.     */    public int getTreeLevel() {	return  file.readNode(0).getLevel();    }    /**      * Returns the RTree variant used.      */    public int getTreeType() {	return file.treeType;    }    /**     * Inserts a HyperCube into the tree, pointing to the data stored at the given page number.     *     * @param h The hypercube to insert.     * @param page The page where the real data is stored.     * @return The page number of the Leaf where the hypercube was inserted (the parent of the     *         data entry.)     */    public int insert(HyperCube h, int page) {	if (h  == null) {	    throw new IllegalArgumentException("HyperCube cannot be null.");	}	if (h.getDimension() != file.dimension) {	    throw new IllegalArgumentException("HyperCube dimension different than RTree dimension.");	}	AbstractNode root = file.readNode(0);	Leaf l = root.chooseLeaf(h);	return l.insert(h, page);    }    /**     * Deletes a HyperCube from the leaf level of the tree. If there is no leaf containg a hypercube     * that matches the given hypercube, the tree is left intact.     *     * @param h The HyperCube to delete.     * @return The data pointer of the deleted entry, NIL if no matching entry was found.     */    public int delete(HyperCube h) {	if (h == null) {	    throw new IllegalArgumentException("HyperCube cannot be null.");	}	if (h.getDimension() != file.dimension) {	    throw new IllegalArgumentException("HyperCube dimension different than RTree dimension.");	}	AbstractNode root = file.readNode(0);	Leaf l = root.findLeaf(h);	if (l != null) {	    return l.delete(h);	}	return NIL;    }    /**     * Returns a Vector containing all tree nodes from bottom to top, left to right.     * CAUTION: If the tree is not memory resident, all nodes will be loaded into main memory.     *     * @param root The node from which the traverse should begin.     * @return A Vector containing all Nodes in the correct order.     */    public Vector traverseByLevel(AbstractNode root) {	if (root == null) {	    throw new IllegalArgumentException("Node cannot be null.");	}	Vector ret = new Vector();	Vector v = traversePostOrder(root);	for (int i = 0; i <= getTreeLevel(); i++) {	    Vector a = new Vector();	    for (int j = 0; j < v.size(); j++) {		Node n = (Node) v.elementAt(j);		if (n.getLevel() == i) {		    a.addElement(n);		}	    }	    for (int j = 0; j < a.size(); j++) {		ret.addElement(a.elementAt(j));	    }	}	return ret;    }    /**     * Returns an Enumeration containing all tree nodes from bottom to top, left to right.     *     * @return An Enumeration containing all Nodes in the correct order.     */    public Enumeration traverseByLevel() {	class ByLevelEnum implements Enumeration {	    // there is at least one node, the root node.	    private boolean hasNext = true;	    private Vector nodes;	    private int index = 0;	    public ByLevelEnum() {		AbstractNode root = file.readNode(0);		nodes = traverseByLevel(root);	    }	    public boolean hasMoreElements() {		return hasNext;	    }	    public Object nextElement() {		if (! hasNext) {		    throw new NoSuchElementException("traverseByLevel");		}		Object n = nodes.elementAt(index);		index++;		if (index == nodes.size()) {		    hasNext = false;		}		return n;	    }	};	return new ByLevelEnum();    }    /**     * Post order traverse of tree nodes.      * CAUTION: If the tree is not memory resident, all nodes will be loaded into main memory.     *     * @param root The node where the traversing should begin.     * @return A Vector containing all tree nodes in the correct order.     */    public Vector traversePostOrder(AbstractNode root) {	if (root == null) {	    throw new IllegalArgumentException("Node cannot be null.");	}	Vector v = new Vector();	v.addElement(root);	if (root.isLeaf()) {	} else {	    for (int i = 0; i < root.usedSpace; i++) {		Vector a = traversePostOrder(((Index) root).getChild(i));		for (int j = 0; j < a.size(); j++) {		    v.addElement(a.elementAt(j));		}	    }	}	return v;    }    /**     * Post order traverse of all tree nodes, begging with root.     * CAUTION: If the tree is not memory resident, all nodes will be loaded into main memory.     *     * @return An Enumeration containing all tree nodes in the correct order.     */    public Enumeration traversePostOrder() {	class PostOrderEnum implements Enumeration {	    private boolean hasNext = true;	    private Vector nodes;	    private int index = 0;	    public PostOrderEnum() {		AbstractNode root = file.readNode(0);		nodes = traversePostOrder(root);	    }	    public boolean hasMoreElements() {		return hasNext;	    }	    public Object nextElement() {		if (! hasNext) {		    throw new NoSuchElementException("traversePostOrder");		}		Object n = nodes.elementAt(index);		index++;		if (index == nodes.size()) {		    hasNext = false;		}		return n;	    }	};	return new PostOrderEnum();    }    /**     * Pre order traverse of tree nodes.     * CAUTION: If the tree is not memory resident, all nodes will be loaded into main memory.     *     * @param root The node where the traversing should begin.     * @return A Vector containing all tree nodes in the correct order.     */    public Vector traversePreOrder(AbstractNode root) {	if (root == null) {	    throw new IllegalArgumentException("Node cannot be null.");	}	Vector v = new Vector();	if (root.isLeaf()) {	    v.addElement(root);	} else {	    for (int i = 0; i < root.usedSpace; i++) {		Vector a = traversePreOrder(((Index) root).getChild(i));		for (int j = 0; j < a.size(); j++) {		    v.addElement(a.elementAt(j));		}	    }	    v.addElement(root);	}	return v;    }    /**     * Pre order traverse of all tree nodes, begging with root.     * CAUTION: If the tree is not memory resident, all nodes will be loaded into main memory.     *

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久**毛片大全| 日韩黄色小视频| 国产成人av电影免费在线观看| 国产自产v一区二区三区c| 色综合久久精品| 久久网站热最新地址| 亚洲第一精品在线| 91浏览器在线视频| 国产精品色眯眯| 国产裸体歌舞团一区二区| 欧美猛男gaygay网站| 综合亚洲深深色噜噜狠狠网站| 美女在线观看视频一区二区| 色狠狠桃花综合| 国产精品久久久久精k8| 国产精品一二三四区| 91精品久久久久久久久99蜜臂| 一区二区三区毛片| av一区二区三区| 国产精品网站一区| 成人av在线影院| 国产视频亚洲色图| 激情欧美日韩一区二区| 欧洲中文字幕精品| 一区二区三区影院| 91在线观看污| 亚洲欧美日韩国产综合| av电影在线观看一区| 国产精品对白交换视频 | 精品国产一区二区三区av性色| 亚洲国产综合在线| 欧美视频一区在线观看| 一个色在线综合| 欧美在线免费观看亚洲| 亚洲午夜久久久久久久久电影院| 91视频在线看| 亚洲成人在线免费| 欧美一区二区黄色| 麻豆中文一区二区| 亚洲精品一区在线观看| 久久99精品国产.久久久久| 精品国产免费人成在线观看| 极品美女销魂一区二区三区| 久久综合一区二区| 国产91精品在线观看| 国产精品国产三级国产有无不卡| jizzjizzjizz欧美| 亚洲综合999| 91精品国产色综合久久| 极品美女销魂一区二区三区免费| 国产日韩av一区| 色av综合在线| 免费成人结看片| 中文在线一区二区| 欧美三级在线视频| 黑人巨大精品欧美黑白配亚洲| 久久久国产综合精品女国产盗摄| 不卡av电影在线播放| 亚洲午夜激情网站| 精品日产卡一卡二卡麻豆| 成人18精品视频| 首页国产欧美日韩丝袜| 久久久久久久久久久久久久久99| 日韩欧美一区电影| 久久超碰97人人做人人爱| 日韩理论在线观看| 91精品国产一区二区人妖| 国产69精品久久久久毛片| 亚洲一区影音先锋| 精品1区2区在线观看| 色老头久久综合| 国产一本一道久久香蕉| 亚洲国产成人va在线观看天堂| 精品免费国产二区三区| 色女孩综合影院| 国产一区二区免费看| 亚洲电影视频在线| 欧美激情艳妇裸体舞| 91精品国产麻豆| 色呦呦网站一区| 成人a级免费电影| 久久超碰97人人做人人爱| 亚洲综合小说图片| 中文字幕在线不卡一区二区三区| 91麻豆精品国产91久久久更新时间 | 欧美精品一区二| 欧美三级日韩三级国产三级| av毛片久久久久**hd| 国产精品一级片在线观看| 青青草伊人久久| 亚洲va国产va欧美va观看| 亚洲特级片在线| 亚洲国产经典视频| 精品国产成人在线影院| 欧美猛男男办公室激情| 在线一区二区观看| 色综合久久久久久久久| 成人免费视频一区二区| 国产综合久久久久影院| 韩日欧美一区二区三区| 精品无码三级在线观看视频| 蜜桃精品在线观看| 日本在线不卡视频| 亚洲成av人片在线观看无码| 一区二区三区在线影院| 综合久久久久综合| 亚洲欧洲日韩在线| 中文字幕一区在线| 国产天堂亚洲国产碰碰| 国产欧美日韩激情| 日本一区二区免费在线| 国产欧美一区二区三区在线看蜜臀| 日韩一二三四区| 欧美成人一区二区| 久久嫩草精品久久久精品一| 久久综合久色欧美综合狠狠| 久久美女艺术照精彩视频福利播放 | 99精品欧美一区| 91在线精品秘密一区二区| 色综合久久九月婷婷色综合| 91久久久免费一区二区| 欧美少妇性性性| 欧美日韩不卡视频| 日韩欧美国产午夜精品| 2欧美一区二区三区在线观看视频| 欧美大片日本大片免费观看| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲综合免费观看高清完整版在线 | 色哟哟精品一区| 欧美三级资源在线| 精品国产伦一区二区三区免费| 精品国产免费人成电影在线观看四季| 精品国产sm最大网站免费看| 国产欧美精品一区| 亚洲欧美偷拍卡通变态| 婷婷综合久久一区二区三区| 日本在线不卡一区| 成人免费va视频| 在线观看免费亚洲| 日韩欧美一二三| 国产精品黄色在线观看| 性感美女久久精品| 国产精品自拍三区| 色综合色综合色综合色综合色综合 | 久久久久久久av麻豆果冻| 自拍偷拍亚洲综合| 青青草原综合久久大伊人精品优势| 国产精品一品二品| 精品视频色一区| 久久久99精品久久| 五月激情综合婷婷| 风间由美一区二区av101| 欧洲日韩一区二区三区| 久久色.com| 亚洲图片欧美一区| 成人免费看片app下载| 欧美精品一卡二卡| 国产精品久线观看视频| 视频在线观看国产精品| 99精品欧美一区| 久久久久久免费网| 视频在线观看一区| 一本一道久久a久久精品综合蜜臀| 欧美精品日韩一本| 中文字幕一区二区三区四区不卡 | 日韩欧美黄色影院| 亚洲综合一区在线| 成人99免费视频| 久久九九国产精品| 日韩不卡手机在线v区| 97se亚洲国产综合自在线观| 精品区一区二区| 日韩高清不卡在线| 在线精品视频一区二区| 中文字幕在线观看一区| 激情综合色综合久久| 欧美人妇做爰xxxⅹ性高电影| 国产精品乱码妇女bbbb| 国产精品一区二区无线| 欧美一区二区在线播放| 亚洲高清在线精品| 色94色欧美sute亚洲线路一ni| 久久久精品tv| 国产精品亚洲а∨天堂免在线| 欧美一区午夜视频在线观看 | 在线播放欧美女士性生活| 亚洲视频每日更新| 99国产精品一区| 欧美经典一区二区三区| 国产成人综合在线观看| 久久免费国产精品| 国产一区二区在线免费观看| 欧美精品一区二区三区蜜桃| 日本不卡一区二区三区高清视频| 欧美在线视频全部完| 亚洲综合清纯丝袜自拍| 国产视频一区二区三区在线观看| 韩国成人福利片在线播放| 精品久久久三级丝袜| 国产真实乱子伦精品视频|