Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures 空间数据的数据结构_Data Structures_Ocaml_Functional Programming - Fatal编程技术网

Data structures 空间数据的数据结构

Data structures 空间数据的数据结构,data-structures,ocaml,functional-programming,Data Structures,Ocaml,Functional Programming,我正在寻找一个良好的功能数据结构来存储空间(点)数据。数据结构应该允许对已经存在的点进行简单的epsilon查询。我还需要经常修改数据。这意味着点可以移动,并且应该能够在数据结构中更新。这可能可以使用普通的删除/添加来处理,但真正的移动可能会更快 现在我正在考虑使用(或更高),因为移动部分应该很容易做到。然而,就平衡而言,四叉树被认为是更糟糕的。可能是另一种选择,但更新似乎相当糟糕。此外,我所能找到的大多数空间数据结构实现都是过程性的,而我使用的是函数式语言。取决于您如何使用它和快速地移动点,您

我正在寻找一个良好的功能数据结构来存储空间(点)数据。数据结构应该允许对已经存在的点进行简单的epsilon查询。我还需要经常修改数据。这意味着点可以移动,并且应该能够在数据结构中更新。这可能可以使用普通的删除/添加来处理,但真正的移动可能会更快


现在我正在考虑使用(或更高),因为移动部分应该很容易做到。然而,就平衡而言,四叉树被认为是更糟糕的。可能是另一种选择,但更新似乎相当糟糕。此外,我所能找到的大多数空间数据结构实现都是过程性的,而我使用的是函数式语言。

取决于您如何使用它和快速地移动点,您也可以考虑。基本上,将点按一维排序(例如x)。如果点很少改变位置,那么为每个模拟步骤运行插入排序实际上会非常快


(顺便说一句,我认为你的两个建议已经很好了)

KD树或Quad/Oct树是合理的选择

Haskell中的示例:

两者都很容易编码为纯功能数据结构。

和R*树也是另一种解决方案,易于实现

有关示例,请参见(在OCaml中)


我在疏散模拟中使用了它们,更新步骤并没有那么慢。

由Overmars和van Leeuwen描述了伪四叉树-一种四叉树,它也可以在插入和删除过程中平衡自身。插入和删除的摊余成本类似于
O(log^d(n))
,甚至可以与所做的平衡量进行交易(你可以在本文中阅读更多相关内容)。

只是想澄清一下:epsilon查询是一种查找与给定点之间指定距离内的点的查询吗?看起来很好,虽然我必须修理一些东西才能让它在这里工作。谢谢你的帮助。。。