Table des matières

Séquences de brins d'ADN

L'ADN (acide désoxyribonucléique) est constitué d'une suite de nucléotides qui existent en quatre types différents (notés A, C, G et T), du nom des bases adénine (A), cytosine (C), guanine (G) et thymine (T). Les brins s'associent en double hélice par une reproduction assurant une correspondance par paires, A et T d'une part, G et C d'autre part.

Dénombrement de séquences possibles

Énoncé

Programme Python

ADN-combinatoire-01.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
Petit programme destiné à calculer des nombres de séquences ADN possibles
combien de brins différents est-il possible d'obtenir :
    Avec 1 A, 1 C, 1 G et 1 T
    Avec 2 A, 2 C, 2 G et 2 T
    Avec 3 A, 3 C, 3 G et 3 T
    Avec i A, i C, i G et i T (i étant grand)
Variante : Si on considère une synthèse artificielle d'un brin composé
de n bases issue d'un grand réservoir comprenant un nombre équivalent de
chacune des bases, quel est le nombre de brins possibles comprenant
4 bases, 8 bases, 12 bases, 4*i bases ?
Comparaisons de 2 variantes pour des petits nombres et en utilisant
la formule de Striling pour des grands nombres
"""
from math import *
def logfactstir(j):
    # approximation de Stirling pour le logarithme de la factorielle
 
	return j*log(j) - j + log(2.*pi*j)/2.
 
 
n=101
# petits nombres
for i in range(1,n):
    print(i,factorial(4*i)/factorial(i)**4, 4**(4*i))
 
# petits nombres, en log
for i in range(1,n):
    print(i,log(factorial(4*i)/factorial(i)**4), log(4**(4*i)))
 
# grands nombres
# calcul suivant la formule de Stirling (http://fr.wikipedia.org/wiki/Formule_de_Stirling)
# formule de Stirling : ln(j!) ~= j ln(j) - j + 1/2 ln(2πj)
# approximation fréquente en thermodynb : ln(j!) ~= j ln(j) - j
print(pi)
for i in range(100,100*n,100):
    print(i,logfactstir(4*i)-4.*logfactstir(i), 4*i*log(4))
 
# très grands nombres
print(pi)
for i in range(10000,10000*n,10000):
    print(i,logfactstir(4*i)-4.*logfactstir(i), 4*i*log(4))