首页 / 知识
关于性能:C语言中的空间数据结构
2023-04-16 06:39:00

Spatial Data Structures in C我在高性能簇上从事理论化学工作,通常涉及分子动力学模拟。我的工作解决的问题之一涉及N维(通常为N = 2-5)超??球的静态场,测试粒子可能会与之碰撞。我正在寻求优化(阅读:大修)我用来表示球体场的数据结构,以便进行快速碰撞检测。目前,我使用了一个简单的指向N元成员结构的指针简单数组(中心的每个坐标都加倍)和一个最近邻居列表。我听说过八叉树和四叉树,但是没有找到关于它们如何工作,如何有效地实现它们或如何对其中一个进行快速冲突检测的清晰解释。鉴于我的仿真大小,内存(几乎)不是对象,而周期是。 如何最好地解决此问题取决于您尚未描述的几个因素: 我假设粒子不具有简单的直线运动,因为这将是找到一条线和一个点之间最接近点的相对较快的计算,这很可能与找到哪个点之间的速度大致相同。框线与之相交(确定要在n树中检查的位置)。 如果对于许多粒子碰撞您的超球体位置是固定的,则计算voronoi分解/ Dirichlet细分将为您提供一种快速的方式,以便稍后准确地找到该空间中任何给定点的哪个球体最接近您的粒子。 > 但是要回答有关八叉树/四叉树/ 2 ^ n-trees的原始问题,在n个维度中,您从一个(超级)多维数据集开始,该多维数据集包含您感兴趣的空间区域。这将细分为2如果您认为内容过于复杂,则^ n超立方体。递归地继续进行,直到叶节点中只有简单元素(例如一个超球质心)为止。 退出超立方体时有效地找到相邻的超立方体是此方法最具挑战性的部分之一。对于2 ^ n棵树,可以使用Samet的方法{1,2}。对于kd树(二叉树),在{3}第4.3.3节中建议了一种方法。 高效的实现可能很简单,例如存储从每个超多维数据集到其子超多维数据集的8个指针的列表,并在超多维数据集是叶子的情况下以特殊方式对其进行标记(例如,使所有指针为NULL)。 在克林格(Klinger)中找到有关划分空间以创建四叉树(您可以将其推广为n-tree)的描述。 由于您的字段是静态的(我假设您的意思是超球不动),所以我知道的最快的解决方案是Kdtree。 听起来您想实现一个kd-tree,它可以让您更快地搜索N维空间。在Stony Brook算法存储库中,有更多信息和实现的链接。 n 四叉树是二维树,其中每个节点上有4个子节点,每个子节点覆盖父节点面积的1/4。 Oct树是3维树,其中每个节点上有8个子节点,每个子节点包含父节点体积的1/8。这是帮助您形象化的图片:http://en.wikipedia.org/wiki/Octree 如果您要进行N维交集测试,则可以将其推广为N树。 交集算法的工作方式是从树的顶部开始,然后递归地遍历与要测试的对象相交的任何子节点,有时您会到达包含实际对象的叶节点。 |
最新内容
相关内容
linux性能检测命令?
linux性能检测命令?,系统,情况,信息,状态,工具,实时,百分比,指标,分析,命令,查看linux的cpu和内存要查看CPU使用情况,可以使用top命令。Top命令linux使用命令改语言?
linux使用命令改语言?,系统,工作,管理,电脑,设备,字符集,中文,命令,语言,虚拟机,请问linux虚拟机装好以后怎么把英文改成中文?1、vmware设置中c语言写linux命令?
c语言写linux命令?,系统,工具,代码,智能,工作,环境,情况,位置,命令,文件,如何在C语言编程中调用linux系统终端下的命令1、C语言有一个system函linux汇编语言命令?
linux汇编语言命令?,系统,地址,代码,数据,网络,平台,平均,位置,灵活,工作,汇编语言指令的基本格式是什么1、有以下几种基本格式:标号,又称为指令linux汇编语言命令?
linux汇编语言命令?,系统,地址,代码,数据,网络,平台,平均,位置,灵活,工作,汇编语言指令的基本格式是什么1、有以下几种基本格式:标号,又称为指令linux查内存空间命令?
linux查内存空间命令?,系统,情况,信息,数据,内存,工具,命令,表示,方法,内容,Linux命令行查看内存1、cat /proc/meminfo查看linux系统内存大小linux命令是什么语言?
linux命令是什么语言?,系统,环境,代码,传播,管理,语言,操作系统,源码,自由,部分,dos和linux的命令行里面用的是什么语言?1、DOS/Windows/Linuxlinux查看性能的命令?
linux查看性能的命令?,系统,情况,信息,数据,状态,指标,第一,分析,命令,宏观,linux查看cpu个数和核心数linux怎么查看cpu的个数?我们一起来了解linux空间分配命令?
linux空间分配命令?,系统,数据,情况,分区,图片,地址,位置,软件,管理,信息,linux怎么分配系统空间1、系统分区 系统分区是指存放操作系统和启动linux改语言命令行?
linux改语言命令行?,系统,环境,工具,密码,概念,地方,软件,通信,管理,国际,linux命令行下怎样改变语言将内容改为:LANG=zh_CN.UTF-8LANGUAGE=zh_linux命令行c语言?
linux命令行c语言?,代码,系统,工具,环境,工作,保险,发行,命令,文件,终端,linux终端下如何进行C语言编译1、在Linux下面,如果要编译一个C语言源c语言在linux命令?
c语言在linux命令?,系统,工作,管理,命令,保险,基础,环境,信息,文件,语言,linux系统的命令是什么linux常用命令有pwd命令、cd命令、ls命令、cat