GithubHelp home page GithubHelp logo

epfl-dojo / kata-sort Goto Github PK

View Code? Open in Web Editor NEW
6.0 4.0 4.0 128 KB

Kata : explorer différents algorithmes de tri

Shell 7.78% Dockerfile 8.91% Ruby 48.95% Lua 34.36%
epfl epfl-dojo epfl-dojo-kata dojo-kata dojo kata

kata-sort's Introduction

Travail en cours !

Contributions, commentaires et autres propositions d'améliorations bienvenues !

TODO

  • Trouver un moyen de générer les données de départ avant les tests, e.g. pour avoir de plus gros tableau, ou de multiplier les tests.
  • Selectionner quelques algorithmes, par exemple 4.
  • Documenter les algorithmes sélectionnés.
  • Tout mettre dans une base couchDB

Kata Sort

Le but de ce kata est d'explorer différents algorithmes de tri.

Documentation / Liens

Comment procéder

Forker le repo et créer une branche (git checkout -b username-langage par exemple git checkout -b ponsfrilus-nodejs, depuis votre fork). Faire ensuite une pull request pour l'ajouter à ce repo en vous ajoutant comme contributeurs en bas de ce fichier.

Problème

Le but de ce kata est de comprendre le fonctionnement des algorithmes de tri (par comparaisons) et de ne pas utiliser les fonctions "built-in" du langages. Il est nécessaire de chronométrer le temps nécessaire au tri de chaque tableau.

Données de départ

Les données à trier sont quatre tableaux générés par le script ./generate_data.sh, stoqués dans le fichier generated_data.json. Les tableaux sont nommés de la manière suivante (pour un appel ./generate_data.sh 500) :

  • data_random : des nombres de 1 à 500 mélangés ;
  • data_nearly_sorted : des nombres de 1 à 500 mélangés par tranche de 10 ;
  • data_reversed : des nombres de 500 à 1 ;
  • data_few_unique : 5 fois les nombres de 100 à 199 mélangés.

Tris

Tri par insertion

En informatique, le tri par insertion est un algorithme de tri classique. La plupart des personnes l'utilisent naturellement pour trier des cartes à jouer. → https://fr.wikipedia.org/wiki/Tri_par_insertion

Tri rapide (Quicksort)

Le tri rapide (en anglais quicksort) est un algorithme de tri inventé par C.A.R. Hoare en 1961 et fondé sur la méthode de conception diviser pour régner. Il est généralement utilisé sur des tableaux, mais peut aussi être adapté aux listes. → https://fr.wikipedia.org/wiki/Tri_rapide

Tri à bulles (Bubble sort)

Le tri à bulles ou tri par propagation est un algorithme de tri. Il consiste à comparer répétitivement les éléments consécutifs d'un tableau, et à les permuter lorsqu'ils sont mal triés. Il doit son nom au fait qu'il déplace rapidement les plus grands éléments en fin de tableau, comme des bulles d'air qui remonteraient rapidement à la surface d'un liquide. → https://fr.wikipedia.org/wiki/Tri_%C3%A0_bulles

Tri à peigne (Comb sort)

Le comb sort ou tri à peigne ou tri de Dobosiewicz est un algorithme de tri assez simple initialement inventé par Wodzimierz Dobosiewicz en 1980. Le comb sort améliore notablement les performances du tri à bulles, et peut rivaliser avec des algorithmes de tri réputés rapides comme le tri rapide (quick sort), le tri fusion (merge sort) ou le tri de Shell (Shell sort). → https://fr.wikipedia.org/wiki/Tri_%C3%A0_peigne

Tri pair-impair (Odd–even sort)

Le tri pair-impair opère en comparant tous les couples d'éléments aux positions paires et impaires consécutives dans une liste et, si un couple est dans le mauvais ordre (le premier élément est supérieur au second), il en échange les deux éléments. → https://fr.wikipedia.org/wiki/Tri_pair-impair

Tri stupide (bogosort)

Le tri stupide consiste à vérifier si les éléments sont ordonnés et s'ils ne le sont pas à mélanger aléatoirement les éléments, puis à répéter l'opération. → https://fr.wikipedia.org/wiki/Tri_stupide

Utilisation

docker build -t epfldojo/katasort .
docker run -it --rm -v $(pwd):/work epfldojo/katasort ruby /work/generate_data.rb
docker run -it --rm -v $(pwd):/work epfldojo/katasort sh /work/bench_all_sort.sh

Contributeurs (langages par ordre alphabétique)

kata-sort's People

Contributors

ponsfrilus avatar sbancal avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  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.