->ex4 fn rec, ite trouble

part1
Alexandre AGOSTINHO 2 years ago
parent 2c9188ad89
commit b492ee29e1

@ -1,6 +1,6 @@
/**
* SAE 2.02 - Exploration algorithmique dun problème
* Prtie 1 / Exercice _
* Prtie 1 / Exercice 1
* Extrait code C
*/
@ -11,6 +11,7 @@
typedef struct pointCaracteristique {
char nom[NAME_MAX_LEN];
struct pointCaracteristique **tPtsCaract;
} PointCaracteristique;
int nbPtsCaract;
} PointCaracteristique, *Rue;
PointCaracteristique *reseau[NB_PTS_CARACT_MAX];

@ -0,0 +1,31 @@
/**
* SAE 2.02 - Exploration algorithmique dun problème
* Prtie 1 / Exercice 3
* Extrait code C
*/
#define NAME_MAX_LEN 40
#define NB_PTS_CARACT_MAX 10
typedef struct pointCaracteristique {
char nom[NAME_MAX_LEN];
struct pointCaracteristique **tPtsCaract;
int nbPtsCaract;
} PointCaracteristique, *Rue;
PointCaracteristique *reseau[NB_PTS_CARACT_MAX];
// BUT: Savoir si B est directement accessible depuis A
int isAccessDirect(PointCaracteristique A, PointCaracteristique B)
{
for (int i = 0; i < A.nbPtsCaract; i++)
{
if (A.tPtsCaract[i] == &B)
{
return 1;
}
}
return 0;
}

@ -0,0 +1,89 @@
/**
* SAE 2.02 - Exploration algorithmique dun problème
* Prtie 1 / Exercice 4
* Extrait code C
*/
#define NAME_MAX_LEN 40
#define NB_PTS_CARACT_MAX 10
typedef struct pointCaracteristique {
char nom[NAME_MAX_LEN];
struct pointCaracteristique **tPtsCaract;
int nbPtsCaract;
} PointCaracteristique, *Rue;
PointCaracteristique *reseau[NB_PTS_CARACT_MAX];
// BUT: Savoir si B est directement accessible depuis A
int isAccessDirect(PointCaracteristique *A, PointCaracteristique *B)
{
for (int i = 0; i < A->nbPtsCaract; i++)
{
if (A->tPtsCaract[i] == B)
{
return 1;
}
}
return 0;
}
// BUT: Savoir si B est accessible depuis A
// version récusrive
int isAccessREC(PointCaracteristique *A, PointCaracteristique *B)
{
for (int i = 0; i < A->nbPtsCaract; i++)
{
if (isAccessDirect(A, B))
{
return 1;
}
else
{
return isAccessREC(A->tPtsCaract[i], B);
}
}
return 0;
}
// version itérative
int isAccessITE(PointCaracteristique *A, PointCaracteristique *B)
{
int i = 0;
PointCaracteristique *ptsMarque[NB_PTS_CARACT_MAX];
int nbPtsMarque = 0;
PointCaracteristique *ptsTest = A;
// pour tout les points du point testé
for (i = 0; i < ptsTest->nbPtsCaract; i++)
{
// test si point déjà testé
for (int j = 0; j < nbPtsMarque; j++)
{
if (ptsTest == ptsMarque[j])
{
break;
}
}
// test si pour ce point le chemin est direct
if (isAccessDirect(ptsTest, B))
{
return 1;
}
// le point viens d'être testé, il entre dans la liste
ptsMarque[nbPtsMarque++] = ptsTest;
// on teste ensuite le prochain
ptsTest = ptsTest->tPtsCaract[i];
}
return 0;
}

@ -6,18 +6,33 @@
\begin{document}
\section{Partie 1}
\subsection{Question 1}
\quad Pour représenter ce réseaux, je propose la structure de données suivante :
\lstinputlisting[language=C,firstline=8,lastline=16]{code/p1e1.c}
\lstinputlisting[language=C,firstline=8,lastline=17]{code/p1e1.c}
\par\quad La structure du point se compose de son nom et d'un tableau de pointeurs sur d'autre points. Le réseau est ainsi composé d'un tableau de pointeur sur des structures `pointsCaracteristique', elles-même pointant sur une un ou plusieurs point de la liste.
\par\quad Le réseau est caractérisé par ses points caractéristiques. Chaque point connaît les points accessibles de manière direct. Cela permet de représenter les rues et leur sens. Prenons par exemple, une rue qui part du point A et qui a pour destination le point B. Elle sera caractérisée par la présence du point B dans la liste des points accessibles du point A. De cette manière on peut facilement dessiner le réseau et calculer les trajets à suivre. En somme, les pointeurs servent à caractériser les rues et leurs sens.
\subsection{Question 2}
\par\quad Le choix d'une telle structure est fait sur la base de la simplicité d'implémentation. En effet, cette structure est relativement simple. Elle ne travaille quasiment que sur de la manipulation de pointeurs. Le parcours des points caractéristiques est donc facile.
\par\quad De plus, si on se penche sur la complexité de l'implémentation, le nombre d'opérations requise pour le parcours du réseau est proportionnel au nombre de points que l'on parcours. Au pire, tout les points seront parcouru : c'est-à-dire que la complexité maximale s'élève au nombre de point qui compose le réseaux.
\subsection{Question 3}
\par\quad
\subsection{Question 4}
\par\quad
\subsection{Question 5}
\par\quad
\end{document}
Loading…
Cancel
Save