haskell - 在实现 Birdson 的泊松盘分布时使用哪种数据结构

标签 haskell data-structures

我正在尝试编写一个函数来创建一组点 ( :: (Float,Float))使用 Haskell 的泊松盘分布。我正在使用 Birdson 算法 describedMike Bostock's blog .

点被保存在一个网格中,这样每个单元格永远不会超过一个点。通过这样做,最近邻问题从 O(n) 减少到 O(1)。

我的问题是该网格使用什么样的数据结构。 JavaScript 使用可变数组和 for 循环,因为命令式语言倾向于这样做。我可以使用 Vectors 复制这种方法,但我觉得可能有更好的功能数据结构。

什么样的结构适合这个网格?这是一个使用的地方共济会 ?

最佳答案

对于最近邻问题,有一种称为 Voronoi 图的通用结构。通过该图上的点位置,您可以在 O(log n) 中找到最近的邻居。我认为 O(1) 是不可能的,除非您的问题有其他特定的特征。对于点定位,可以使用 Edelsbrunner 的链式方法,或者 Sleator 和 Tarjan 的持久二叉搜索树。您可以在 GLib 中找到 C 实现。 .希望你也能找到用 javascript 实现的这些算法和数据结构:js voronoi .

关于haskell - 在实现 Birdson 的泊松盘分布时使用哪种数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24986460/

相关文章:

haskell "Non type-variable argument in the constraint"

java - 使用一个堆栈在二叉树中进行后序遍历

c++ - 请提出一些算法来找到树中所有节点中到最远节点的距离最小的节点

haskell - 一个覆盖如何显示新类型?

windows - Windows 上的 Haskell 插件包不是 x86 PEi386 错误

haskell - GHC 7.8 中“不能”输入哪些内容?

c++ - 无法使用对象访问迭代器数据成员

haskell - QuickCheck:根据其他 Arbitrary 定义 Arbitrary 实例

c - LinkedList : Why there is need to declare a new struct node current? 如果我使用参数 head 进行跟踪,代码工作得很好吗?

python - 在霍夫曼算法中对中间叶进行编码