假的kd-tree小结
至今还不是很体会kd-tree这种东西,只不过体会了一种解决某些枚举问题的方法,就是当我们有一群元素,我们要到一个答案,答案在这些元素中的某个或某几个中,我们就会枚举他们,然而我们发现这样做十分低效,于是我们就想要优化这种做法,想到剪枝,然而在我们这种链结构的枚举下剪枝十分困难, 所以我们可以选择改变枚举结构,这时我们可以想到在dfs的过程中,在dfs树上对以子树为单位的元素进行的剪枝十分高效,于是我们为之建立树形结构,我们在树形结构上按照dfs序进行枚举实际上就相当于在dfs,那么我们就可以依据已有信息与子树信息进行剪枝,但是我们发现这样仍然不是很优秀,然后我们继续观察,发现如果能在一定程度上控制树的形态与各个元素在树上的位置,我们就会让我们的剪枝变得十分高效。
我并不确定kd-tree的思想是不是与我的相同,只是觉得我的想法可以在一定程度上解释kd-tree。
对于“控制树的形态与各个元素在树上的位置”这个操作,我觉得是可以在相当大的程度上借鉴kd-tree的,比如,其树形结构为二叉树,且是一棵平衡树,其各个元素在树上的位置,是通过在建树过程中不断用某一维中位数划分此维得到的。
对于“用某一维中位数划分此维”中到底是哪一维,在原本的kd-tree里,是比较极差或者方差来得到的,然而现在在oi中往往用更为实用且易于实现的各维轮流操作,我觉得这样在一定程度上有利于kd-tree实现插入操作,但这也是面对不同的情况做出的不同决策,应该对于不同的情况有着不同的处理,我觉得现在在我们面对oi中维数较少的情况,轮流操作还是十分好用的,但是当维数升高,高到我们进行轮流操作都不能轮完一轮或者比这还稍微好一些的时候轮流操作就会十分无用,这个时候极差与方差就会十分优秀。
对于原本二叉树的插入操作进行到一定程度后的不平衡的解决办法,在我经过一些做题的经验与思考后,发现利用替罪羊树拍扁重建的思想是一种优秀的策略。
我觉得kd-tree的各种方法在面对多维空间内的查询时是是十分有效的,但是当脱离多维空间的时候,我们也许就需要自己思考到底该做出怎样的改变。
关于对kd-tree与我以上所说的思想的体会与理解,我觉得我应该在以后的不断学习中继续,因为我还是有许多空洞的地方。
假的kd-tree小结的更多相关文章
- AOJ DSL_2_C Range Search (kD Tree)
Range Search (kD Tree) The range search problem consists of a set of attributed records S to determi ...
- k-d tree 学习笔记
以下是一些奇怪的链接有兴趣的可以看看: https://blog.sengxian.com/algorithms/k-dimensional-tree http://zgjkt.blog.uoj.ac ...
- 【BZOJ-2648&2716】SJY摆棋子&天使玩偶 KD Tree
2648: SJY摆棋子 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2459 Solved: 834[Submit][Status][Discu ...
- K-D Tree
这篇随笔是对Wikipedia上k-d tree词条的摘录, 我认为解释得相当生动详细, 是一篇不可多得的好文. Overview A \(k\)-d tree (short for \(k\)-di ...
- K-D Tree题目泛做(CXJ第二轮)
题目1: BZOJ 2716 题目大意:给出N个二维平面上的点,M个操作,分为插入一个新点和询问到一个点最近点的Manhatan距离是多少. 算法讨论: K-D Tree 裸题,有插入操作. #inc ...
- k-d Tree in TripAdvisor
Today, TripAdvisor held a tech talk in Columbia University. The topic is about k-d Tree implemented ...
- k-d tree算法
k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构.主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索). 应用背景 SIFT算法中做特征点匹配的时候就会利用到k ...
- k-d tree模板练习
1. [BZOJ]1941: [Sdoi2010]Hide and Seek 题目大意:给出n个二维平面上的点,一个点的权值是它到其他点的最长距离减最短距离,距离为曼哈顿距离,求最小权值.(n< ...
- [模板] K-D Tree
K-D Tree K-D Tree可以看作二叉搜索树的高维推广, 它的第 \(k\) 层以所有点的第 \(k\) 维作为关键字对点做出划分. 为了保证划分均匀, 可以以第 \(k\) 维排名在中间的节 ...
- BZOJ3489 A simple rmq problem K-D Tree
传送门 什么可持久化树套树才不会写呢,K-D Tree大法吼啊 对于第\(i\)个数,设其前面最后的与它值相同的位置为\(pre_i\),其后面最前的与它值相同的位置为\(aft_i\),那么对于一个 ...
随机推荐
- ThinkPHP框架目录的介绍
library目录 Think目录 mvc
- thinkphp phpmailer邮箱验证
thinkphp 关于phpmailer的邮箱验证 一 . 登陆自己的邮箱,例如:qq邮箱.登陆qq邮箱在账户设置中开启smtp服务: 之后回发送一个授权码 , 这个授权码先保存下来,这个授权码在后 ...
- python3 练习题100例 (二十四)打印完数
完数:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如 6 = 1+2+3. 题目内容: 输入一个正整数n(n<1000),输出1到n之间的所有完数(包括n). 输 ...
- ruby OpenURI模块使用
OpenURI is an easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP(OpenURI支持重定向) 像打开普通文件那样打开ht ...
- C# 集合之Dictionary详解
开讲. 我们知道Dictionary的最大特点就是可以通过任意类型的key寻找值.而且是通过索引,速度极快. 该特点主要意义:数组能通过索引快速寻址,其他的集合基本都是以此为基础进行扩展而已. 但其索 ...
- 20145202马超 2006-2007-2 《Java程序设计》第2周学习总结
20145202马超 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 第三章主要讲了各种变量的设置以及流程控制,基本上都和c是一样的.print是不太一样的, ...
- 插件开发遇到的坑------final 型变量,编译过程被优化
android 插件开发遇到的坑 今天遇到一个坑,pdf 插件,调用了主工程的一个静态final 字符串,但是主工程里面已经没有这个字符串了,却没有崩溃. 后来同事说,因为字符串可能已经直接被写死了. ...
- centos linux 因别名问题引起的麻烦及解决技巧
老男孩儿-19期 L005-13节中分享.自己整理后发到自己微博中留档. 原文:http://oldboy.blog.51cto.com/2561410/699046 实例:老男孩linux实战培训第 ...
- 【C#】 反射
[C#] 反射 目录 : http://msdn.microsoft.com/zh-cn/library/System.Reflection(v=vs.110).aspx System.Reflect ...
- linux中wget 、apt-get、yum rpm区别
wget 类似于迅雷,是一种下载工具, 通过HTTP.HTTPS.FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理名字是World Wide Web”与“get”的结合. yum: 是r ...