Prediction ia

Fermé
Jeremyprog - 18 janv. 2022 à 16:22
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 19 janv. 2022 à 09:17
Bonjour, est-il possible de faire un programme de prediction ou ia sur une série de chiffres,
Je ne sais pas si bash ou python serai le plus approprié pour faire cela.
Bon je m'explique
Je voudrais dire au programme que la série
183638je7 correspond à gz83j4f58 et lui il trouve une logique entre ces 2 séries.
Ensuite quand je lui donne une série comme udg374g29, j'aimerai qu'il se sert de sa logique pour me prédire série qui lui correspond

Je sais que ce n'est pas très claire

Je pense lui faire une base de données de référence et à chaque fois que je lui donne une série lui me prédit la suite qui correspond
A voir également:

1 réponse

mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
Modifié le 19 janv. 2022 à 09:21
Bonjour,

Ce que tu cherches correspond à mon avis à une distance d'édition. Dans l'idée, une distance d'édition compare deux chaînes de caractères (disons x et y) et regarde le nombre d'opération d'éditions nécessaire pour transformer x en y. Le jeu d'opération de coût minimal définit la distance entre x et y.

Il existe plein de distances d'éditions, chacune étant définie par le jeu d'opération d'éditions qu'elles supportent. En particulier la distance de Levenshtein considère les ajouts, insertions, et remplacement de caractères. Une telle distance est généralement calculée par programmation dynamique. Dans le cas de la distance de Levenshtein, on utilise par exemple l'algorithme de Hunt–Szymanski. C'est cet algorithme qui est au cœur de la commande
diff
utilisée pour comparer deux fichiers à l'échelle de la ligne.

Cela signifie que si tu veux comparer deux chaînes de caractères, une stratégie consiste à les écrire, à raison d'un caractère par ligne, puis utiliser
diff
te permet de retrouver leurs points communs et/ou leurs différences.

echo 183638je7 > fichier1
echo gz83j4f58 > fichier2
sed 's/./\0\n/g' -i fichier1
sed 's/./\0\n/g' -i fichier2
diff --side-by-side fichier1 fichier2


Ici
echo
et
sed
sont utilisés pour créer deux fichiers contenant les deux chaînes à comparer à raison d'un caractère par ligne.
  • fichier1

1
8
3
6
3
8
j
e
7
  • fichier2

g
z
8
3
j
4
f
5
8


La commande
diff
retourne la comparaison entre
fichier1
et
fichier2
:

(mando@aldur) (~) $ diff --side-by-side fichier1 fichier2
1 | g
> z
8 8
3 3
6 <
3 <
8 <
j j
e | 4
7 | f
> 5
> 8



Signification :
  • Chaque ligne contenant un < correspond à une suppression ;
  • Chaque ligne contenant un > correspond à un ajout ;
  • Chaque ligne contenant un | correspond à un remplacement ;


Un outil comme
kompare
, basé sur
diff
, permet de mieux comprendre :



Donc ensuite, en fonction de ce que tu veux faire, tu peux avec
grep
ignorer les lignes qui contiennent <, > ou | et garder la première colonne de caractère avec
cut
:

diff --side-by-side fichier1 fichier2 | egrep -v "\||<|>" | cut -d" " -f1


(attention à bien utiliser à passer dans cut le caractère tabulation). Tu peux aussi utiliser
awk
:

diff --side-by-side fichier1 fichier2 | awk '! /\||<|>/ {print $1}'


Exemple :

(mando@aldur) (~) $ diff --side-by-side fichier1 fichier2 | awk '! /\||<|>/ {print $1}'
8
3
j


Mais bon, à un moment, le shell a ses limites, donc si tu as besoin d'aller plus loin, il faut commencer à envisager des langages plus pratique (par exemple le python).

Bonne chance
0