Probleme algorithmique

Fermé
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 - 23 août 2008 à 10:37
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 - 23 août 2008 à 14:02
Bonjour,
j'ai un probleme algorithmique, enfin je trouve pas une idéé pour faire ma fonction :
voilà l'idée:
je dispose d'une table de hachage contenant des mots et chaque mot possede sa liste de coordonnée(num-ligne, position), qui sont stockées dans une liste chainee.
donc cette fonction genere tableau de liste de 2 mots de la facon suivante:
elle concatene les mots qui ont le meme num-ligne et elle teste si ces 2 mots sont successif au moin 2 fois: si c'est le cas, elle les mets dans une seule cellule de la liste, sinon chaque mot dans une cellule à part.
voila un exemple pour mieux comprendre ;)
ca c'est notre table de hachage
bonjour(1,2)(2,3)(3,4)
les (1,3)(2,2)(3,5)
amis(1,4)(2,5)(3,2)
elle doit ressortir ces resultat
"bonjour les "(1,3)(3,5): ils sont successif 2fois ici (pos(mot2)=pos(mot)+1, il faut tenir compte que la position du mot2 doir toujours>mot1
"bonjour amis"((1,4)(2,5)
"les bonjour"(2,3)
"les amis"(1,4)(2,5)
"amis bonjour"(3,4)
"amis les "(3,5)


voilà
je sais que c'est compliqué mais ...
:(
j'attends vos reponses.
merci

1 réponse

chedev Messages postés 48 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 16 avril 2013 2
23 août 2008 à 13:54
Bonjour stroumpf

Je reformule ton problème comme je l'ai compris:
1) Dans un texte, il y a des lignes avec des mots
2) Chaque mot est caractérisé par autant de couples de coordonnées li,po qu'il y a de fois ce mot dans le texte
- li est le numéro de la ligne
- po est la position du mot sur la ligne
3) On cherche à dresser la liste de tous les couples de mots que l'on peut trouver sur une ligne en affectant à chacun de ces couples toutes les coordonnées li,po qui le concernent.

Si c'est bien ça ton problème, le "texte" de ton exemple serait:
--- bonjour les amis ---
--- les bonjour --- amis
--- amis --- bonjour les

Par ailleurs, toujours si j'ai bien compris
- les mots d'un couple doivent être dans l'ordre sur la ligne, mais éventuellement séparés par d'autres mots
- dans le résultat, la position d'un couple est la position de son second élément

Je n'y connais rien en algorithmes, mais voilà comment, sous ces hypothèses, je m'y prendrai:
- Double balayage des mots pour déterminer les couples possibles (sachant qu'il faut définir comment traiter les occurrences multiples du même mot sur une ligne, si c'est un cas possible).
- Puis pour chaque couple possible, rechercher les lignes où se trouve le premier
- Sur chacune de ces lignes, rechercher si le second se trouve plus loin (sur la ligne).
- En cas de succès de cette seconde recherche, ça fait un li,po de plus pour le couple.

C'est très bestial, et il y a sans doute des trucs bien plus subtils, mais je pense que ça doit fonctionner.

Bien sûr, si tu veux traiter les oeuvres complètes de Victor Hugo avec cette méthode, il est possible que tu puises partir en vacances un certain temps après avoir lancé le calcul ...
Mais s'il s'agit d'une simple page, je pense que ça sera plus rapide!

Bon week-end
-1
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 2
23 août 2008 à 14:02
merci Chedev,
ta bien compri oui c'est bien ca,
mais il faut pas revenir au texte, il faut se restreindre au liste des coordonnées.
mais le probleme ici, c'est qu'on me demande de rasssembler les mots qui se suivent plusieurs fois( comme etat unis)
dans un journal on trouve souvent ces 2 mots ensemble donc je veux le considerer un Seul mot.
-1