역방향 이진트리 순회를 이용하여 생식세포 DNA를 뽑아내기
2021. 12. 11. 23:47ㆍ프로그래밍
반응형
역방향 이진트리 순회는 아래 그림의 맨 아랫단계에서 출발하여 A까지 도달하는 것을 의미한다.
체세포의 유전형은 AaBb 정도이다. 그렇다면 생식세포의 유전형은 AB, aB, Ab, ab 가 될텐데, 이런 변화를 가져오기 위해서 이진트리를 구축하고 역으로 순회하며 개별 유전형을 쌓아올려야 한다.
int dnalen = dna[Dad].Size();
int countOfAll = (int)Math.Pow(2, dnalen);
DNA[] dnas = new DNA[countOfAll];
char[,] gtForAll = new char[countOfAll, dnalen];
for (int i = dnalen; i > 0; i--)
{
int possibleCount = (int)Math.Pow(2, i);
char switchedGT; bool s = false;
for (int j = 0; j < possibleCount; j++)
{
switchedGT = dna[Convert.ToInt32(s)].Genes[i - 1].Genotype;
for (int k = 0; k < countOfAll / possibleCount; k++)
{
gtForAll[(countOfAll / possibleCount) * j + k, i - 1] = switchedGT;
}
s = !s;
}
}
for (int i = 0; i < countOfAll; i++)
{
var r = Enumerable.Range(0, gtForAll.GetLength(1))
.Select(x => gtForAll[i, x])
.ToArray();
dnas[i] = new DNA(r);
}
return dnas;
반응형
'프로그래밍' 카테고리의 다른 글
Stable Diffusion, WebUI AI 그림 그리기 엔진 이용하기 (0) | 2023.02.07 |
---|---|
lvalue와 rvalue, 그리고 참조자 (0) | 2022.07.23 |
Kaggle 타이타닉 튜토리얼 한글 번역 30 Days Of ML, Day 1 (0) | 2021.08.03 |
MQTT 개념 (0) | 2021.07.25 |
C++ 람다 Lambda 함수와 Capture 구문 (0) | 2021.07.10 |