Concours Centrale Supélec 1999

-

Épreuve :

INFORMAT1QUE
Û(O) = F
û(1) =

Filière

MP

I
(1)
(2)

Notes : Toutes les réponses doivent être justifiées. Pour exprimer les algorithmes, un candidat a le choix entre l'utilisation des langages Pascal ou Caml. Les deux exercices sont indépendants.

v
û(Pl =

YPE p

0)

(3)

Û(TA)= H7(Û(A))

(4)
(5)
(6)

Exercice I Soit P = { p o ,p I ,..., p n , ...> un ensemble dénom,rable de symboles de proposition. On considère l'ensemble A ( P ) des formules propositionnnelles définies sur l'ensemble P comme étant le plus petit ensemble tel que : chaque symbole p , est dans (P) ; les symboles O et 1 sont dans A ( P ) ; si A E ( P ), alors A E , (P) ;

Û(AA B ) = HA(Û(A), Û(B)) Û(Av B ) = H"(Û(A), Û(B)) Û(A3 B ) = H a (Û(A), Û(B))

a

a si A E a ( P ) et ( A * B ) E a (P)

a BE a (P),

alors

(AAB)E (P), (AvB)E

a

(P),

les formules de A ( P ) sont obtenues uniquement par application, un nombre fini de fois, des règles précédentes. 8 f Une formule propositionnelle est représentée par un arbre dont les nœuds sont $ les connecteurs logiques et les feuilles les symboles de proposition, O et 1. On ap$ pelle taille d'une formule la hauteur de l'arbre associé. f On définit le domaine B = ( V , F }des valeurs de vérité. Les connecteurs logiques A , v ,a ont pour tables de vérité associées :
O

7

g g

F F

F

V
V

F F F
V

F
V V V

V V
F

V

V V

F
V

F F

V

i

On appelle valuation toute fonction u : P + B qui assigne une valeur de vérité à un symbole de proposition. Cette valuation u s'étend en une unique fonction Û : A ( P )+ % définie par les égalités suivantes :

(7) Pour une proposition A dépendant de n symboles de proposition distincts p 1 ,.. ., p , , on notera la fonction H , : B" + B qui, pour une valuation u , associe ' à ( ~ ( p ,..., u ( p , ) ) la valeur de vérité Û(A).On dit que H A est la table de uérité ), de la formule A . Si A et B sont deux formules de ( P ), on dit que A et B sont équivalentes, ce que l'on note A = B , si et seulement si quelle que soit la valuation u sur P , Û(A)= û(B) Une formule propositionnelle A est dite satisfiable lorsqu'il existe une valuation u des propositions, qui rend la formule vraie, c'est-à-dire Û(A)= V . C'est une tautologie lorsque toutes les valuations rendent la formule vraie. On s'intéresse dans cet exercice au problème de la satisfiabilité : étant donnée une formule de la logique des propositions, cette formule est-elle satisfiable ? Est-ce une tautologie ? On appelle littéral un symbole de proposition p (littéral positif) ou la négation d'un symbole de proposition Tp (littéral négatif)ou l'une des constantes O, 1. Une clause est une disjonction 1 , v . .. v 1, où les 1, sont des littéraux deux à deux distincts. On notera une clause sous la forme [ l , , ..., I n ] . Une clause duale est une conjonction l A .. . A 1, où les 1, sont des littéraux deux à deux distincts. On notera une clause duale sous la forme < 1,, ..., 1, > . On dit qu'une formule propositionnelle A est une forme normale disjonctive ou forme clausale duale si et seulement si A = D I v D , v ... v D , OÙ chaque D , est une clause duale. Par extension de la notation, on écrira A = ID,, D,, ... , D,]. Le cas n = O correspond àA =O.

a

,

On pourra donc parler par la suite de la forme ou-exclusive normale réd d’une formule propositionnnelle.. de savoir qu’on ne connaît pas d’algorithme général de mise sous forme clausale ou sous forme clausale duale d’une formule propositionelle qui soit de complexité non exponentielle.m. - est une abréviation pour 1. A” = C”. à équivalence près.. alors elles sont identiques à l’ordre près c’està-dire : soit A’ = A” = O . . E . A 1. à permutation près.. est une permutation d’un C“. est non vide.F.. Montrer.F .. n’est un littéral positif. On dira alors que A’ est sous forme ou-exclusive normale réduite. On dit dans ce cas que A est réduite.INFORMATIQUE Filière MP On dit qu’une formule propositionnelle A est une forme normale conjonctive ou forme clausale si et seulement si A = C l A C... on pourra écrire On admettra l’unicité. v (4’ Q ) .. p n + ( n 2 1 ) où tous les p . . réduite à un littéral positif p et une autre E . où chaque C i est une clause. O . O C”.3) En déduire que la satisfiabilité d’une formule de Horn réduite A peut être décidée en temps polynomial en fonction de la taille de A . O est commutatif et associatif et que A est distributif sur 0 .Ci. .2) Dans le cas où A contient une formule de Horn élémentaire E . L I. Montrer que ( O . ce qui signifie que si A’ et A” sont deux telles formules. . Par extension de la notation.C En utilisant les questions précédentes.p l .. Que peut-on en conclure quai la complexité d’un algorithme permettant de convertir une formule proposit nelle sous forme normale ou-exclusive réduite ? On admettra le théorème : “toute formule propositionnelle est équivalente à une forme clausale et est équivalente à une forme clausale duale”. I. > une formule de Horn réduite.. Par convention.. . c’est-à-dire que toute fonction booléene à n arguments est la table de vérité d’une formule propositionnelle A n’utilisant que ces connecteurs et la constante 1 .A .J l’est et si D. pour la suite. les clauses contenant 1 ou à la fois p et lp ).> et A = [O. la formule de Horn élémentaire obtenue en éliminant lp de E . 1 ou C I O C.. on étend la notation duale. 1.] .lpn] n 1 1 ) ou ( [ . 1.. représentent des valeurs propositionnelles distinctes. A C.E On appelle formule de Horn élémentaire toute disjonction de littérat comprenant au plus un littéral positif et formule de Horn toute conjonction di formules de Horn élémentaires.F. où chaque C i est 1 ou une conjonction de littéraux positifs.À quelle condition une formule propositionnelle en forme normale disjonctive réduite est-elle satisfiable ? On définit 0 le connecteur logique : P O & (P ATQ) 1. clausales autres que O ) .D . que A’ peut être choisie de manière à ce que les Ci soient tous distincts (à permutation près) et les littéraux positifs de chaque Ci distincts également (à permutation près). ou [lp.. 0 C. montrer que A est satisfiable si et seulement si la formule A’ obtenue en remplaçant dans A E J par D . Le cas n = O correspond à A = 1 .. > .l) Montrer que dans chacun des deux cas suivants A est satisfiable : ler : cas aucune des formules de Horn élémentaire E . A . 2e cas : toute formule de Horn élémentaire E L contenant un littéral négatif contient aussi un littéral positif. où p = q et chaque C’.. en notant D.. soit A’ = A” = 1 . . O C’. . dans les formes clausales duales autres que 1 (resp.Montrer que. O . 0 .. Par extension. de plus. l p n . 1 ) est fonctionnellement complet..Soit A = < E 1 .. montrer que chaque formule propositionnelle A est équivalente à une autre formule A’ qui est de la forme O. d’une formule sous forme ou-exchsive normale réduite équivalente à une formule donnée A . on écrira A = < C I . 1... on éliminera les clauses duales contenant O ou à la fois p et lp (resp.. soit A’ = C’...Il est intéressant. C . On dira alors que ces formes sont réduites..Montrer qu’une formule propositionnelle est une tautologie si et seulerr si sa forme ou-exclusive normale réduite est 1. si A= v i = l n [ Ci. ] .j) j = 1 où les Ci. Montrer que toute formule de Horn A est équivalente à une conjonction de formules distinctes de la forme: [ p .. - . D. De même. contenant l p . . I. Di = <Ci. .C...F.B ... A ..j sont des formules propositionnelles. .

En réalité. enCaml . Écrire la fonction libere qui va libérer un bloc de mémoire et l'ajouter dans la liste des blocs libres. dont chaque maillon contiendra la .meilleur qui utilise un bloc dont la taille se rapproche le plus de la taille demandée .300. Plus précisément.B On considère maintenant le problème de la libération d'un bloc alloué : il s'agit de remettre ce bloc dans la liste L . E al1oue:int-> adresse= <fun> 1ibere:adresse-> int-> unit= <fun> 'r Deux problèmes se posent immédiatement : trouver une structure de données adéquate pour représenter les blocs libres . et que l'algorithme d'allocation est celui donné par la fonction a1loueDremier. Que donne chacune des deux méthodes ? Laquelle est la plus intéressante ? Montrer par un exemple simple que l'on peut trouver une situation inverse.tail1e:integer). la liste L (pour "libres")contient un seul bloc de taille 2 N et d'adresse O. on utilisera une liste chaînée. En Pascal. $ En Caml. Les indices de ce tableau (qui sont entiers compris entre O et 2N . la mémoire nécessaire pour gérer la liste L est également située dans la mémoire de l'ordinateur. - Filière MP Cette liste de blocs libres peut être triée (par adresses ou tailles) ou non. on stocke l'information nécessaire à cette gestion dans les blocs eux-mêmes. 1. = . on prendra un bloc de taille p + c . l'adresse de ce bloc et un pointeur sur le maillon suivant. écrire : en Caml : la définition du type des éléments de la liste correspondant à la structure de liste nécessaire .1 ) sont appelés adresses. en Pascal : la définition de type correspondant à la structure de liste nécessaire. les fonctions d'allocation et de libération auront pour prototype : en Pascal T 3 - Écrire ensuite dans le langage choisi (Caml ou Pascal) : la fonction alloue_premier qui utilise le premier bloc dans la liste dont la taille est supérieure à la taille demandée . c étant une constante entière petite devant la taille des blocs - . pour allouer (ou spécifier) un bloc libre de taille utile p . - 1I. 1A En supposant la liste des blocs non triée. en fonction des données fournies. La taille de ce tableau est en général une puissance de 2. On peut voir la mémoire centrale d'un ordinateur comme un tableau (ou vecteur) m a . dont les éléments (qui représentent l'unité élémentaire de mémoire) sont appelés mots mémoire (ou mots). Initialement. On se donne la situation de départ et les requêtes suivantes : situation de départ : 2 blocs libres de taille 768 et 512 . Ainsi. Ces allocations et libérations sont effectuées en très grand nombre. Cette liste pourra être considérée comme une variable globale.A.G Soit la formule : - A = ( ( P A q ) v (I^ . Un mot mémoire est de taille suffisante pour stocker une adresse. et de manière totalement imprévisible. en le fusionnant le cas échéant avec d'éventuels blocs adjacents. On suppose que la liste des blocs libres est triée par adresse croissante. procedure libere (ad:adresse. soit 2 N . requêtes consécutives : 500. Les fonctions (ou procédures) d'allocation devront modifier cette liste.400. La fonction alloue. on utilisera une liste. function alloue (taille: integer): adresse. Tout programme exécuté sur l'ordinateur effectue des requêtes mémoire : soit en demandant l'allocation d'un bloc mémoire (une suite contigüe de mots) de taille donnée. Exercice II On examine dans cet exercice le problème de l'allocation mémoire.7 s ) ) A ( q v ( r * + ) ) ) En utilisant la méthode de la question précédente appliquée à la formule . soit en libérant un bloc mémoire. 2 taille du bloc libre en nombre de mots. On prendra garde à fusionner le bloc retourné avec d'éventuels blocs adjacents. c'est à dire que -A n'est pas satisfiable. chaque élément de cette liste contenant la taille 2 du bloc libre en nombre de mots et l'adresse de ce bloc.INFORMATIQUE 1. car elles different à chaque exécution du programme. montrer que A est une tautologie.* ) ) ((Pv ( r . quel algorithme utiliser pour trouver un bloc de taille n et le réserver ? On peut répondre à la première question en créant une liste pour représenter les blocs libres (on verra d'autres possibilités). Au lieu de créer une structure annexe pour la gestion des blocs libres.

. 1 1 + Bloc occupé . libre[]]. une nette tendance se dégage : les blocs de petite taille s’accumulent au début de la liste des blocs libres. le mot situé à l’adresse adr contient la taille p du bloc libre et le mot situé à l’adresse adr + 1 contiendra l’adresse du bloc libre suivant.F -Montrer que si l’on onnaît l’adresse d’un bloc. 1I. . 1I. . Si l’on effectue une requête d’allocation pour un bloc de taille n + 2 k . Cette méthode ne permet d’allouer que des blocs dont la taille est une puissance de 2. Cette nouvelle option est représentée par les schémas qui suivent. mais travailler directement dans le tableau mem.... On simule. alors un bloc de taille 2k telle que 2k . libre[N] en Pascal (resp. un champ h a 1 dont la valeur indique que le bloc est de taille 2 k u a L . les mots supplémentaires servant à stocker de l’information.H ... 1I. libre.D Suggérer une modification simple de l’algorithme pour la fonction alloueqremier de telle sorte que : les blocs de petite taille ne s’accumulent pas en un point particulier de la liste .’et un bloc occupé par des ’+’ .< n I 2k est alloué. un bloc de taille 2k est demandé. un bloc de taille plus importante est coupé en deux. libre.Donner un nouvel algorithme plus efficace pour la fonction libere utilisant la structure de liste doublement chaînée et les marqueurs de début et de fin de bloc. Initialement.Écrire la fonction libere utilisant cette méthode. Les deux blocs obtenus sont qualifiés de jumeaux. En déduire l’intérêt de cette méthode.. L’idée de cet algorithme repose sur la construction de listes de blocs de longueur 2k libres pour chaque O I I N .E .( 1 ) . Pourquoi la liste des blocs doit-elle être doublement chaînée ? 0 0 0 FIN 0 0 0 .( N ) en Caml) les têtes de listes de blocs libres de taille 1 . si bien qu’il faut chercher assez loin dans la liste dès que l’on veut allouer un bloc de taille p pour p suffisamment grand. . Dans les deux questions suivantes. Dans la suite. . Ces listes sont doublement chaînées et triées par adresses croissantes. la liste des blocs libres reste triée par adresse croissante dans le but d’utiliser la fonction libere. Bloc libre 1 - 1I. on peut trouver 2 immédiatement l’adresse 4 4son jumeau. 1I. Après une utilisation répétée de ces deux fonctions avec une situation de départ où toute la mémoire est libre. le bloc proprement dit étant formé des p mots suivants. Finalement. 2 N .( O ) . libre....Modifier les fonctions alloue_premieret libere pour ne plus utiliser de structure de liste annexe. k et si aucun bloc de cette taille n’est disponible.. on réserve un peu de place supplémentaire pour ajouter les informations suivantes : les limites des blocs sont marquées : un bloc libre sera encadré par des ’.G . un lien prec vers le bloc libre précédent . on note: libre[O]. ’ 1I. D’autre part. les blocs libres possèdent deux liens : un lien suiv vers le bloc libre suivant. Chaque bloc mémorise l’information suivante : un champ booléen res indique si le bloc est réservé ou non . une structure de liste doublement chaînée pour les blocs libres de la façon suivante : adr bloc libre précédent dans la liste adr bloc libre suivant dans la liste taiIle . Si adr est l’adresse d’un bloc de mémoire libre. on prendra c = 2 . tout bloc occupé contient également la taille de ce bloc . On peut envisager une troisième méthode pour allouer des blocs de mémoire. la liste des blocs libres est doublement chaînée.Écrire la fonction alloue utilisant cette méthode. .INFORMATIQUE Filière MP réclamés (ce qui ne posera alors aucun problème). 4 . . un bloc de taille 2k apparaît. dans le tableau. 2 .C . On utilisera une variable globale mémorisant une adresse et on écrira l’algorithme modifié.

Sign up to vote on this title
UsefulNot useful