【问题标题】:kd-tree vs. cell listskd-tree 与单元列表
【发布时间】:2015-03-06 15:36:56
【问题描述】:

在分子模拟中,人们经常使用邻居列表算法(细胞列表/Verlet 表)来计算每个粒子的邻居粒子。

然后,运行模拟,每个粒子在运行时都知道他的邻居。 构建此类邻居列表的计算量与粒子数成线性关系 (O(N))。

另一方面,在许多应用程序中,kd-trees 通常用于定位最近的邻居。构建这样一棵树也与粒子数量成线性关系。

那么,还有什么比这更好的呢?如果尺寸是中等的 2/3D 和范围 搜索不会改变?

【问题讨论】:

    标签: algorithm simulation computational-geometry


    【解决方案1】:

    这取决于应用程序,快速查看 wiki 的 k-d treecell list,搜索、添加/删除和计算交互的复杂性因使用的每个数据结构和算法而异,因此取决于粒子的数量是否可以动态变化或保持不变,效率会有所不同。

    进一步的 k-d 树可用于其他应用程序或提供其他功能

    ..k-d 树对于多个应用程序来说是一种有用的数据结构,例如 作为涉及多维搜索键的搜索(例如范围 搜索和最近邻搜索)。 k-d 树是一个特例 二元空间划分树。

    【讨论】:

    • 我有点生疏了,但是“建造这样的树也随着粒子的数量线性缩放”,它不是对数缩放吗?
    • @NickoPo,complexity of operations of k-d tress on wiki,它指出从 n 个点构建 k-d-tree 平均需要 O(nlog^2n) 并且将新点插入平衡的 k-d 树需要 O(log n) 时间,因此插入 k 个新点将线性缩放为 O(klogn)
    • 也许,我又觉得有点生疏了,但是“线性缩放为 O(klogn)”似乎很奇怪,因为在这种情况下,n 将增长 k。这意味着每次插入后树都会变大。
    • @NickoPo,正确,O(klogn) 有点粗糙。我现在不打算进行复杂性分析(这可能需要对主定理进行非平凡的应用),所以我会把它留在那里并参考 wiki 和其中的链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 2011-03-22
    • 2021-10-10
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多