IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Detection de plagiat entre deux codes


Sujet :

Algorithmes et structures de données

  1. #1
    Membre régulier
    Femme Profil pro
    Elève Ingénieur à l'ENSIAS
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Elève Ingénieur à l'ENSIAS

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Points : 87
    Points
    87
    Par défaut Detection de plagiat entre deux codes
    Bonjour,

    Dans le cadre d'un projet de Intelligence Artificielle, on nous demande de développer un outil de détection de plagiat. J'ai cherché un peu sur google, un algorithme ou une démarche qui pourrait m'aider, mais j'ai presque rien trouver de clair. Avez vous une idée sur ce par quoi je devrait commencer ... ? merci

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour.

    Si je voulais plagier un code je commencerais pas changer les différents identifiants, donc il me semble qu'un détecteur de plagiat doit pouvoir analyser la structure sans tenir compte des noms (même si la recherche de noms similaires demeure utile pour l'estimation finale). Autrement dit je chercherais à comparer des arbres syntaxiques.

    Puis si je voulais plagier je chercherais sans doute à faire un ou deux changements : intervertir quelques "if", remplacer un while par un for. Pour détecter cela j'utiliserais un CFG (control flow graph) couplé à un SSA pour normaliser l'ordonnancement des instructions et le flot. L'idée est d'obtenir une forme canonique. Dans la même veine je réduirais mon arbre syntaxique à quelques instructions élémentaires : au lieu de supporter six opérateurs de comparaison je réduirais à trois (< <= ==), etcétéra.

    Enfin si je voulais plagier je réunirais quelques fonctions et en supprimerais d'autres. Pour détecter cela je chercherais à supprimer les informations sur les fonctions de mon CFG en raccordant directement les CFG de chaque fonction pour former un gros graphe commun à toute l'appli. En supposant qu'avec le SSA ça ne cause pas une explosion de la complexité.


    Et accessoirement une approche plus simple pourrait consister à analyser directement au niveau assembleur : après tout les compilateurs ont tendance à canoniser. Ne resterait qu'à recanoniser un peu et à regarder les relations entre les offsets plutôt que leur valeur absolue, ceux-ci pouvant rapidement changer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conflit entre deux codes : afficher/cacher une div
    Par Shakuro dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/12/2011, 10h48
  2. [MySQL] Permutter entre deux codes à chaque chargement de la page
    Par partage_info dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/10/2011, 13h40
  3. Différence entre deux code
    Par anisprog_2008 dans le forum VB.NET
    Réponses: 0
    Dernier message: 28/10/2008, 12h42
  4. Différence entre deux codes?
    Par benoit13 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/07/2008, 08h53
  5. Detection de collision entres deux cylindres.
    Par Sandro Munda dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 07/11/2006, 14h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo