Code Monkey home page Code Monkey logo

dancinglinks's Introduction

DANCING LINKS

LA COUVERTURE EXACTE DE MATRICE

Le problème de la couverture exacte de matrice (EMC) est un problème d’optimisation combinatoire NP-complet. Étant donnée une matrice contenant uniquement des 0 et des 1, il s’agit de déterminer un sous-ensemble de ses lignes contenant un 1 et un seul par colonne. Pour exemplifier, les lignes 0, 4 est une solution possible du problème EMC suivant.

| 1 0 1 1 |
| 0 1 1 0 |
| 1 1 0 1 |
| 1 0 0 1 |
| 0 1 0 0 |

Une variante de ce problème est d’avoir des colonnes primaires, qui doivent nécessairement être couvertes, et des colonnes secondaires, qui peuvent ne pas être couvertes.

De nombreux problèmes peuvent être réduits au problème d’EMC. Dans ce projet nous avons montré deux applications : le problème de pavage et la solution d’un jeu Sudoku quel- conque.

LES LIENS DANSANTS

Les liens dansants sont une structure de données utilisée dans l’algorithme X, développé par Donald Knuth, qui permet de résoudre le problème de la couverture exacte de matrice.

Dans l’approche de notre projet pour ce problème, nous avons créé une classe "DLXTable" qui représente cette structure et qui est munie d’une méthode Solve() récursive qui implémente l’algorithme X. Pour ce faire, on a dû aussi implémenter d’autres méthodes auxiliaires, comme les méthodes pour lire l’entrée, pour couvrir/découvrir une colonne, sauvegarder et imprimer les sorties de l’algorithme.

Dans le code que nous vous avons fourni, on imprime la quantité totale de solutions ainsi que la première solution. Si besoin, notre code peut être très facilement changé pour imprimer toutes les solutions.

En ce qui concerne les structures auxiliaires, nous avons utilisé deux classes "Cell" et "Co- lumns" (qui hérite de Cell) pour représenter les cellules avec des 1’s et les cellules correspondant aux colonnes dans la structure des liens dansants.

En ce qui concerne l’algorithme, nous avons utilisé l’optimisation suggérée par l’article de Donald Knuth, selon laquelle il fallait toujours couvrir la colonne avec le moins d’éléments restants avant de faire l’appel récursif. Cela permet d’avoir moins de branches dans l’arbre de récursion.

SCREENSHOTS

Application au problème du pavage

Alt text

dancinglinks's People

Contributors

dieggoluis avatar hfiuza avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.