function [m,st,res]=tricrepes(n,p,nbins,graphe) % étude statistique du nombre d'étape pour l'alogorithme de base du tri de crêpes. % % ********************************************************* % [m,st]=tricrepes(n,p,nbins,graphe) : % % Voir https://fr.wikipedia.org/wiki/Tri_de_crêpes % * Variable d'entrées % * n : nombre de crêpes % * p : nombre d'échantillon de taille n % * Variables d'entrées optionnelles % * nbins : nombre de classes pour l'histogramme % * nmax : entier dans {0,1}, valant 1 par défaut. % si égal 1, tracé de l'histogramme des nombres d'inversions % divisés par le nombre de crêpes. % * Variable de sortie % * m,st : moyenne (en principe proche de 2) et écart type des nombres % d'inversions divisés par le nombre de crêpes. % * Variable de sortie optionnelles % * res : différents nombres d'inversions obtenus % % Exemples : % [m,st,res]=tricrepes(10,10,[],0) % [m,st]=tricrepes(300,100) % [m,st]=tricrepes(300,10000) % % % ************ Fonctions auxiliaires utilisées ************ % % aucune % % ********************************************************* % % 2018 by Jérôme BASTIEN % Université Claude Bernard Lyon I, Polytech, Laboratoire LIBM, Villeurbanne % E-Mail : jerome.bastien@univ-lyon1.fr if nargin<=2 nbins=[]; end if nargin<=3||isempty(graphe) graphe=1; end hg=zeros(1,p); if nargout>=3 res=hg; end for s=1:p N=randperm(n); k=0; for i=n:-1:2 auxi=N(1:i); [c,j]=max(auxi); if j~=i k=k+2; auxi(1:j)=fliplr(auxi(1:j)); auxi=fliplr(auxi); end N(1:i)=auxi; end if ~isequal(N,1:n) error('crêpes non triées'); end hg(s)=k; if nargout>=3 res(s)=k; end end hg=hg/n; m=mean(hg); st=std(hg); if graphe if isempty(nbins) hist(hg); else hist(hg,nbins); end end