สิ่งล่อใจแรกกับการสร้างแบบจำลองนี้คือการใช้โครงสร้างข้อมูลแบบต้นไม้สี่ อะตอมของคาร์บอนแต่ละอันมีจุดเชื่อมต่อสี่จุดแต่ละแห่งมีออกซิเจนสองแห่ง ฉันไม่คิดว่านี่เป็นวิธีแก้ปัญหาที่เหมาะสม
ฉันคิดว่าวิธีแก้ปัญหาที่เหมาะสมได้ถูกคิดค้นขึ้นแล้ว โครงสร้างข้อมูลที่ใช้เป็นสตริง
คิดเกี่ยวกับสิ่งนี้. นักเคมีได้ทำการสร้างแบบจำลองสารประกอบอินทรีย์มาเป็นเวลานานแล้ว หากคุณแสดงนักเคมี CH4 พวกเขาจะรับรู้ทันทีว่ามีเทน แสดงให้พวกเขา CH3CH2OH และพวกเขาจะรับรู้ว่าเป็นเอทานอล พวกเขารับรู้สิ่งนี้เพราะพวกเขาระบุการรวมกันของ CH3CH2 เป็นสารประกอบ "eth" (หมายถึงอะตอมคาร์บอนสองอัน) และ OH เป็นกลุ่ม "anol" หรือแอลกอฮอล์
นอกจากนี้เรายังมีวิธีการที่มีอยู่แล้วสำหรับการค้นหาและการระบุ substrings - การแสดงออกปกติ
ดังนั้นเพื่อเป็นตัวแทนสารประกอบอินทรีย์โดยทางโปรแกรมฉันจะกำหนดสารประกอบที่มีสตริงซึ่งแสดงถึงสูตรทางเคมีและสตริงที่กำหนดชื่อทางเคมีของมัน มันอาจมีวิธีการที่ระบุคุณสมบัติ "พิเศษ" ของสารประกอบ
ตัวอย่างคลาสใน 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);
}
}
เห็นได้ชัดว่าคุณจะต้องเขียน classCalculator ซึ่งจะคำนวณชื่อตามสูตร คุณจะต้องสร้าง regex ที่กำหนดแหวนเบนซิน กำหนด regexes พิเศษสำหรับแต่ละกลุ่มที่คุณต้องการค้นหา
ข้อดีของการสร้างแบบจำลองสารประกอบด้วยวิธีนี้คือในภาษาที่อยู่ในโดเมนธุรกิจของผู้ใช้ปลายทาง สิ่งที่คุณเป็นนักพัฒนาจำเป็นต้องรู้คือสายการค้นหาซึ่งสามารถให้ได้อย่างง่ายดายโดยหนังสือหรือนักเคมี
หากจำเป็นต้องมีการแสดงโครงสร้างของสารเคมีเหล่านี้ฉันขอแนะนำให้มองหาการคงไว้ซึ่งการแสดงสูตรของ SMILES
การแสดงสูตรทางเคมีของ SMILES