Яку структуру даних ви б використали для представлення органічної сполуки?


11

Чи є якісь хороші структури даних, які можна використовувати для представлення молекули?

Я думав, може, я представляю це як графік, роблячи кожен атом вершиною, однак, органічні сполуки мають багато вуглецю та водню. Як би ви її нумерували? Чи є хороший спосіб представити молекули, але в той же час мати ефективний .contains()метод?

Одним із найпростіших застосувань для цього було б перевірити, чи містить з'єднання карбонільна група, або бензильний водень, або навіть бензольне кільце.



8
Я думаю, ви повинні запитати хіміка. Вони, можливо, не знають, як це запрограмувати, але впевнені, що вміють представляти сполуки, але мають більшість можливостей (наприклад, вони представляють бенцен просто з шестикутником). Також є деякі рівні абстракції (білок описується як послідовність амінокислот, а не як група атомів). Як тільки ви зрозумієте, як це представити на папері, частина програмування повинна бути досить простою
SJuan76

Це відмінне запитання. Сподіваюся, я отримаю шанс трохи пізніше додати кілька думок.
Стефан

2
Дві речі, які слід пам’ятати: пам’ятайте, що атоми можуть мати різні ізотопи, і пам’ятайте, що деякі сполуки мають однакові елементи, але різні за місцем зв’язку .
Теластин

Відповіді:


7

(Випускник біохімії з 30-річним досвідом розробки програмного забезпечення)

Неорганічні молекули "відносно" прості. Цікавими є ті, які можуть зв'язатись між собою, наприклад, C, N, O, Si, тому що ви можете отримати справді прикольні комбінації. Кільце Бензолу - дуже простий приклад. Деякі варіанти замінюють азот для одного з вуглецю, і він стає дивним швидко.

Я б почав з об'єкта "атома" з різними типами атома, успадкованими від нього.

Кожен об’єкт "атома" містив би перелік об'єктів атома для представлення різних зв'язків, тому азот матиме список фіксованого розміру 3. Потім він може зберігати посилання на три інші атоми. Подвійна облігація може бути представлена ​​як дублікат.

Кожен атом мав би вбудовані правила про те, що він може юридично зв’язуватися та як.

Таким чином, ви можете скласти досить складні молекули однозначно - тому що зв'язок 3 на вуглеці №1 пов'язаний зі зв'язком 1 на Водні 2 та ін.

Сподіваюся, що це має сенс ...


4

Перша спокуса при моделюванні цього полягає у використанні структури даних у стилі чотирьох дерев. Кожен атом вуглецю має чотири з'єднання, кожен кисень два та кожен водень. Я не думаю, що це правильне рішення.

Я думаю, що правильне рішення вже винайдено. Структура даних, яку слід використовувати, - це рядок.

Подумайте над цим. Хіміки вже досить давно моделюють органічні сполуки. Якщо ви покажете хіміка СН4, вони негайно визнають це метаном. Покажіть їм CH3CH2OH, і вони визнають це етанолом. Вони визнають це через те, що вони ідентифікують комбінацію CH3CH2 як сполуку "et" (мається на увазі два атоми вуглецю), а ОН - як "анольну" або алкогольну групу.

Також у нас є існуюча методологія пошуку та ідентифікації підрядків - регулярні вирази.

Отже, щоб програмно представляти органічну сполуку, я б визначив сполуку як такий, що містить рядок, який представляє його хімічну формулу та рядок, що визначає його хімічну назву. У ньому можуть бути методи, які визначили, які «особливі» властивості мала сполука.

Приклад класу в 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


2
Як ви поводитесь із ізомерами таким чином?

Це чудове запитання. Виявляється, про це вже було продумано. У відповідь я додав інформацію про представлення хімічної формули SMILES.
Стефан

Існують різні систематизовані системи імен, які також можна використовувати залежно від того, які властивості ви насправді хочете моделювати
jk.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.