Как хранить молекулы в памяти? - PullRequest
4 голосов
/ 23 августа 2010

Я хочу хранить молекулы в памяти.Это могут быть простые молекулы:

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

Но также более сложные молекулы, такие как парацетамол (C8H9NO2):
Paracetamol

Как хранить молекулы в памяти, включая все связидлины и углы?


Хорошая идея хранить структуры атомов в массиве?Или есть лучший способ?

Ответы [ 5 ]

9 голосов
/ 23 августа 2010

Это похоже на некую структуру данных графа:

  • Молекула имеет набор атомов
  • Атомы связаны связями:
    • Связка можетбыть двойным, одинарным или тройным
    • Связь имеет длину
    • Связь имеет угол
  • Это циклический граф (например, примерв вопросе есть кольцо чередующихся одинарных и двойных связей)
  • Это не ориентированный граф (если два атома связаны, не имеет значения, с какого конца вы подходите к связи)

Обычно график хранится в виде массива узлов (атомов) и массива ребер (связей).Узлы и ребра будут указателями на структуры.

Узел (атом) будет хранить элемент.

Ребро (связь) будет хранить следующие поля:

  • Пара указателей на узлы
  • Тип связи (двойная / одинарная)
  • Длина и угол связи

Поскольку это не ориентированный граф,ваша структура данных будет считать ребро между A и B эквивалентным ребру между B и A. То есть, для данной пары атомов вы ожидаете, что ваш реберный массив будет содержать ребро от A до B и никогда отОт B до A.

0 голосов
/ 23 августа 2010

Молекула в вашем сообщении - это дескриптор, похожий на шаблон экземпляра конкретной молекулы (с различными декартовыми координатами).Следовательно, вам нужна только одна «молекула» для каждого возможного числа экземпляров типа молекулы.Затем вам нужен массив координат, из которого вы можете извлечь, какие координаты дают одну молекулу.Для этого единственного дескриптора вы должны создать структуры данных, которые позволят вам получить доступ к значениям наилучшим возможным способом.Возможно a vector of (a, b, r, type) -структуры для связей, a vector of (a, b, c, w, type) для углов и т. Д.

С уважением

rbo

0 голосов
/ 23 августа 2010

Собираетесь ли вы делать какие-либо вычисления для этих молекул или просто рисовать их?Если у вас есть намерение проводить какие-либо строгие вычисления, то я бы даже не пытался использовать Objective C. Для лучшей производительности вы должны хранить углы, длины и соединения в обычных массивах и выполнять весь учет, необходимый для отслеживаниякакие.Эти типы приложений, которые используют причудливые структуры данных и тому подобное для хранения информации о молекулах, работают очень плохо, если также требуется много вычислений.

0 голосов
/ 23 августа 2010

Возможно, вам стоит взглянуть на Молекулы Брэда Ларсона, превосходное приложение с открытым исходным кодом для iPhone / iPod / iPad, которое вдохновило уже многих программистов.Я предполагаю, что он использует стандартный формат данных для молекул, которые могут вдохновить ваш

0 голосов
/ 23 августа 2010

Учитывая, что вы моделируете связанную структуру, кажется, что связанная структура данных будет наиболее подходящим представлением. Боюсь, мне не хватит химика, чтобы угадать все данные, которые было бы интересно хранить для каждого предмета.

От руки это звучит очень похоже на очень слегка модифицированную версию того, как вы обычно храните график - узлы и ссылки с данными, связанными с каждым. На графике типичными данными, связанными со ссылкой, является «стоимость» этой ссылки, но в этом случае звучит так, как если бы вы сохранили вектор (угол и длину).

...