jQuery
En savoir plus
Adobe Flex & Flash
En savoir plus
ASP.NET
En savoir plus

Inscris-toi au e-camp "Héberge ton jeu Facebook sur Azure" de Microsoft vendredi 25 mai à 13h30 !
| Page Précédente 1 2 3 ... 5 6 7 8 | |||||||||||
| Auteur | Message | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 visiteur sur ce sujet (1 Anonyme) | |||||||||||
| Page Précédente 1 2 3 ... 5 6 7 8 | |||||||||||
yoch
|
# Posté le 07/10/2010 à 12:50:54 | ||||||||||
![]()
|
Reprise du dernier message de la page précédente :
Arbre binaire de recherche équilibré - AVLPrincipeLe principe d'un arbre équilibré est de garantir des opérations (recherche, suppression) en temps O(log n) dans un arbre binaire, en introduisant un système permettant à l'arbre de rester équilibré - c'est à dire que l'écart entre le nombre de fils de chaque noeud reste toujours optimal. C'est ce qui va permettre de rendre un arbre binaire de recherche réellement intéressant. Le premier type d'arbre de ce genre inventé est l'arbre AVL, c'est aussi l'un des plus simple à mettre en oeuvre. Le principe est d'introduire un mécanisme de rotations des branches de l'arbre au cours de l'insertion et de la suppression pour garantir l'équilibre dudit arbre. se rapporter à la page Wikipédia pour plus d'informations. ComplexitéL'insertion et la suppression de clé se font en O(log n). Bien que ce soit moins bien qu'avec une Hashtable, les ABR équilibrés restent extrêmement utilisés, notament en raison d'une plus grande souplesse de gestion de mémoire O(n). [C] ImplémentationLa majorité des langages évolués fournissent ce genre d'outil. Ce type d'arbre existe certainement dans des bibliothèques C, mais ne fait pas partie de la lib standard. Voici une implémentation générique en C : Code : C
Édité
le 07/10/2010 à 12:51:52
par yoch
|
||||||||||
| Publicité | # Posté le 07/10/2010 à 12:50:54 | ||||||||||
|
|
|||||||||||
QuentinC 2
|
# Posté le 09/10/2010 à 14:13:19 | ||||||||||
|
Étudiant qui bosse... ou pas
|
Recherche de chemin: A*PrincipeA* est un algorythme de recherche de chemin axé sur la performance, c'est-à-dire qui trouvera un chemin assez rapidement mais pas forcément le plus court (généralement assez proche quand même), par opposition à un algorythme qui recherche à tout prix la solution la plus courte mais nécéssitant plus de temps (algorythme de Dijkstra). Vous trouverez plus de détails sur cet algorythme dans ce tutoriel. ComplexitéL'algorythme de Dijkstra étant en o((m+n)*ln(n)), on espère qu'A* est généralement meilleur pour un terrain pas trop accidenté. Il faut quand même noter qu'il met pas mal de temps avant de se rendre compte qu'un chemin est impossible sur de grand graphes, spécialement entre deux composantes connexes (typiquement, deux îles séparées par la mer sur une carte) JavaCette impémentation est indépendante des données manipulées. La seule restriction que vous avez est que chaque noeud doit implémenter l'interface Node et que la distance entre deux noeuds d'un même graphe soit cohérente. L'interface Node que vous devez implémenter : Code : Java
Puis l'algorythme proprement dit: Code : Java
Qu'on peut très facilement utiliser de cette manière : Code : Java
L'objet paramètre est une donnée utilisateur qui sera passée à chaque appel de getDistanceTo. ON peut ainsi passer des critères de recherches spécifiques par exemple. Améliorations possibles: encore plus profiter de la généricité. Voilà, amusez-vous bien ! Il y a 3 types de mathématiciens: ceux qui savent compter, et ceux qui ne savent pas. Javascript, php, html, jeux, blagues, etc. == http://quentinc.net/ |
||||||||||
hedi07
|
# Posté le 09/10/2010 à 14:44:17 | ||||||||||
|
Ville : Annemasse |
|||||||||||
QuentinC 2
|
# Posté le 09/10/2010 à 17:07:11 | ||||||||||
|
Étudiant qui bosse... ou pas
|
Citation
QuentinC 2>>l'indentation a pas du aimer le copier coller... C'est pas grave. Il est plus que probable que celui qui en fera un copier-coller le fera dans un IDE qui le réindentera automatiquement. La vraie raison c'est que je ne sais pas pourquoi...
Édité
le 09/10/2010 à 17:12:32
par QuentinC 2
Il y a 3 types de mathématiciens: ceux qui savent compter, et ceux qui ne savent pas. Javascript, php, html, jeux, blagues, etc. == http://quentinc.net/ |
||||||||||
khdra
|
# Posté le 03/11/2010 à 21:55:01 | ||||||||||
|
|
meci
|
||||||||||
rks`
|
# Posté le 03/11/2010 à 22:03:52 | ||||||||||
![]()
Études : Paris 7 Denis Diderot |
|||||||||||
Pouet_forever
|
# Posté le 07/11/2010 à 20:45:59 | ||||||||||
Trance forever :)![]()
|
Spéciale dédicace, le PGCD :
Code : Autre
![]() ![]() La musique du moment : Marcel Woods - Advanced (Tiësto remix) [Le préprocesseur C] Fan officiel de Tiësto ! |
||||||||||
Lithrein
|
# Posté le 07/11/2010 à 21:30:49 | ||||||||||
日本語を勉強する。![]()
|
@Pouet-forever : En quel langage est-ce ?
« Les petites modifications font les grands changements. » Membre du comité anti-PGCD [Blog] | [The Ultimate Answer to life, the Universe and Everything] | ![]() |
||||||||||
Pouet_forever
|
# Posté le 07/11/2010 à 21:32:39 | ||||||||||
Trance forever :)![]()
|
En J.
![]() ![]() La musique du moment : Marcel Woods - Advanced (Tiësto remix) [Le préprocesseur C] Fan officiel de Tiësto ! |
||||||||||
Yannshu
|
# Posté le 01/03/2011 à 12:27:32 | ||||||||||
while (1337)![]()
|
Hello !
Un petit AStar en C++, fait assez rapidement ![]() Secret (cliquez pour afficher) Code : C++ - AStar.h
Code : C++ - AStar.cpp
Code : C++ - PathFinder.h
Code : C++ - Graph.h
Code : C++ - Node.h
J'ai mis ici uniquement le code des structures de données utilisées, et celui de l'algo. Si vous voulez un exemple concret d'utilisation de cet algo, vous en trouverez un ici : http://yannshu.com/code/cpp/PathFinder-Bin+Code.zip Cet exemple contient un exécutable compilé pour windows, ainsi que la totalité du code source. Projet en cours : Camera Games : Jouez avec votre caméra Blog : http://blog.yannshu.com And : http://china.yannshu.com |
||||||||||
yoch
|
# Posté le 20/03/2011 à 11:40:47 | ||||||||||
![]()
|
File de priorité - avec itérateurs (C++)Bonjour, Ayant eu besoin d'une file de priorité itérable en C++, ce qui n'est pas possible avec le conteneur <priority_queue>, voici ma mouture personnelle : Code : C++
Le principe est très simple : on réutilise le conteneur <vector>, que l'on utilise conjointement avec les fonction push_heap() et pop_heap() (définies dans <algorithm>) pour gérer la file de priorité. Et enfin, un typedef pour redéfinir les itérateurs. Seuls les const_iterator sont fournis, pour que l'utilisateur ne puisse pas corrompre le heap.
Édité
le 20/03/2011 à 11:42:06
par yoch
|
||||||||||
Yannshu
|
# Posté le 21/03/2011 à 23:46:45 | ||||||||||
while (1337)![]()
|
Sympa
![]() Ça me rappelle une std::stack mutante itérable que j'avais codé il y a quelques temps.. J'vais essayer de retrouver ça ! Par contre, ajouter des éléments dans un vector avec des push_back, c'est pas génial il me semble... Citation : http://www.cplusplus.com/reference/stl/vector/push_back/ This effectively increases the vector size by one, which causes a reallocation of the internal allocated storage if the vector size was equal to the vector capacity before the call.
Projet en cours : Camera Games : Jouez avec votre caméra Blog : http://blog.yannshu.com And : http://china.yannshu.com |
||||||||||
yoch
|
# Posté le 22/03/2011 à 08:41:57 | ||||||||||
![]()
|
Citation : Yannshu
Par contre, ajouter des éléments dans un vector avec des push_back, c'est pas génial il me semble... Comprends pas le problème, avec quoi tu voudrais ajouter des éléments (un par un) sinon ? Et puis, les réallocation sont censées arriver plutôt rarement : Citation : http://www.cplusplus.com/reference/stl/vector/push_back/ This effectively increases the vector size by one, which causes a reallocation of the internal allocated storage if the vector size was equal to the vector capacity before the call. |
||||||||||
Pole
|
# Posté le 23/03/2011 à 13:43:25 | ||||||||||
Chieur professionnel![]()
|
C'est du O(1) en amorti le push_back.
Les caisses sont vides Traité européen de 1965 : Citation : Traité FONCTIONNAIRES ET AGENTS DES COMMUNAUTÉS EUROPÉENNES Article 12 Sur le territoire de chacun des États membres et quelle que soit leur nationalité, les fonctionnaires et autres agents des Communautés: a) jouissent de l'immunité de juridiction pour les actes accomplis par eux, y compris leurs paroles et écrits, en leur qualité officielle, sous réserve de l'application des dispositions des traités relatives, d'une part, aux règles de la responsabilité des fonctionnaires et agents envers les Communautés et, d'autre part, à la compétence de la Cour pour statuer sur les litiges entre les Communautés et leurs fonctionnaires et autres agents. Ils continueront à bénéficier de cette immunité après la cessation de leurs fonctions, |
||||||||||
MichaM
|
# Posté le 10/04/2011 à 21:37:22 | ||||||||||
|
|
Bonjour j'aimerai proposer ma propre version du quicksort en Ocaml en version list. Elle ressemble beaucoup a celle déjà faites mais bon je veut quand même partager
![]() Quicksort Code : OCaml
Crible d'Erathostène Il a été écrit en C et je l'ai pas vu en Ocaml alors le voila Pour l'explication vous pouvez aller voir le premier post sur ce sujet. La grande différence c'est que j'utilise True et False au lieu de chiffre dans mon tableau Code : OCaml
Ok puisque j'y suis voici un Quicksort avec des vecteur en Ocaml Code : OCaml
Édité
le 11/04/2011 à 00:17:28
par MichaM
|
||||||||||
The Doctor
|
# Posté le 23/07/2011 à 00:08:24 | ||||||||||
You Are Not Alone![]()
Ville : Paris |
Pathfinder : DijkstraPrincipeL'algorithme de Dijkstra (du nom de son inventeur) permet de parcourir un graphe quelconque pondéré (à la différence du BFS) et d'en déduire le plus court chemin d'un noeud A à tous les autres noeuds du graphe. Le principe de l'algorithme est le suivant, pour chaque noeud considéré (le premier étant le noeud de départ) on ajoute ses voisins (si ils n'ont pas déjà été vus) dans une structure qui va nous permettre de déterminer efficacement lequel de tous les noeuds ajoutés non visité est le plus proche. La structure la mieux adaptée pour répondre à cette question est un tas (ou file à priorité), on code un tas en utilisant un arbre binaire ou tout simplement on se sert du conteneur prioirty_queue de la stl prévu à cet effet. L'algorithme s'arrête quand tous les noeuds du graphe ont été visités (ou quand le noeud d'arrivé est atteint, selon implémentation). Attention, les pondérations se doivent d'être positives. ComplexitéOn considérera qu'un noeud contient comme information sa distance au noeud de départ. Le pseudo code de notre algorithme est le suivant : Ajoute noeud de départ dans tas Tans que le tas n'est pas vide |noeud_courrant = sommet du tas |enleve noeud du tas | |Pour chaque voisin ||Si le voisin n'a jamais été vu |||Marquer le voisin à vu |||noeud_voisin.distance = noeud_courrant.distance + poids_arête[noeud_courrant][noeud_voisin] |||distance_noeud_depart[noeud_voisin] = noeud_voisin.distance |||Ajouter le noeud_voisin au tas Les opérations d'ajout dans le tas se font en ln(nbNoeuds) et on passera par chaque arc une fois, soit une compléxité de : O((nbNoeuds + nbArcs) * ln(nbNoeuds)) [C++] Implémentation avec priority queueCode : C++
The Doctor
Édité
le 24/07/2011 à 00:15:22
par The Doctor
#LGDF: The Doctor vaincra ! roket sur france-ioi et sur Prologin Ubuntu Prologin 2010 Prologin 2011 Mad Santa |
||||||||||
Chlab_lak
|
# Posté le 09/08/2011 à 15:31:56 | ||||||||||
=]:-)--|--<![]()
Études : Ecole Supérieure de l'ETML |
Je ne sais pas si cela a été dit, mais pour le C++ l'entête <algorithm> offre déjà un bon panel d'algorithmes tout prêts -> http://en.cppreference.com/w/cpp/algorithm
Teeworlds : Jeu addictif et gratuit | Developpez.com : FAQ C++ | Boost.org : La bibliothèque des programmeurs C++ | Siteduzero.com : Charte du forum C++ | Wikibooks.org : Tous les idiomes du C++ | Gotw.ca : Les archives des "Guru of the Week" | Crossbowlabs.com : Principes avancés de conception objet | H-deb : Site d'un professeur | Fclc++ : Un forum C++ avancé | Roguewave.com : Documentation C++ | Dinkumware.com : Documentation C++ | cppreference.com : Documentation C++ |
||||||||||
willy969
|
# Posté le 29/01/2012 à 22:24:52 | ||||||||||
|
Groupe : Bannis
|
@The Doctor: on aurait aimé un peu plus d'encapsulation. Là tu exposes complètement la structure que tu utilises… c'est pas très joli-joli.
|
||||||||||
The Doctor
|
# Posté le 30/01/2012 à 07:36:51 | ||||||||||
You Are Not Alone![]()
Ville : Paris |
Je fais de l'algo moi, pas de la prog.
#LGDF: The Doctor vaincra ! roket sur france-ioi et sur Prologin Ubuntu Prologin 2010 Prologin 2011 Mad Santa |
||||||||||
Cygal
|
# Posté le 01/02/2012 à 08:44:58 | ||||||||||
X-No-Archive: yes![]()
|
(The Doctor, il n'y a qu'un seul r à arête)
|
||||||||||
The Doctor
|
# Posté le 01/02/2012 à 21:58:53 | ||||||||||
You Are Not Alone![]()
Ville : Paris |
Oups, décidément je ne le retiendrai jamais.
#LGDF: The Doctor vaincra ! roket sur france-ioi et sur Prologin Ubuntu Prologin 2010 Prologin 2011 Mad Santa |
||||||||||
thejml
|
# Posté le 21/04/2012 à 22:00:46 | ||||||||||
|
|
Calcul du plus petit commun multiple de deux nombres entiers positifs : PPCMPrincipeLe PPCM (lowest common multiple LCM en anglais mais j'ai trouvé d'autres acronymes comme Integer Less Common Multiple) est utilisé dans différentes opérations, il permet notamment de réduire des fractions. Il est très utilisé dans les opérations de chiffrement. Le PPCM constitue le plus petit entier qui soit un multiple commun des nombres dont on recherche le PPCM. Ainsi le PPCM des nombres A et B divise tous les multiples communs de A et de B. Ainsi le PPCM de 12 est 10 est 60 (12 x 5 = 10 x 6 = 60). La plupart des algorithmes que j'ai trouvé ne traitent que deux nombres à la fois, celui que je vous propose peut en traiter davantage, je pense que la limite tant du nombre de nombres traités que de leur taille sera celle de votre processeur. J'ai choisi une méthode acceptée par mon ordinateur, les deux autres ne fonctionnaient pas dès lors que les nombres traités dépassaient quelques dizaines. ComplexitéLe PPCM s'enseigne en collège, l'algorithme ne me semble donc pas très compliqué. Il existe plusieurs méthodes pour extraire le PPCM. La première consiste à calculer de manière croissante les n premiers multiples de chaque nombre et de les comparer jusqu'à trouver le premier, donc le plus faible, multiple commun. La seconde nécessite de décomposer chaque nombre en produit de facteurs premiers puis de comparer cette décomposition. J'ai essayé ces deux premières méthodes mais si elles fonctionnent bien avec de petits nombres, je suis rapidement arrivé aux limites de capacité de mon ordinateur. Je me suis donc rabattu sur la troisième méthode qui nécessite de passer par le PGCD (plus grand commun diviseur : il s'agit du plus grand entier naturel par lequel chacun des nombres considérés puisse être divisé avec un reste égal à 0. Ainsi le PGCD de 12 et 10 est 2 : 12 /2 = 6, c'est un entier et 10/ 2 = 5, entier également. En anglais le PGCD se nomme greatest common divisor - GCD, integer greatest common factor ou highest common factor). En effet le calcul du PGCD de deux nombres par l'algorithme d'Euclide est assez rapide. Il consiste à effectuer des divisions en cascade, le plus grand des deux nombres est d'abord divisé par le plus petit puis le diviseur est divisé par le reste et ainsi de suite. Je suis parti de la formule qui veut que le produit du PPCM et du PGCD soit égal au produit des nombres, soit pour deux nombres A et B : Par conséquent : L'algorithme utilise le principe de la récursivité pour calculer le PPCM (et le PGCD), à partir d'une fonction qui calcule le PPCM de deux nombres. En effet : L'algorithme comporte plusieurs fonctions, la fonction PPCM(A,B) qui calcule le PPCM de deux nombres entiers positifs. Cette fonction fait appel à la fonction PGCD(A,B) qui calcule le PGCD de deux nombres entiers positifs. La fonction PPCM_TAB calcule le PPCM de plusieurs nombres saisis dans un tableau à une dimension. Ainsi pour calculer le PPCM de A,B,C et D il faudra passer un tableau (array(A,B,C,D)) en paramètre. Mon algorithme fait appel à des fonctions dont les caractéristiques se trouvent assez facilement sur internet, j'ai tout de même rencontré quelques difficultés à trouver des implémentations en PHP. Ma plus-value réside surtout dans les tests de sécurité (je vérifie que les paramètres sont bien des entiers non nuls) et dans la possibilité de traiter plusieurs nombres et pas seulement deux. Ma formation scientifique étant assez lointaine je ne sais pas si cet algorithme est particulièrement efficace ni sûr, ce qui est certain c'est qu'il m'a permis de résoudre mes problèmes de temps de traitement. On verra bien les remarques et améliorations qui seront proposées. [PHP] ImplémentationCode : PHP
|
||||||||||
Retour au forum "Autres langages, outils et approches" ou à la liste des forums
