Forum INFOMATH
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
LEGO Icons 10331 – Le martin-pêcheur
Voir le deal
35 €

Etude des Palindromes

+4
suneddine
methodiX
lamia
Napoléon
8 participants

Page 2 sur 2 Précédent  1, 2

Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Etude des Palindromes

Message par Napoléon Dim 18 Nov - 1:18

Rappel du premier message :

Salut,
Un palindrome est un ensemble de mots qui peuvent être lus de droite à gauche et de gauche à droite tout en conservant le même sens.

Exemples de mots-palindromes:
RADAR, ROTOR, ÉTÉ

Exemples de mots-palindromes:
Engage le jeu que je le gagne
Esope reste ici et se repose.
Elu par cette crapule.
Eh, ça va, la vache ?

On se propose de trouver le meilleur algorithme qui vérifie si une chaine de caractère est un palindrome ou non. On entend par "meilleur algorithme" l'algorithme le plus optimisé, le mois coûteux en temps de calcul et complexité etc...

Vous pouvez proposer vos algorithmes (ou bien code sources C, Pascal, JAVA...) et qu'on discute ensemble leur complexité.

Bonne recherche.

Références et liens utiles:
http://martine6.club.fr/musimage/palindrome/palindromes.htm
http://jose.rouillard.free.fr/PlasticML/hypertext-roles-hierarchiques/2.php?role=3
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7874
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue999/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas


palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par Napoléon Dim 25 Nov - 1:10

La solution de manianis est très claire et bien rédigée.

Code:
   
while (est_pal && i < j)
    {
      est_pal = (mot[i] == mot[j]);
      i++; j--;
    }

la variable "j" est pourtant inutile à mon avis, non?
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7874
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue999/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par manianis Dim 25 Nov - 1:21

La variable j n'est pas si inutile qu'il le semble. La boucle devra s'arrêter au milieu du mot.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6257
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue999/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par Napoléon Dim 25 Nov - 1:41

je rectifie:
je parle de la décrémentation de "j" qui est inutile à mon avis.
on peut s'en passer et gagner une instruction de moins.
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7874
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue999/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par manianis Dim 25 Nov - 1:47

peut être en remplaçant comme ceci :

j = strlen(mot)-1;

while (est_pal && i < j)
{
est_pal = (mot[i] == mot[j-i]);
i++;
}

Attention j'ai remplacé une instruction j++ par j-i qui revient au même.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6257
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue999/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par Napoléon Dim 25 Nov - 1:50

oui Smile c'est exactement ce que je veux dire...

mais avec:

Code:
while (est_pal && i <= j/2)
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7874
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue999/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par manianis Dim 25 Nov - 1:55

C'est le même problème j/2 est évalué avant chaque itération.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6257
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue999/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par Napoléon Dim 25 Nov - 1:58

il ne reste qu'à les prouver par un test sur des instances de grandes tailles... Smile

Mais, ça prouve à tout le monde qu'il faut accorder une grande importance aux instructions qu'on met dans notre code source.
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7874
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue999/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par lamia Dim 25 Nov - 11:15

Admin a écrit:

Wink c'est pas vrai lamia. Le test ne se poursuit pas (haka tawa:p)
Remarque bien l'existence du Return dans la boucle. Il stoppe l'exécution de la méthode dès qu'il y a un caractère mal placé.

Sorry, oui t'as raison. J'ai pas vraiment fait attention Embarassed
lamia
lamia
Modérateur
Modérateur

Féminin
Nombre de messages : 1936
Age : 38
Localisation : Tunis
Réputation : 53
Points : 6803
Date d'inscription : 04/11/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue996/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (996/1000)

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par informix Dim 25 Nov - 22:57

je crois que la complexité de l'algorithme est n/2 où n est la taille du mot.
informix
informix
Nombre Rationnel
Nombre Rationnel

Nombre de messages : 399
Réputation : 4
Points : 6528
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue1000/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (1000/1000)

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par suneddine Dim 25 Nov - 23:49

manianis a écrit:Je propose le code suivant :
Code:

#include
#include

int main()
{
    int i, j;
    char mot[100];
    bool est_pal = true;

    printf("écrire un mot\n");
    gets(mot);

    i = 0;
    j = strlen(mot) - 1;

    while (est_pal && i < j)
    {
      est_pal = (mot[i] == mot[j]);
      i++; j--;
    }

    if (est_pal)
    {
      printf("%s est un mot palindrome\n",mot);
    }
    else
    {
      printf("%s n'est pas un mot palindrome\n",mot);
    }

    return 0;
}

pourquoi on a affecté 0 à i au début?
suneddine
suneddine
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 730
Age : 39
Localisation : tunisie
Réputation : 5
Points : 6324
Date d'inscription : 11/11/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue995/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (995/1000)

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par Napoléon Dim 25 Nov - 23:53

Pour plusieurs raisons:
(1) elle est utilisée dans la conditions while donc elle doit avoir une valeur initiale
(2) elle est utilise dans la boucle (++i) donc elle doit être initialisée avant cette instruction.
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7874
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue999/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par suneddine Lun 26 Nov - 0:14

peut-on l'initialiser à 1? et que va donner mot[0] à la première itération? la première lettre du mot?
suneddine
suneddine
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 730
Age : 39
Localisation : tunisie
Réputation : 5
Points : 6324
Date d'inscription : 11/11/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue995/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (995/1000)

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par Napoléon Lun 26 Nov - 0:20

mot[0] == 1er caractère de la chaine mot.
on ne peut pas l'initialiser à 1. Ca fausse l'algorithme.
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7874
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue999/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par methodiX Mar 27 Nov - 0:14

informix a écrit:je crois que la complexité de l'algorithme est n/2 où n est la taille du mot.

je crois que c'est correct. C'est n/2 la complexité. C'est un algorithme linéaire.
methodiX
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7256
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue1000/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (1000/1000)

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par M.PIRATE Ven 7 Déc - 15:56

good man
----
corrigée par le modérateur

M.PIRATE
Entier Naturel
Entier Naturel

Nombre de messages : 3
Localisation : meknassy
Réputation : 0
Points : 6198
Date d'inscription : 07/12/2007

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par snooper Mer 9 Déc - 0:43

Salut , je suis en 3 éme année Info et voila ma solution
Code:
program SnOOpeR;
uses wincrt;
var
i,j:integer;
ch,ch1:string;
msg:boolean;
begin
read(ch);
i:=length(ch)+1;
j:=0;
msg:=true;
repeat
i:=i-1;
j:=j+1;
ch1[j]:=ch[i];
write(ch1[j]);
if ch[i]=ch[j] then
msg:=true
else msg:=false;
until (msg=false) or (j=length(ch));
if msg=true then
write('oui')
else write('non');
end.

snooper
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 2
Localisation : Bizerte
Réputation : 0
Points : 5468
Date d'inscription : 08/12/2009

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par Napoléon Mer 9 Déc - 16:45

@snooper ta solution n'est pas très correcte... tu sais pourquoi?

suppose que c'est CH est une chaine de caractère vide ? ou contenant un seul caractère? Alors ...

Soit tu dois faire un contrôle sur CH, soit tu utilise la boucle WHILE (Tant Que)..
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7874
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue999/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par methodiX Mer 9 Déc - 21:56

nabiL a écrit:@snooper ta solution n'est pas très correcte... tu sais pourquoi?

suppose que c'est CH est une chaine de caractère vide ? ou contenant un seul caractère? Alors ...

Soit tu dois faire un contrôle sur CH, soit tu utilise la boucle WHILE (Tant Que)..

bon retour ! hal ghiba?
methodiX
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7256
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
palin* - Etude des Palindromes - Page 2 Left_bar_bleue1000/1000palin* - Etude des Palindromes - Page 2 Empty_bar_bleue  (1000/1000)

Revenir en haut Aller en bas

palin* - Etude des Palindromes - Page 2 Empty Re: Etude des Palindromes

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 2 sur 2 Précédent  1, 2

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum