상세 컨텐츠

본문 제목

역방향 이진트리 순회를 이용하여 생식세포 DNA를 뽑아내기

프로그래밍

by 경밤 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;
반응형

관련글 더보기