Calculer la médiane sans trier, c'est possible ?

Calculer la médiane sans trier, c'est possible ? - Algo - Programmation

Marsh Posté le 18-04-2004 à 23:12:34    

Hello !  
 
Je me demandais si il existait un algo pour détérminer la médiane d'un ensemble de valeurs sans les trier...
 
Il doit bien y avoir une technique pour determiner le n-ieme element sans tout trier, ou du moins pas dans tous les cas...
Là je vois pas...
 
Mes tableaux sont de 30 à 60 valeurs toutes comprises entre 0 et 255...
 
??
merci !
joan.

Reply

Marsh Posté le 18-04-2004 à 23:12:34   

Reply

Marsh Posté le 18-04-2004 à 23:42:32    

jobigoud a écrit :

Hello !  
 
Je me demandais si il existait un algo pour détérminer la médiane d'un ensemble de valeurs sans les trier...
 
Il doit bien y avoir une technique pour determiner le n-ieme element sans tout trier, ou du moins pas dans tous les cas...
Là je vois pas...
 
Mes tableaux sont de 30 à 60 valeurs toutes comprises entre 0 et 255...
 
??
merci !
joan.


Si tu trouves, préviens, ça va intéresser du monde...:lol:

Reply

Marsh Posté le 19-04-2004 à 00:34:02    

jobigoud a écrit :

Hello !  
 
Je me demandais si il existait un algo pour détérminer la médiane d'un ensemble de valeurs sans les trier...
 
Il doit bien y avoir une technique pour determiner le n-ieme element sans tout trier, ou du moins pas dans tous les cas...
Là je vois pas...
 
Mes tableaux sont de 30 à 60 valeurs toutes comprises entre 0 et 255...
 
??
merci !
joan.

tiens, c'est un truc pour DocMaboul. en temps constant o(n) ou je sais plus trop quoi, n'est-ce pas

Reply

Marsh Posté le 19-04-2004 à 09:28:24    

Taz a écrit :

tiens, c'est un truc pour DocMaboul. en temps constant o(n) ou je sais plus trop quoi, n'est-ce pas


Cela va sans dire! [:itm]

Reply

Marsh Posté le 19-04-2004 à 09:58:46    

Bon pour revenir à ton pb (on le connait pas...yen a un? :??:), un lien vers des méthodes de calcul de médianes :
http://ndevilla.free.fr/median/

Reply

Marsh Posté le 19-04-2004 à 10:02:59    

skeye a écrit :

Bon pour revenir à ton pb (on le connait pas...yen a un? :??:), un lien vers des méthodes de calcul de médianes :
http://ndevilla.free.fr/median/


 
ça me dit quelque chose ce lien [:meganne]
;)

Reply

Marsh Posté le 19-04-2004 à 10:05:08    

moktar1er a écrit :


 
ça me dit quelque chose ce lien [:meganne]
;)


Comme quoi j'écoute ce qu'on me dit!;)

Reply

Marsh Posté le 19-04-2004 à 10:45:27    

en utilisant un pivot comme pour le quick sort.
je dois faire ca un exo c++

Code :
  1. Using partition write an algorithm to find the median of an array a[0.. n-1] of ints without first sorting the array. Your algorithm should be significantly more efficient than O(n log n). You can assume that n is odd.


je posterai la reponse ici une fois trouve.
 

Reply

Marsh Posté le 19-04-2004 à 14:11:12    

Ah, donc ça veut dire que c'est pas complètement utopique...
Bon, ben y'a plus qu'a chercher...

Reply

Marsh Posté le 19-04-2004 à 14:13:52    

jobigoud a écrit :

Ah, donc ça veut dire que c'est pas complètement utopique...
Bon, ben y'a plus qu'a chercher...


Mais c'est quoi le but, au final? Pourquoi tu veux pas trier?

Reply

Marsh Posté le 19-04-2004 à 14:13:52   

Reply

Marsh Posté le 19-04-2004 à 14:14:26    

je suppose que si tu utilises des partitions, tu dois plus être loin du tri par partition (le qsort quoi :D) quand même


Message édité par Taz le 19-04-2004 à 14:16:14
Reply

Marsh Posté le 19-04-2004 à 14:17:39    

Taz a écrit :

je suppose que si tu utilises des partitions, tu dois plus être loin du tri par partition (le qsort quoi :D) quand même


;)
 
De toute manière pour trouver une médiane ya pas 50 manières hein...[:skeye]

Reply

Marsh Posté le 19-04-2004 à 14:18:24    

Citation :


Bon pour revenir à ton pb (on le connait pas...yen a un? :??:), un lien vers des méthodes de calcul de médianes :  
http://ndevilla.free.fr/median/


 
oulà mais il est super ce lien !
merci bicoup !

Reply

Marsh Posté le 19-04-2004 à 14:19:11    

jobigoud a écrit :

Citation :


Bon pour revenir à ton pb (on le connait pas...yen a un? :??:), un lien vers des méthodes de calcul de médianes :  
http://ndevilla.free.fr/median/


 
oulà mais il est super ce lien !
merci bicoup !


dis merci à moktar, c'est lui qui me l'a filé ya quelques jours...:lol:

Reply

Marsh Posté le 19-04-2004 à 14:22:31    

Citation :


Mais c'est quoi le but, au final? Pourquoi tu veux pas trier?


 
je veux pas trier parceque j'ai des tableaux de 50 valeurs parfois plus...
et que je dois repeter l'opération un grand nombre de fois.
 
En fait je calcule le pixel médian de chaque pixel d'une vidéo.
donc pour une vidéo de 3 sec en 320x200 : ça fait (320x200) tris de tableaux de (3x25)...ça prend du temps...

Reply

Marsh Posté le 19-04-2004 à 14:24:37    

jobigoud a écrit :

Citation :


Mais c'est quoi le but, au final? Pourquoi tu veux pas trier?


 
je veux pas trier parceque j'ai des tableaux de 50 valeurs parfois plus...
et que je dois repeter l'opération un grand nombre de fois.
 
En fait je calcule le pixel médian de chaque pixel d'une vidéo.
donc pour une vidéo de 3 sec en 320x200 : ça fait (320x200) tris de tableaux de (3x25)...ça prend du temps...


Je suis en train d'essayer de le faire sur de la video en 50 images  768*288 par seconde...pas gagné!;)
Bon ok je le fais que sur la lumi, mais j'en suis à 31ms par image, là...
[edit]
Avec un tri (lien filé plus haut), sur une image RGB 512x512 et median sur R, G et B, 47ms.
[edit2]
...et 16ms sur une image RGB 320x200 et median sur R, G et B.
 
Si tu veux un bout de code pas de pb.


Message édité par skeye le 19-04-2004 à 14:39:41
Reply

Marsh Posté le 19-04-2004 à 14:50:35    

Ben ouais je veux bien, mais t'es un rapide...je suis encore en train de lire le papier sur les différentes methodes...
 
quel tri t'as utilisé ?

Reply

Marsh Posté le 19-04-2004 à 14:51:51    

et juste comme ça, sur les images que tu analyses, ta médiane est éloigné de ta moyenne ?

Reply

Marsh Posté le 19-04-2004 à 14:51:56    

jobigoud a écrit :

Ben ouais je veux bien, mais t'es un rapide...je suis encore en train de lire le papier sur les différentes methodes...
 
quel tri t'as utilisé ?
 


J'ai utilisé le opt_med9 trouvé ici:
http://ndevilla.free.fr/median/median/src/optmed.c
Légèrement adapté à mon cas.

Reply

Marsh Posté le 19-04-2004 à 14:54:48    

gnere le mec est entrain de nous faire un boulot de template C++ ... t'as vérififé que tout était inliné comme il faut ? d'ailleurs est-ce que c'est bénéfique par rapport à une boucle appelant PIX_SORT comme il faut ? est-ce que t'as bien recherché du côté de ton compilateur : réglages spécifiques, etc ?


Message édité par Taz le 19-04-2004 à 15:05:41
Reply

Marsh Posté le 19-04-2004 à 15:23:24    

Taz> tu parles à qui là? à moi?

Reply

Marsh Posté le 19-04-2004 à 15:27:59    

bah un peu ... quand je vois ce joli déroulage de boucle à la main, je me demande : - s'il est optimale (faut pas trop faire péter de lignes de cache quand même, là ça me parait long à souhait) - si tout a été fait côté compilateur pour améliorer la situation (en tout cas gcc avec O3 / march / ftracer / fssa voire d'autres paramètres pour influer sur le mode de calcul me sort un code bien meilleur

Reply

Marsh Posté le 19-04-2004 à 15:28:27    

skeye a écrit :


J'ai utilisé le opt_med9 trouvé ici:
http://ndevilla.free.fr/median/median/src/optmed.c
Légèrement adapté à mon cas.


 
Ah, ouais, alors je me rend compte qu'on parle pas tout a fait de la meme chose...
 
Je ne fait pas le calcul de la médiane pour filtrer une image et ecarter les pixels aberrants.
 
Je fais le calcul de la médiane de la valeur d'un pixel d'un emplacement donné dans l'image, au cours du temps.
 
pour le pix 0,0, je prend la médiane de tous les pix 0,0 des différentes images.
 
donc l'opti 9  n'est pas adapté...Il me faudrait un opti 75 ou opti 50 en fonction du nombre total d'images, ce que je ne connais pas à l'avance.
 

Taz a écrit :

et juste comme ça, sur les images que tu analyses, ta médiane est éloigné de ta moyenne ?


ouaip.
 
 
 
 
 
 
 
 
 

Reply

Marsh Posté le 19-04-2004 à 15:30:07    

Taz a écrit :

bah un peu ... quand je vois ce joli déroulage de boucle à la main, je me demande : - s'il est optimale (faut pas trop faire péter de lignes de cache quand même, là ça me parait long à souhait) - si tout a été fait côté compilateur pour améliorer la situation (en tout cas gcc avec O3 / march / ftracer / fssa voire d'autres paramètres pour influer sur le mode de calcul me sort un code bien meilleur


Mon machin actuellement je le compile sous dev-cpp avec -O2 -march=athlon-xp si c'est ça qui t'intéresse...
Je lui propose ça parce-qu'on me l'a filé ya quelque jours et que j'ai constaté que ça marchait plutôt bien, après non j'ai pas cherché bcp plus loin, et je le ferai p-e quand j'en aurai le temps...[:skeye]

Reply

Marsh Posté le 19-04-2004 à 15:31:53    

jobigoud a écrit :


 
Ah, ouais, alors je me rend compte qu'on parle pas tout a fait de la meme chose...
 
Je ne fait pas le calcul de la médiane pour filtrer une image et ecarter les pixels aberrants.
 
Je fais le calcul de la médiane de la valeur d'un pixel d'un emplacement donné dans l'image, au cours du temps.
 
pour le pix 0,0, je prend la médiane de tous les pix 0,0 des différentes images.
 
donc l'opti 9  n'est pas adapté...Il me faudrait un opti 75 ou opti 50 en fonction du nombre total d'images, ce que je ne connais pas à l'avance.
 
 
ouaip.
 
 
 
 
 
 
 
 
 
 


ahhhhhhhh...ben regarde dans le reste du code filé, yen a pas mal, ton cas doit bien se retrouver...;)

Reply

Marsh Posté le 19-04-2004 à 15:31:57    

skeye a écrit :


Mon machin actuellement je le compile sous dev-cpp avec -O2 -march=athlon-xp si c'est ça qui t'intéresse...
Je lui propose ça parce-qu'on me l'a filé ya quelque jours et que j'ai constaté que ça marchait plutôt bien, après non j'ai pas cherché bcp plus loin, et je le ferai p-e quand j'en aurai le temps...[:skeye]


 
+1

Reply

Marsh Posté le 19-04-2004 à 15:50:43    

t'as combien d'image à analyser au pire des cas ? si c'est pas beaucoup, et sachant déjà que qsort prend une claque par std::sort du C++ pour cause d'appel de fonction, tu aurais peut être interet a essayer un petit tri léger fait maison. meme s'il a une complexite supérieure, il risque d'être plus rapide

Reply

Marsh Posté le 22-04-2004 à 13:56:07    

jobigoud a écrit :

Hello !  
 
Je me demandais si il existait un algo pour détérminer la médiane d'un ensemble de valeurs sans les trier...
 
Il doit bien y avoir une technique pour determiner le n-ieme element sans tout trier, ou du moins pas dans tous les cas...
Là je vois pas...
 
Mes tableaux sont de 30 à 60 valeurs toutes comprises entre 0 et 255...
 
??
merci !
joan.


 
Facile étant donné que ton intervalle de valeurs est borné. Il suffit de reprendre l'idée du tri par dénombrement qui est O(n).

Reply

Marsh Posté le 27-05-2004 à 10:28:55    

skeye a écrit :

Si tu trouves, préviens, ça va intéresser du monde...:lol:


 
En analyse d'image, etant donnee l'intervalle des valeurs [0, 255] petit, on resout ce probleme avec un tri par comptage (complexite en O(n))
Jvois pas pkoi ca vous est pas venu a l'idee ca   :sarcastic:
 
EDIT : cela revient a precalcule l'histogramme de repartition des niveaux de gris


Message édité par Giz le 27-05-2004 à 10:30:28
Reply

Marsh Posté le 27-05-2004 à 10:31:03    

Giz a écrit :

En analyse d'image, etant donnee l'intervalle des valeurs [0, 255] petit, on resout ce probleme avec un tri par comptage (complexite en O(n))
Jvois pas pkoi ca vous est pas venu a l'idee ca   :sarcastic:


 
pas obligé...
certains systèmes bossent sur du [0,65535], et sur plusieurs couches (longueurs d'onde) donc forcément tu multiplies ta complexité

Reply

Marsh Posté le 27-05-2004 à 10:34:21    

moktar1er a écrit :

pas obligé...
certains systèmes bossent sur du [0,65535], et sur plusieurs couches (longueurs d'onde) donc forcément tu multiplies ta complexité


 
La complexite reste toujours en O(n) : c'est de simple parcours de tableau...seulement plus ton intervalle est grand, plus la memoire en prends un coup !

Reply

Marsh Posté le 27-05-2004 à 10:38:25    

ce que je voulais dire c'est qu'on se retrouvait avec m itérations d'un algo de complexité O(n) ;)
de toutes manières, sans trier (pour répondre à la première question) ça ne semble pas trop possible :hello:

Reply

Marsh Posté le 27-05-2004 à 10:43:55    

moktar1er a écrit :

ce que je voulais dire c'est qu'on se retrouvait avec m itérations d'un algo de complexité O(n) ;)
de toutes manières, sans trier (pour répondre à la première question) ça ne semble pas trop possible :hello:


 
m est fixe (c'est une constante, donc independant de la taille du tableau). Je crois qu'il faut faire 3 ou 4 parcours c tout.
Sinon, pour moi si, ca me semble tout a fait possible !  :o (un tri par comptage !)
 
EDIT : le tri par comptage ne tri pas ton tableau (enfin tu peux mais pas oblige). C'est une simple table de correspondance : un peu comme les tables de hachage


Message édité par Giz le 27-05-2004 à 10:45:28
Reply

Marsh Posté le 27-05-2004 à 10:47:44    

Giz a écrit :

En analyse d'image, etant donnee l'intervalle des valeurs [0, 255] petit, on resout ce probleme avec un tri par comptage (complexite en O(n))
Jvois pas pkoi ca vous est pas venu a l'idee ca   :sarcastic:
 
EDIT : cela revient a precalcule l'histogramme de repartition des niveaux de gris


Merci de me donner des leçons d'analyse d'image, j'en ai bien besoin...:jap:
Aux dernières nouvelles, dans "tri par comptage", il y a tri...[:dawa]
 

Reply

Marsh Posté le 27-05-2004 à 10:49:00    

Giz a écrit :

m est fixe (c'est une constante, donc independant de la taille du tableau). Je crois qu'il faut faire 3 ou 4 parcours c tout.
Sinon, pour moi si, ca me semble tout a fait possible !  :o (un tri par comptage !)
 
EDIT : le tri par comptage ne tri pas ton tableau (enfin tu peux mais pas oblige). C'est une simple table de correspondance : un peu comme les tables de hachage


Tu fais du comptage sur des images de taille variable en temps constant toi? Tu me montreras?[:dawa]
 
[edit]
J'avais lu n au lieu de m...[:joce]
Reste que c'est n'importe-quoi. Si tu as 3 canaux tu vas pas faire indépendemment la médiane de chaque canal hein...[:mlc]


Message édité par skeye le 27-05-2004 à 10:54:26
Reply

Marsh Posté le 27-05-2004 à 10:55:13    

skeye a écrit :

Tu fais du comptage sur des images de taille variable en temps constant toi? Tu me montreras?[:dawa]


 
[citation=741177,0,35]Mes tableaux sont de 30 à 60 valeurs toutes comprises entre 0 et 255...[/citation]
 
C'est ce qui est en gras qui est important, le nombre de valeur on s'en moque ! Tu crees juste un tableau de correspondance de taille 255. c tout  :sarcastic:

Reply

Marsh Posté le 27-05-2004 à 10:57:18    

Giz a écrit :

C'est ce qui est en gras qui est important, le nombre de valeur on s'en moque ! Tu crees juste un tableau de correspondance de taille 255. c tout  :sarcastic:


256. :sarcastic:
Et ta technique reste un tri, qui ne modifie pas le tableau d'origine certes, mais un tri.
D'ailleurs si tu lis la suite, tu verras qu'il n'y a pas de tableau d'origine, les données sont réparties dans n images.
 
[edit]
Tes :sarcastic: tu peux te les mettre où je pense, au fait![:itm]
Surtout quand tu quotes mes messages sans tenir compte des edit...[:kiki]


Message édité par skeye le 27-05-2004 à 11:02:06
Reply

Marsh Posté le 27-05-2004 à 11:04:00    

skeye a écrit :

256. :sarcastic:
Et ta technique reste un tri, qui ne modifie pas le tableau d'origine certes, mais un tri.
D'ailleurs si tu lis la suite, tu verras qu'il n'y a pas de tableau d'origine, les données sont réparties dans n images.


 
ben avec ces donnees, il fait sont tableau d'origine non ?  :heink:  
Ce tableau t bien oblige de le creer (il regroupe les valeurs sur lesquelles s'appuyer)
Sinon, non  :non: tu ne tries pas ! Avec une table de hash, tu fais de la correspondance, tu ne tris pas !
Le tri comptage c vraiment un truc bateau ... [:ke-c]

Reply

Marsh Posté le 27-05-2004 à 11:07:43    

Giz a écrit :

ben avec ces donnees, il fait sont tableau d'origine non ?  :heink:  
Ce tableau t bien oblige de le creer (il regroupe les valeurs sur lesquelles s'appuyer)


 
Pas forcément, il peut accéder directement au pixel i de chaque image.
 
 

Giz a écrit :


Sinon, non  :non: tu ne tries pas ! Avec une table de hash, tu fais de la correspondance, tu ne tris pas !
Le tri comptage c vraiment un truc bateau ... [:ke-c]


Mais ça reste un tri, bougre d'imbécile! Un tri c'est quelquechose qui te permet d'ordonner tes données, rien de plus! Pourquoi ça s'appelle tri comptage, d'après toi, pour faire joli? :pt1cable:
Et je sais très bien ce qu'est un tableau de correspondance ou une table de hashage, merci...[:kiki]

Reply

Marsh Posté le 27-05-2004 à 11:26:02    

skeye a écrit :

Pas forcément, il peut accéder directement au pixel i de chaque image.
 
 
 
Mais ça reste un tri, bougre d'imbécile! Un tri c'est quelquechose qui te permet d'ordonner tes données, rien de plus! Pourquoi ça s'appelle tri comptage, d'après toi, pour faire joli? :pt1cable:
Et je sais très bien ce qu'est un tableau de correspondance ou une table de hashage, merci...[:kiki]


 
admettons un tableau de pixel (taille 5) contenant le niveau de gris chacun :
initTab = {100, 38, 45, 78, 38}
avec un tableau de correspondance (de taille 256) tu obtiens :
tmpTab = {37*0, 2, 6*0, 1, 36*0, 1, 21*0, 1}
ensuite tu connais le nombre de valeurs (5)
ensuite tu parcours ton tmpTab : en cumulant les valeurs des cases a chaque fois, des que t'arrives a une valeur cumulee de 5/2, tu a trouve le point median (ton tmpTab, pointe sur la case de initTab correspondant a la valeur mediane)
 
non ?  :heink:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed