Nicolas Gourmelon Calcul Scientifique et Symbolique Avancés
9 avril 2014 TP n˚4
Arbres binaires de recherche, 2ème partie
On a étudié au TP précédent le tri par construction d’arbres binaires de recherche. Le coût d’insertion
d’un noeud dans un arbre binaire de recherche est majoré par la profondeur de l’ABR. Si on n’a pas de
chance, il se peut que cette profondeur soit linéaire en la taille de l’ABR. Ceci nous donne un tri dont le
coût est de l’ordre de n2, où nest la longueur de la liste à trier.
Pour éviter cela, on cherche à insérer des noeuds dans un arbre binaire de recherche tout en préservant
un équilibre qu’on va définir.
1 Algèbre linéaire avec Sage
Essayer les commandes suivantes :
sage: v=vector([2,0,1,4])
sage: v ; v*v
sage: v.norm()
sage: v.column()
sage: A=matrix([[2,1],[-1,1]]) ; parent(A)
sage: A1=matrix([[SR(2),1],[-1,1]]) ; parent(A1)
sage: P=A.characteristic_polynomial()
sage: A.eigenvalues()
sage: A1.eigenvalues()
sage: a=A1.eigenvalues()[1] ; a.show()
Expliquer les résultats donnés par les commandes suivantes :
sage: B=matrix([[-1,1,2,1],[2,3,3,0],[0,4,5,5],[2,4,0,1]])
sage: B1=matrix([[-1,1,2,SR(1)],[2,3,3,0],[0,4,5,5],[2,4,0,1]])
sage: C=matrix([[-1,1,2,1,0],[2,3,3,0,0],[0,4,5,5,5],[2,4,0,1,1],[2,4,1,1,0]])
sage: C1=matrix([[-1,1,2,1,SR(0)],[2,3,3,0,0],[0,4,5,5,5],[2,4,0,1,1],[2,4,1,1,0]])
sage: B.eigenvalues()
sage: B1.eigenvalues()
sage: C.eigenvalues()
sage: C1.eigenvalues()
On peut diagonaliser et calculer les matrices de passages à la base diagonalisante grâce aux commandes
suivantes :
sage: A.right_eigenmatrix()
sage: A1.right_eigenmatrix()
sage: Delta=A.right_eigenmatrix()[0]
sage: P=A.right_eigenmatrix()[1]
sage: P*A*P^{-1}
sage: P^{-1}*A*P
Manipulation d’une variable symbolique ’n’ :
sage: 2^n
sage: n=var(’n’)
sage: a=2^n
sage: a.show()
sage: 2*a
sage: factor(2*a)
sage: b=factor(2*a)
sage: b.show()
1