Accueil > Forum > > > > trouver valeur max
trouver valeur max
Echange clos, plus de réponse possible sur cet échange
mercredi 26 septembre 2007 à 17:21:26 |
trouver valeur max

boursicotteur
|
Je cherche une façon ultra rapide de trouver la valeur maximale d'une grande liste de nombres. Il n'est donc pas question ici de commencer à comparer des nombres dans une boucle... Une solution pourrait être une API (que je ne connais pas) qui s'appliquerait sur un bloc de mémoire en spécifiant un pointeur et une dimention. Une autre solution pourrait être une fonction (que je ne connais pas) qui s'appliquerait sur un tableau. Je sais déjà comment remplir ce tableau très rapidement en copiant un bloc de mémoire directement dans ce tableau. Merci de m'aider
|
|
mercredi 26 septembre 2007 à 17:53:43 |
Re : trouver valeur max
|
mercredi 26 septembre 2007 à 18:03:25 |
Re : trouver valeur max

etniqs
|
c'est quoi un bloc de mémoire ? des pointeurs ??
de toute façon, tu n'as pas le choix que de comparer des valeurs entre elles, puisque tu veux le max des valeurs, donc une boucle ... par contre, c'est elle qu'il faudra optimiser, la base est simple :
while
if tab(n) > tab(n+1) then mavaleur = tab(n)
wend
|
|
mercredi 26 septembre 2007 à 19:04:24 |
Re : trouver valeur max

boursicotteur
|
Pas le choix de comparer des valeurs... Donc, faut une boucle?
Dans Excel il y a une fonction qui compare des valeurs...sans faire de boucle...
Max(liste de nombres ou plage d'adr contenant des nombres)
C'est quoi un bloc de mémoire, un pointeur? Si tu sais ce qu'est une API alors examine celle-ci:
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
· Destination Points to the starting address of the copied block's destination.
· Source Points to the starting address of the block of memory to copy.
· Length Specifies the size, in bytes, of the block of memory to copy.
|
|
mercredi 26 septembre 2007 à 21:05:15 |
Re : trouver valeur max

BruNews
|
Une API ça s'écrit, encore faut-il avoir qlq détail. Quel type tes nombres, intt16, int32, single, double ?
ciao... BruNews, MVP VC++
|
|
mercredi 26 septembre 2007 à 21:59:33 |
Re : trouver valeur max

Kristof_Koder
|
"Dans Excel il y a une fonction qui compare des valeurs...sans faire de boucle..." < Ah !! Bon ! Parce que tu connais le code exécuter par la fonction Max d'Excel toi ? Tu croit vraiment qu'il n'y a pas de boucle dans le Max() !!
Moi, je pense qu'il y en a une.
Quel que soit ce ue tu utiliseras pour faire ca, tu auras une boucle. La seule différence, c'est que si tu fais ta boucle en C ou mieux en ASM, ca va booster bien plus qu'une boucle en VB6 !!
Tu parles de bloc mémoire, de pointeur et de dimension. Pour ballader ton ptr du début à la fin du bloc, il te faudra bien une boucle ! Ou alors tu es magicien !
|
|
mercredi 26 septembre 2007 à 22:36:20 |
Re : trouver valeur max

boursicotteur
|
Salut BruNews
Mes nombres proviennent de fichiers wave de 8 bits et 16 bits et il est inutile de préciser qu'il y en a plusieurs millions dans chaque fichier alors les boucles en VB c'est pas ce qu'il y a de mieux.
Présentement, j'utilise l'API ReadFile pour placer ces nombres directement dans un tableau dimentionné soit en Bytes ou en Integer. C'est ultra rapide! Il faut à peine quelques mSec!
Mais çà se gâte quand je travaille avec ce tableau pour extraire les valeurs crêtes de blocs de 128 échantillons en faisant une boucle en VB. Il me faut 12 sec pour traiter un fichier de 6 millions d'échantillons alors qu'un logiciel du commerce le fait en 3 ou 4 sec. Voilà pour la lenteur de VB!
Tu dis être capable d'en écrire une? Je sais que les API sont livrées dans des DLL et qu'il est possible d'écrire des DLL mais pour qu'elles soient rapide il ne faut pas le faire en VB. D'après ce que j'en sais, C++ est beaucoup mieux.
J'espère que cela répond à ta question. Merci
|
|
mercredi 26 septembre 2007 à 22:49:30 |
Re : trouver valeur max

BruNews
|
Declare Sub bnGetInt16MinMax Lib "vbMinMax.dll" (ByRef ptab As Integer, ByVal nelems As Long, ByRef pMin As Integer, ByRef pMax As Integer) les 2 bornes min et max retournées dans pMin et pMax, OK ?
exemple: Declare Sub bnGetInt16MinMax Lib "vbMinMax.dll" (ByRef ptab As Integer, ByVal nelems As Long, ByRef pMin As Integer, ByRef pMax As Integer)
Dim T(100) As Integer Dim a, b ' remplir T de 100 valeurs int16 bnGetInt16MinMax(T(0), 100, a, b) debug.Print a debug.Print b
et la meme en 8 bits: bnGetInt8MinMax
les valeurs sont à considérer en unsigned ?
ciao... BruNews, MVP VC++
|
|
mercredi 26 septembre 2007 à 23:38:44 |
Re : trouver valeur max

BruNews
|
Exemple fait sur Excel, je n'ai pas VB.
Option Explicit
' RECHERCHE BORMES MIN ET MAX SUR ENTIERS 16 BITS Declare Sub bnGetInt16MinMax Lib "D:\vbMinMax.dll" (ByRef ptab As Integer, ByVal nelems As Long, ByRef pMin As Integer, ByRef pMax As Integer) Declare Sub bnGetWordMinMax Lib "D:\vbMinMax.dll" (ByRef ptab As Integer, ByVal nelems As Long, ByRef pMin As Integer, ByRef pMax As Integer)
Sub DireInt16MinMax() Dim cel As Range Dim n As Integer, a, z Dim T(100) As Integer Set cel = Range("A1") n = 100 Do T(n) = CInt(cel.Value) Set cel = cel.Offset(1, 0) n = n - 1 Loop While n >= 0 bnGetInt16MinMax T(0), 100, a, z ' SI TRAVAIL EN UNSIGNED UTILISER bnGetWordMinMax AVEC MEMES PARAMS Debug.Print a Debug.Print z End Sub
DLL (2,5 Ko) ici: http://brunews.com/vbMinMax.zip
ciao... BruNews, MVP VC++
|
|
jeudi 27 septembre 2007 à 04:03:59 |
Re : trouver valeur max

boursicotteur
|
Merci pour ton travail BruNews! Malheureusement je ne réussi pas à faire fonctionner cette DLL. Voici ce que j'ai fait:
1-J'ai d'abord déclaré les 2 fonctions dans un module: Public Declare Sub bnGetInt16MinMax Lib "vbMinMax.dll" ( _ ByRef ptab As Integer, _ ByVal nelems As Long, _ ByRef pMin As Integer, _ ByRef pMax As Integer)
Public Declare Sub bnGetInt8MinMax Lib "vbMinMax.dll" ( _ ByRef ptab As Integer, _ ByVal nelems As Long, _ ByRef pMin As Integer, _ ByRef pMax As Integer)
2-J'ai ensuite écrit un code test dans un formulaire: Public Sub btnTEST_Click() Dim T(100) As Integer Dim a, b, rt ' remplir T de 100 valeurs int16 For rt = 0 To 99 T(rt) = rt + 5 Next
rt = bnGetInt16MinMax(T(0), 100, a, b) Debug.Print a Debug.Print b Exit Sub
=> J'ai obtenu le message suivant: Erreur de compilation: Function ou variable attendue
Alors je me suis dit qu'il fallait enrégistrer cette dll; ce que j'ai fait en utilisant la ligne de commande suivante: regsvr32 C:\windows\system\vbMinMax.dll
=> J'ai obtenu le message suivant: C:\windows\system\vbMinMax.dll was loaded, but the DllRegisterServer entry point was not found.
DllRegisterServer may not be exported, or a corrupt version of C:\windows\system\vbMinMax.dll may be in memory. Consider using Pview to detect and remove it.
J'ai donc utilisé mon Pview pour voir tous les process actifs et il n'y avait pas trace de vbMinMax.dll. Peut-être que le fichier n'est pas correct ou qu'il est corrompu... ...Il a pourtant fonctionné avec ton Excell!
Je vais le retélécharger et le réessayer...au cas où il aurait été corrompu lors du téléchargement (mais j'en doute).
Ce serait bien si d'autres personnes pouvaient l'essayer avec un code VB et poster ici leur résultat.
Tes 2 fonctions semblent répondre à mes besoins mais il va y avoir un autre petit problème que voici:
Les fichiers wave ont 1 ou 2 canaux et les données sont ordonnées en conséquence. Le tableau qui recevra ces données doit être dimentionné en conséquence. Ceci veut dire que pour un fichier wave à 1 canal, le tableau doit avoir 1 seule dimention (0 à N-1 échantillons). Pour un fichier wave à 2 canaux, ce sera 2 dimentions (0 à 1, 0 à N-1).
Il faudrait avoir la possibilité d'extraire les valeurs Min Max pour chacun des 2 canaux (si il y en a 2). Il suffirait donc d'ajouter une autre variable à tes fonctions...
Encore une fois merci pour ton aide.
|
|
Cette discussion est classée dans : trouver, valeur, tableau, max, nombres
Sujets en rapport avec ce message
comment trouver la valeur MIN et la valeur MAX dans un tableau [ par Jeronimo ]
J'ai un tableau intNombre(1 to 25). Premièrement, les valeurs du tableau sont initiées par un combobox. Ensuite, je dois afficher la valeur la plus é
Min...Max...d'un comboboxe... [ par Gigi ]
Bonjour! voici mon probleme... j'ai des nombres dans un comboboxes, et je veux afficher dans des labels respectifs, la valeur minimal et la va
Comment peut on savoir quel est la valeur max dans un tableau de valeurs ? [ par Moi ]
Comment peut on savoir quel est la valeur max dans un tableau de valeurs ?
Trouver le max et le min dans un tableau [ par Jeronimo ]
Je dois, dans la même procédure trouver le nombre max et le nombre min dans un tableau. Comment faire ?Mon tableau est intNombre(25) as Integermerci
Tableau d'integer et valeur max [ par olivier857 ]
Bonjour à tous,Je cherche à créer un tableau d'integer, a y stocker des données dans une boucle puis récupérer la valeur max du tableau de données.Mai
Valeur max dans une plage définit par des variables [ par Everlast03 ]
J'ai un petit problème, J'ai un tableau de valeurs (que je récupère) dont les premiers relevés ne m'intéressent pas. Je prends donc le maximum (car l
Recherche d'une valeur dans une ligne [ par wassim0285 ]
Bonjour, Comment je peux trouver si une valeur existe ou non sur une ligne particulière, sachant que je connais la ligne ( c'est la ligne 1), donc je
ACCESS-VBA Stocker Valeur dans une variable "Tableau" (Nombre d'enregistrement variable) [ par daimadoshi60 ]
Bonjour à tous, Voila, je souhaiterai stocker un certain nombre de valeur dans une variable de type Tableau ou liste et je ne trouve pas vraiment le
comment recherchez un valeur dans une colonnes et la comparer si pareil renvoyer la valeur dans une autre celulle [ par qcsylvain ]
Bonjour, sa fait des semaines que je cherche une facon de crée ce code, je travail avec excel vba 2007jai 2 feuille dans mon classeur "2" et "Feuil1"
Chercher le code en C pour trier le fichier texte et trouver la valeur max [ par codon21 ]
Bonjour à tous, J'ai cherché dans le forum le code pour trier et trouver la valeur max dans un fichier texte. J'en ai trouvé quelques un. Mais c'est p
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|