Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sinchronisation de dev et master pour partir sur la même base #5

Merged
merged 16 commits into from
May 13, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,9 @@
*.i*86
*.x86_64
*.hex


# Fichiers tex temporaires
*.aux
*.log
*.synctex.gz
191 changes: 191 additions & 0 deletions resources/projet_it2.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
<head>
<title>Projet Informatique théorique 2</title>
<!-- 2014-04-11 Fri 19:47 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="generator" content="Org-mode" />
<meta name="author" content="Marc" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center; }
.todo { font-family: monospace; color: red; }
.done { color: green; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.right { margin-left: auto; margin-right: 0px; text-align: right; }
.left { margin-left: 0px; margin-right: auto; text-align: left; }
.center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
pre.src-sh:before { content: 'sh'; }
pre.src-bash:before { content: 'sh'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-R:before { content: 'R'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-java:before { content: 'Java'; }
pre.src-sql:before { content: 'SQL'; }

table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.right { text-align: center; }
th.left { text-align: center; }
th.center { text-align: center; }
td.right { text-align: right; }
td.left { text-align: left; }
td.center { text-align: center; }
dt { font-weight: bold; }
.footpara:nth-child(2) { display: inline; }
.footpara { display: block; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
/*]]>*/-->
</style>
<style type="text/css"> pre.src { background-color: #00001a; color: #fff; } body { font-family: sans-serif, sans; font-size:11pt;} a {text-decoration: none; color:#0072b2;} a:visited {text-decoration: none; color:#0072b2;} a:hover {text-decoration: none; background-color:#fed077; color:#000;}</style>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.

Copyright (C) 2012-2013 Free Software Foundation, Inc.

The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.

As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.


@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
</script>
</head>
<body>
<div id="content">
<h1 class="title">Projet Informatique théorique 2</h1>
<p>
Le projet est à réaliser par équipes de 3 personnes maximum. Il comporte une partie à rédiger sur papier, et un programme.
</p>

<p>
Dates de remise (attention, dates <b>strictes</b>) :
</p>
<ul class="org-ul">
<li>Vendredi 9 mai 2014, 12h00 pour la partie à rédiger,
</li>
<li>Mercredi 14 mai 2014, 12h00 pour le programme.
</li>
</ul>

<p>
Contrairement au projet de l'UE AS&amp;PP3, il n'y aura pas de soutenance et on ne
demande pas de rapport, mais le code doit être bien commenté.
La notation tiendra compte du degré de réalisation du sujet,
de la qualité du code (portabilité, lisibilité, documentation),
et du jeu de tests.
</p>

<p>
Les réponses à la partie à rédiger (<a href="http://www.labri.fr/perso/zeitoun/enseignement/AS+IT2/uploads/Site/InfoTh%C3%A9orique2/theo.pdf">lien</a>) sont à rendre au format pdf, de
préférence produit par LaTeX, par mail à l'adresse <a href="mailto:it2@labri.fr">it2@labri.fr</a>.
</p>

<p>
La programme est à rendre au format archive <b><code>tar</code></b> compressée par <b><code>gzip</code></b>, sous
le nom <b><code>nom1-nom2-nom3.tgz</code></b> par mail à l'adresse <a href="mailto:it2@labri.fr">it2@labri.fr</a>. La
décompression de l'archive doit fournir un répertoire <b><code>nom1-nom2-nom3</code></b> dans
lequel se trouveront les fichiers.
</p>

<p>
La partie programmation consiste à compléter le fichier <b><code>automate.c</code></b> fourni
dans l'archive <a href="http://www.labri.fr/perso/zeitoun/enseignement/AS+IT2/uploads/Site/InfoTh%C3%A9orique2/projet-2014.tgz">projet-2014.tgz</a>. L'interface <b><code>automate.h</code></b> contient les
prototypes des fonctions, dont celles à implémenter. Le code est commenté. Des
tests sont fournis dans le fichier <b><code>evaluation.c</code></b>. Les seuls fichiers à
modifier sont les fichiers <b><code>automate.c</code></b> et <b><code>evaluation.c</code></b> (les autres seront
remplacés par les fichiers originaux lors des tests). Vous <span class="underline"><b>devez</b></span> également
utiliser le fichier <b><code>makefile</code></b> fourni. Il produit un exécutable <b><code>evaluation</code></b> qui
lance les tests et affiche le nombre de tests réussis et le nombre de tests
échoués. Par défaut, les tests sont lancés avec un automate vide. Il est
conseillé d'ajouter des tests par vous-mêmes car nous utiliserons un fichier plus complet
lors de l'évaluation.
</p>
</div>
</body>
</html>
Binary file added resources/theo.pdf
Binary file not shown.
134 changes: 134 additions & 0 deletions resources/theo.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
\documentclass{article}
\usepackage[french]{babel}
\usepackage{graphicx}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\pagenumbering{arabic}

\title{Partie théorique - Projet d'Informatique Théorique}
\author{Nicolas Endredi - Baptiste Oruezabal - Rémi Schiano}

\begin{document}

\maketitle

\newpage

\section{Question 1}

Soit A un automate et m un mot du langage reconnu par ce dernier. Alors, m peut s'écrire de la façon suivante :
\[
m = ik_{0}q_{1}k_{1}...k_{n}f
\]
avec K ensemble des lettres du mot de longueur n, q ensemble des états du mots, i état initial et f état final.

Or par définition, le miroir de l'automate inverse toutes les transitions ainsi que les états finaux et initiaux. On obtient alors le mot m' suivant

\[
m' = fk_{n}....k_{1}q_{1}k_{0}i
\]

On en déduit que
\[
m' = MIR(m)
\]


\section{Question 2}

Soit w un mot du langage de l'automate et MIR(w) son miroir.

Prenons
\[w = uv \] et \[MIR(w) = u'v' \]
tels que u est le langage à gauche, v le langage à droite et u' langage à droite et v' langage à gauche. De plus |u| = |u'| et |v| = |v'|.

Supposons que \[ MIR(v') \neq v\] On a par définition, \[MIR(MIR(w)) = w \] Donc \[MIR(v'u') = uv \] Or \[MIR(v') \neq v \] Par conséquent, \[MIR(v'u') \neq uv\]

Donc MIR(w) n'est pas w. Ce qui est absurde.

Conclusion : le miroir du miroir du langage à gauche est le langage à droite. Même raisonnement pour le langage à droite du miroir.

\section{Question 3}

On suppose

\[ L_d^{DET(A)}(R) \neq \bigcup_{r \in R} L _d^A(r)\]

Soit \[q_1xq_2\] une transition de l'automate de \[L_d^A(R)\] alors
\[\exists q_1xq_2 \in L_d^A(R) | q_1xq_2' \notin L_d^{DET(A)}\]
avec \[ q_2 \subseteq q_2'\]
Donc DET(A) n'est pas l'automate déterministe de A. Ce qui est absurde.

Conclusion :
\[ L_d^{DET(A)}(R) = \bigcup_{r \in R} L _d^A(r)\]

\section{Question 4}

Par définition, un automate déterministe ne dispose que d'un seul état initial et chaque état dispose d'au plus une transition avec la même lettre.
Par conséquent, à partir d'un état, on ne peut pas arriver sur deux états différents avec la m\^eme lettre.

\[ \forall q, r \in Q | q \neq r, DET(A) \Rightarrow |I| = 1 \wedge L_g^A(q) \bigcap L_g^A(r) = \emptyset \]

Ce qui est vrai par définition.

Supposons que \[ DET(A) \Leftarrow |I| \neq 1 \vee L_g^A(q) \bigcap L_g^A(r) \neq \emptyset \]

Or, par définition, un automate déterministe ne peut avoir qu'un seul état initial.
Donc on a

\[ DET(A) \Leftarrow \forall q, r \in Q | q \neq r, L_g^A(q) \bigcap L_g^A(r) \neq \emptyset \]

Si l'intersection des langages gauche de deux états différents est non vide, alors il dispose d'au moins un mot en commun. Par conséquent, à un moment donné il y a eu deux transitions avec la même lettre partant d'un état. Ceci étant en contradiction avec la définition d'un automate déterministe.

On a donc

\[ \forall q, r \in Q | q \neq r, DET(A) \Leftarrow |I| = 1 \wedge L_g^A(q) \bigcap L_g^A(r) = \emptyset \]

On en déduit que

\[ \forall q, r \in Q | q \neq r, DET(A) \iff |I| = 1 \wedge L_g^A(q) \bigcap L_g^A(r) = \emptyset \]

\section{Question 5}

Soit A un automate déterministe dont tous les états sont accessibles. Ainsi, pour que A soit minimal, il est nécessaire et suffisant que

\[ \forall q, r \in Q | q \neq r, L_d^A(q) \bigcap L_d^A(r) = \emptyset \]

En effet, si les intersection de langages ne sont pas vides, cela signifie que l'on peut obtenir au moins un mot de deux façons différentes. On pourrait donc fusionner des états et l'automate ne serait pas minimal.

\section{Question 6}

Soit A un automate. Lorsqu'on déterminise le miroir de A, on obtient d'après la question 4

\[ DET(A) \Leftarrow \forall q, r \in Q | q \neq r, L_g^A(q) \bigcap L_g^A(r) \neq \emptyset \]

Si l'on fait le miroir de l'automate déterministe précédent, alors grâce à la question 2 on a

\[ DET(A) \Leftarrow \forall q, r \in Q | q \neq r, L_d^A(q) \bigcap L_d^A(r) \neq \emptyset \]

puisque \[L_g^A(q) = L_d^{MIR(A)}(q)\]

Lors de la dernière déterminisation, on obtient

\[DET(A) \Leftarrow \forall q, r \in Q | q \neq r, L_d^A(q) \bigcap L_d^A(r) \neq \emptyset \wedge L_g^A(q) \bigcap L_g^A(r) = \emptyset\]

On en déduit d'après la question 5 que

DET(MIR(DET(MIR(A)))) est minimal.

\section{Question 7}

Si l'on considère le pire des cas, la déterminisation ne change ni le nombre d'états ni le nombre de transitions et sera donc de complexité
\[O(2^n)\] où n est le nombre d'états de l'automate.

D'autre part, l'opération miroir ne changeant pas non plus le nombre d'états (il s'agit d'une simple inversion d'ensembles ou de transitions), la complexité sera de
\[ O(an^2) \]
où a est la taille de l'alphabet.
La complexité de la déterminisation du miroir sera donc de

\[O(an^2 + 2^n)\]

Etant donné que nous effectuons deux fois la déterminisation du miroir au final, la complexité dans le pire des cas sera de
\[O(4^n+ an^2)\]

\end{document}
Loading