Fonction de calcul du nombre de duel unique pour un nombre n de participant

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 783 fois - Téléchargée 16 fois

Contenu du snippet

Tout est dans le titre :)
C'est simple mais assez utile ;)

J'ai commencé par creer cette fonction qui est trop lourde en calucl :

function nDuel($nombre){

$list = array();
$start = 1;
$val = 0;
if($nombre >= 2){
do{
for($i=$nombre;$i>=$start;$i--){

for($y=$start;$y<=$nombre;$y++){
if(
!in_array("$i/$y",$list)
and !in_array("$y/$i",$list)
and $i != $y
){
$list[] = "$i/$y";
}
}

}
$start ++;
}while($start != $nombre);

$val = count($list);
}

return $val;
}

puis j'ai compris que c'était plus simple :)
Donc Voila !

Source / Exemple :


<?php

function nDuel($nombreDeParticipant){
    $nombreDeDuel = ($nombreDeParticipant * $nombreDeParticipant - $nombreDeParticipant ) / 2;
    return $nombreDeDuel;

}

//exemple

$nombre = 100;
echo nDuel($nombre);

?>

Conclusion :


Bonne prog :)

A voir également

Ajouter un commentaire

Commentaires

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
Le système suisse est un système de classement.
Il existe plusieurs systèmes de classements :
- le tableau de poules
- le tournois par élimination directe
- le montée descente
- le système suisse.

Le système suisse est utilisé aux échecs (par exemple).

Le tableau de poules tries les joueurs en O(n^2) parties, c'est donc très long.
Le tournois par élimination directe est chiant parce-qu'il ne laisse pas ses chances aux personnes qui se retrouvent directement contre le plus fort : il permet de trouver le meilleur si et seulement si la fonction de victoire est de la forme : si a > b et b > c alors a > c (transitive ?) Bref, c'est très peu précis pour la plupart des jeux.

Le montée descente est en O(n^2)

Le systeme suisse est en O(n * log(n)) ce qui est cool, et il est très précis.

C'est encore plus flagrant quand les joueurs ne sont pas deux mais plus sur une partie : on peut étendre toutes ces méthodes de tournois, et avoir des complexités encore plus horribles pour toutes sauf le système suisse et le tournois par élimination directe.

Bref, si vous faites un tournois, faites un système suisse, c'est fiable et rapide.
Messages postés
200
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
18 janvier 2009

+1 @leFauve42

Je pense même que sans commentaires, un débutant peut comprendre le code que tu as fait en l'analysant un minimum.

PS : @coucou747 : vois pas le rapport avec la Suisse ^^
Messages postés
239
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
20 avril 2009

ooops,

Desole, je n'avais pas vu la scrollbar, et donc pas vu le /2 a la fin.

A part ca, si il est toujours possible de reecrire n'importe quel program simple d'une ligne en 50, 100 ou meme plusieurs miliers de lignes illisibles, ca n'en fait pas pour autant un code de niveau "initie".

Eric
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
hum...

faut pas le prendre si mal.

le truc, c'est que ta fonction est vraiment simple, t'aurais mis un truc pour le systeme suisse ça aurait été différent, t'aurais fait une classe abstraite qui gère un tournois de poules pour N joueurs, ça aurait pu être intéressant.
Messages postés
31
Date d'inscription
mardi 26 août 2008
Statut
Membre
Dernière intervention
1 novembre 2012

La preuve coucou747 qui est un expert n'a pas compris du premier cou :p
Afficher les 11 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.