Первое искушение при моделировании - это использовать структуру данных в стиле квад-дерева. Каждый атом углерода имеет четыре соединения, каждый кислород два и каждый водород один. Я не думаю, что это правильное решение, хотя.
Я думаю, что правильное решение уже придумано. Используемая структура данных - это строка.
Подумай об этом. Химики уже довольно давно моделируют органические соединения. Если вы покажете химику CH4, они сразу узнают это как метан. Покажите им CH3CH2OH, и они узнают это как этанол. Они признают это, потому что они идентифицируют комбинацию CH3CH2 как «этильное» соединение (имеется в виду два атома углерода), а ОН как «анольную» или спиртовую группу.
У нас также есть существующая методология поиска и идентификации подстрок - регулярные выражения.
Таким образом, чтобы представить программно органическое соединение, я бы определил соединение как содержащее строку, представляющую его химическую формулу, и строку, определяющую его химическое название. У него могут быть методы, которые определяют, какие «особые» свойства у соединения.
Пример класса в C #:
public class OrganicCompound
{
private Regex benzineRingRegex;
public OrganicCompound(string formula, NameCalculator nameCalculator, Regex benzineRingRegex)
{
this.Formula = formula;
this.Name = nameCalculator.CalculateName(formula);
this.benzineRingRegex = benzineRingRegex
}
public string Formula { get; private set; }
public string Name { get; private set; }
public bool HasBenzeneRing()
{
return Regex.IsMatch(this.Formula, benzineRingRegex);
}
}
Очевидно, вам нужно написать класс nameCalculator, который вычисляет имя на основе формулы. Вам нужно создать регулярное выражение, которое определяет бензиновое кольцо. Определите дополнительные регулярные выражения для каждой из групп, которые вы хотите найти.
Преимущество моделирования соединений таким образом заключается в том, что он находится на языке, который находится в бизнес-сфере конечного пользователя. Все, что вам нужно знать разработчику, - это строки для поиска, которые могут быть легко предоставлены либо учебником, либо химиком.
Если требуются структурные представления этих химических веществ, я предлагаю рассмотреть возможность представления SMILES формул.
SMILES представление химической формулы