एक कार्बनिक यौगिक का प्रतिनिधित्व करने के लिए आप किस डेटा संरचना का उपयोग करेंगे?


11

वहाँ किसी भी अच्छा डेटा संरचनाओं कि अणु का प्रतिनिधित्व करने के लिए इस्तेमाल किया जा सकता है?

मैं सोच रहा था कि शायद मैं हर परमाणु को एक शीर्ष बनाकर एक ग्राफ के रूप में प्रतिनिधित्व करता हूं, हालांकि, कार्बनिक यौगिकों के लिए बहुत सारे कार्बोन और हाइड्रोजेंस हैं। आप इसे कैसे नंबर देंगे? क्या अणुओं का प्रतिनिधित्व करने का एक अच्छा तरीका है, लेकिन एक ही समय में, एक कुशल .contains()तरीका है?

इसके लिए सबसे बुनियादी उपयोगों में से एक यह जांचना होगा कि क्या किसी परिसर में कार्बोनिल समूह, या एक बेंजीन हाइड्रोजन, या यहां तक ​​कि एक बेंजीन रिंग भी है।



8
मुझे लगता है कि आपको एक केमिस्ट से पूछना चाहिए। वे यह नहीं जान सकते कि इसे कैसे प्रोग्राम किया जाए, लेकिन वे यह जानते हैं कि यौगिकों का प्रतिनिधित्व कैसे करना है, और यद्यपि अधिकांश संभावनाओं के बारे में है (उदाहरण के लिए, वे केवल एक षट्भुज के साथ बेनकेन का प्रतिनिधित्व करते हैं)। इसके अलावा, कुछ अमूर्त स्तर हैं (एक प्रोटीन को अमीनोइड के अनुक्रम के रूप में वर्णित किया गया है, परमाणुओं के समूह के रूप में नहीं)। एक बार जब आप समझते हैं कि इसे कागज में कैसे दर्शाया जाए, तो प्रोग्रामिंग भाग काफी सीधा होना चाहिए
SJuan76

यह एक अच्छा सवाल है। उम्मीद है कि मुझे थोड़ा बाद में कुछ विचार जोड़ने का मौका मिलेगा।
स्टीफन

2
याद रखने वाली दो बातें: याद रखें कि परमाणुओं में अलग-अलग समस्थानिक हो सकते हैं, और याद रखें कि कुछ यौगिकों में एक ही तत्व होते हैं, लेकिन संबंध स्थान के कारण भिन्न होते हैं
तेलस्तीन

जवाबों:


7

(30 साल के सॉफ्टवेयर विकास के अनुभव के साथ जैव रसायन स्नातक)

गैर-कार्बनिक अणु "अपेक्षाकृत" सरल हैं। दिलचस्प वे हैं जो स्वयं के साथ बंधन कर सकते हैं जैसे सी, एन, ओ, सी क्योंकि आप कुछ वास्तव में फंकी संयोजन प्राप्त कर सकते हैं। बेंज़ीन रिंग एक बहुत ही सरल उदाहरण है। कुछ भिन्नताएँ कार्बन में से किसी एक के लिए नाइट्रोजन का विकल्प बनाती हैं और यह तेजी से अजीब हो जाता है।

मैं एक "परमाणु" वस्तु के साथ शुरू करूँगा जो विभिन्न प्रकार के परमाणु से विरासत में मिला है।

प्रत्येक "परमाणु" वस्तु में विभिन्न बांडों का प्रतिनिधित्व करने के लिए परमाणु वस्तुओं की एक सूची होगी, इसलिए नाइट्रोजन की निश्चित आकार की एक सूची होगी। यह तब तीन अन्य परमाणुओं के लिए लिंक स्टोर कर सकता है। एक दोहरे बंधन को डुप्लिकेट प्रविष्टि के रूप में दर्शाया जा सकता है।

प्रत्येक परमाणु के पास इस बारे में नियम होंगे कि वह कानूनी रूप से किस तरह से और कैसे बांड कर सकता है।

तो आप यथोचित रूप से जटिल अणुओं को असंदिग्ध रूप से बना सकते हैं - क्योंकि कार्बन # 1 पर बंधन 3, हाइड्रोजन 1 आदि पर बंधन 1 से जुड़ा हुआ है।

आशा है कि समझ में आता है ...


4

मॉडलिंग के साथ पहला प्रलोभन एक क्वाड-ट्री स्टाइल डेटा संरचना का उपयोग करना है। प्रत्येक कार्बन परमाणु में चार कनेक्शन होते हैं, प्रत्येक ऑक्सीजन दो और प्रत्येक हाइड्रोजन एक। मुझे नहीं लगता कि यह उचित समाधान है।

मुझे लगता है कि उचित समाधान का आविष्कार पहले ही हो चुका है। उपयोग करने के लिए डेटा संरचना एक स्ट्रिंग है।

इसके बारे में सोचें। रसायनज्ञ काफी लंबे समय से कार्बनिक यौगिकों का निर्माण कर रहे हैं। यदि आप एक रसायनज्ञ सीएच 4 दिखाते हैं, तो वे तुरंत मीथेन के रूप में पहचान लेंगे। उन्हें 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);
    }
}

जाहिर है कि आपको नामलेखक वर्ग लिखना होगा, जो सूत्र के आधार पर नाम की गणना करता है। आपको रेगेक्स बनाने की आवश्यकता होगी जो एक बेंजीन रिंग को परिभाषित करता है। आप जिन समूहों को खोजना चाहते हैं, उनमें से प्रत्येक के लिए अतिरिक्त रेगीक्स को परिभाषित करें।

यौगिकों को इस तरह से मॉडलिंग करने का लाभ यह उस भाषा में है जो अंत उपयोगकर्ता के व्यापार डोमेन में है। आपको डेवलपर के रूप में जानने की जरूरत है।

यदि इन रसायनों के संरचनात्मक निरूपण की आवश्यकता है, तो मैं सूत्र के SMILES अभ्यावेदन को बनाए रखने पर विचार कर रहा हूं।

SMILES रासायनिक सूत्र प्रतिनिधित्व


2
आप इस तरह से आइसोमर्स को कैसे संभालते हैं ?

यह बहुत अच्छा सवाल है। यह पता चला है कि इस बारे में पहले ही सोचा जा चुका है। मैंने जवाब में SMILES रासायनिक सूत्र प्रतिनिधित्व पर जानकारी जोड़ी है।
स्टीफन

विभिन्न व्यवस्थित नाम प्रणालियां हैं जिनका उपयोग इस बात के आधार पर भी किया जा सकता है कि आप वास्तव में किन गुणों के लिए मॉडल बनाना चाहते हैं
jk।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.