분자를 나타내는 데 사용할 수있는 좋은 데이터 구조가 있습니까?
모든 원자를 꼭짓점으로 만들어서 그래프로 표현할 수 있다고 생각했지만 유기 화합물에는 많은 탄소와 수소가있는 것이 일반적입니다. 어떻게 번호를 매길까요? 분자를 나타내는 좋은 방법이 있지만 동시에 효율적인 .contains()
방법이 있습니까?
이를위한 가장 기본적인 용도 중 하나는 화합물에 카르보닐기, 벤질 수소 또는 벤젠 고리가 포함되어 있는지 확인하는 것입니다.
분자를 나타내는 데 사용할 수있는 좋은 데이터 구조가 있습니까?
모든 원자를 꼭짓점으로 만들어서 그래프로 표현할 수 있다고 생각했지만 유기 화합물에는 많은 탄소와 수소가있는 것이 일반적입니다. 어떻게 번호를 매길까요? 분자를 나타내는 좋은 방법이 있지만 동시에 효율적인 .contains()
방법이 있습니까?
이를위한 가장 기본적인 용도 중 하나는 화합물에 카르보닐기, 벤질 수소 또는 벤젠 고리가 포함되어 있는지 확인하는 것입니다.
답변:
(30 년 소프트웨어 개발 경험을 가진 생화학 졸업)
비유 기 분자는 "상대적으로"단순하다. 흥미로운 것은 C, N, O, Si와 같이 서로 결합 할 수있는 것입니다. 왜냐하면 정말 펑키 한 조합을 얻을 수 있기 때문입니다. 벤젠 고리는 매우 간단한 예입니다. 일부 변형은 탄소 중 하나를 질소로 대체하고 이상하게됩니다.
다양한 유형의 원자를 상속 한 "원자"개체부터 시작하겠습니다.
각 "원자"개체는 다양한 결합을 나타내는 원자 개체의 목록을 포함하므로 질소는 고정 크기 3의 목록을 갖게됩니다. 그런 다음 세 개의 다른 원자에 대한 링크를 저장할 수 있습니다. 이중 결합은 중복 항목으로 표시 될 수 있습니다.
각 원자에는 법적으로 결합 할 수있는 방법과 방법에 대한 규칙이 포함되어 있습니다.
따라서 탄소 # 1의 결합 3이 수소 2의 결합 1에 연결되어 있기 때문에 합리적으로 복잡한 분자를 명확하게 구성 할 수 있습니다.
이해가 되길 바랍니다 ...
이것을 모델링 한 첫 번째 유혹은 쿼드 트리 스타일 데이터 구조를 사용하는 것입니다. 각각의 탄소 원자는 4 개의 연결부, 각각의 산소 2 개 및 각각의 수소 1 개를 갖는다. 나는 이것이 올바른 해결책이라고 생각하지 않습니다.
적절한 해결책이 이미 발명되었다고 생각합니다. 사용할 데이터 구조는 문자열입니다.
이것에 대해 생각하다. 화학자들은 유기 화합물을 오랫동안 오랫동안 모델링 해 왔습니다. 화학자 CH4를 보여 주면 즉시 메탄으로 인식합니다. CH3CH2OH를 보여 주면 에탄올로 인식합니다. 그들은 CH3CH2 조합을 "eth"화합물 (두 탄소 원자를 의미 함)로, OH를 "anol"또는 알코올 그룹으로 식별하기 때문에이를 인식합니다.
하위 문자열 (정규 표현식)을 검색하고 식별하기위한 기존의 방법론도 있습니다.
따라서 프로그래밍 방식으로 유기 화합물을 나타 내기 위해 화학식을 나타내는 문자열과 화학 이름을 정의하는 문자열을 포함하는 것으로 정의합니다. 화합물이 갖는 "특별한"특성을 식별하는 방법을 가질 수있다.
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 표현을 유지하는 것이 좋습니다.