如何在内存中存储分子?

时间:2010-08-23 17:34:58

标签: objective-c c memory variables data-structures

我想将分子存储在记忆中。这些可以是简单的分子:

Methane (CH4)
C-H bond-length: 108.7 pm
H-H angle: 109 degrees

但也有更复杂的分子,如扑热息痛(C8H9NO2):
Paracetamol

如何将分子存储在记忆中,包括所有键长和角度?


将原子结构存储在数组中的好主意?或者有更好的方法吗?

5 个答案:

答案 0 :(得分:9)

它看起来像某种图形数据结构:

  • 分子具有一组原子
  • 原子通过债券联系在一起:
    • 债券可以是双重,单一或三重
    • 债券长度
    • 债券有一个角度
  • 这是一个循环图(例如,问题中的例子有一圈交替的单键和双键)
  • 这不是一个有向图(如果两个原子结合在一起,那么你接近这个键的关键并不重要)

通常,您将图形存储为节点(原子)数组和边数组(键)。节点和边都是结构的指针。

节点(atom)将存储元素。

边(债券)将存储以下字段:

  • 一对指向节点的指针
  • 债券类型(双/单)
  • 键长和角度

因为它不是有向图,所以你的数据结构会认为A和B之间的边等于B和A之间的边。也就是说,对于给定的原子对,你希望你的边数组是包含从A到B的边,从不从B到A。

答案 1 :(得分:0)

鉴于您正在为链接结构建模,似乎链接数据结构将是最合适的表示。我担心我不足以猜测所有为每件商品存储的数据。

另一方面,它听起来很像非常略微修改的版本,通常用于存储图形 - 节点和链接,以及与每个图形相关联的数据。在图表中,与链接相关联的典型数据是该链接的“成本”,但在这种情况下,它听起来像是存储了一个向量(角度和长度)。

答案 2 :(得分:0)

也许你应该看一下Brad Larson的Molecules,这是一款针对iPhone / iPod / iPad的超级开源应用,激发了许多程序员的灵感。我猜他使用的标准数据格式可以激发你的分子

答案 3 :(得分:0)

您是要对这些分子进行任何计算,还是只是绘制它们?如果您打算进行任何严格的计算,那么我甚至不会尝试使用Objective C.为了获得最佳性能,您应该将角度,长度和连接存储在正常数组中,并执行必要的所有会计以跟踪什么是什么。如果涉及大量计算,那些使用花哨的数据结构以及保存分子信息的应用程序运行得非常糟糕。

答案 4 :(得分:0)

您发布的分子是描述符,如混凝土分子实例的模板(具有不同的笛卡尔坐标)。因此,对于每种可能数量的分子类型实例,您只需要一个“分子”。然后,您需要一个坐标数组,您可以从中提取哪个坐标给出一个分子。对于这个单一描述符,您应该创建允许您以尽可能最佳方式访问值的数据结构。可能是(a,b,r,类型)的向量 - 用于债券的结构,用于角度等的(a,b,c,w,类型)的向量

此致

RBO