begin process at 2012 02 14 09:49:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Algorithme

 > 

Maths

 > 

Parcours de tableau


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Parcours de tableau

mardi 20 mars 2007 à 18:54:52 | Parcours de tableau

racine


Bonjour,

Je recherche une méthode me permettant de rechercher dans un tableau de numériques , une suite particuliere de valeur.
Mon tableau fait plusieurs millions d'enregistrements, la recherche élément par élément est un peu lente.

ex : 1,0,0,1,1,1,0,1,1,1,1
je cherche  3 fois 1 de suite
reponse : indice de départ = 4 ( 1,0,0,1,1,1,0,1,1,1,1)

Merci,
Olivier
mardi 20 mars 2007 à 19:08:57 | Re : Parcours de tableau

BruNews

Administrateur CodeS-SourceS
Faut prendre l'habitude d'indexer en base 0, ton indice sera donc 3.

Un index indique l'offset de décalage rapport à l'adresse base, un index 0 indique donc bien le 1er élément.

ciao...
BruNews, MVP VC++
mardi 20 mars 2007 à 19:11:39 | Re : Parcours de tableau

mortalino

Membre Club


Salut,

en gros, ça devrait faire ça :


Dim TabARechercher(3As Long, StartIndice As Long
Dim MonTableau() As Long, i As Long

TabARechercher = Array(111)
MonTableau = Array(10011101, 1, 1, 1)

For i = LBound(MonTableau) To UBound(MonTableau) - 3
   If TabARechercher(0) = MonTableau(i) And TabARechercher(1) = MonTableau(i + 1) And TabARechercher(2) = MonTableau(i + 2) Then
      StartIndice = i: Exit For
   End If
Next i

Erase TabARechercher
Erase MonTableau
~ Mortalino ~ Colorisation automatique

@++


  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
mardi 20 mars 2007 à 19:13:10 | Re : Parcours de tableau

mortalino

Membre Club


Ah et je confirme que suite à ce que dit BruNews, je suis bien en base 0 et StartIndice sera donc égal à 3

@++


  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
mardi 20 mars 2007 à 19:52:48 | Re : Parcours de tableau

jmfmarques

Membre Club

Je vois mal comment ne pas parcourur tous les éléments du tableau (celà me parait inévitanle)

 

Je vois par contre une possibilité de gagner en temps.

au lieu de comparer à 1 (donc une condition à chaque fois) : additionner ---

quelque chose du genre  (îci je recense tous les départs d'occurrence dans une listbox, juste pour y voir clair)

Private Sub Command1_Click()
  MonTableau = Array(1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1)
  n = 0
  For i = 0 To UBound(MonTableau) - 1
    If MonTableau(i) > 0 Then
       n = n + 1
    Else
       n = 0
    End If
    If n = 3 Then
      List1.AddItem i - 2
      n = 0
    End If
  Next
End Sub

C'est juste une idée et :

1) je n'ai pas testé n comparaison de temps
2) elle est surement perfectible

mardi 20 mars 2007 à 20:36:59 | Re : Parcours de tableau

BruNews

Administrateur CodeS-SourceS
Prends exemple sur ce qui t'a été donné plus haut par mortalino et jmfmarques.

Si vraiment tu bosses sur des tableaux de millions d'elems, ça risque fort de rester assez lent faute au "MonTableau(i)", l'accès aux elems par indexation est une calamité depuis vb en terme de performance.
Pour perfs incomparables, il te faudra compiler une dll C qui accèdera direct à la mémoire du tableau, tu devrais atteindre un benef facteur 10 minimum.
Exemple ici:
http://www.vbfrance.com/code.aspx?ID=33938

ciao...
BruNews, MVP VC++
mercredi 21 mars 2007 à 09:30:04 | Re : Parcours de tableau

racine

Effectivement, il est difficile de ne pas parcourir le tableau.
d'autant plus que l'exemple ennoncer est incomplet. en réalité il serait plutot comme suit : 

  MonTableau1 = Array(1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1)
  MonTableau2 = Array(1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1)
  MonTableau3 = Array(1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1)

je doit trouver l'endroit ou j'ai 3 fois 1 de suite dans l'ensemble de mes tableau (l'ensemble des tableaux doit approcher le million d'éléments)

resultat : 
  MonTableau1 = Array(1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1)
  MonTableau2 = Array(1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1)
  MonTableau3 = Array(1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1)

merci pour le tuyau, je vais assayer en effectuant des additions

A+

samedi 26 mai 2007 à 09:08:13 | Re : Parcours de tableau

MAXIMO71

Membre Club

dim res (1 to 10000) as boolean

Max=UBound(MonTableau1)

for i = 0 to Max
    MonTableau4(i)=MonTableau1(i)+MonTableau2(i)+MonTableau3(i)
next i
   
for i = 0 to Max
    if  MonTableau4(i)=3 and MonTableau4(i+1)=3 and MonTableau4(i+2)=3 then res( i+1) = true
next i

tu obtient ainsi la liste des résultats dans un tableau donc l'index de base est 1 ce qui te simplifie la tâche je pense. Pour ce qui est de l'accélération si le nombre d'occurance de ton tableau est fixe, il est possible d'utiliser dans la boucle de recherche des multiples de i ce qui va augmenter le nombre de tests par tour de boucle ce qui peut être plus rapide.

      

next i
MAXIMO71
PS Si la réponse vous satistait
pensez à la valider



Cette discussion est classée dans : élément, recherche, tableau, parcours


Répondre à ce message

Sujets en rapport avec ce message

recherche dans un tableau [ par pmunger ] J'ai un tableau contenant des String. Je veux savoir si une chaîne est présente dans ce tableau. Existe-t-il une fonction qui fait cela ou bien le s VB6 Recherche d'élément dans un Tableau [ par JeffC1977 ] Salut à tous....J'utilise un tableau... et j'aimerais être capable d'aller chercher de l'information dans ce tableau... mais je n'y arrive pas...Mon c Recherche d'un élément dans une Liste [ par Morpheus7914918 ] Bonjour, Votre site m'a été conseillé. J'ai un tout petit pb en VB (sous Excel). Je cherche la fonction (je suis quasiment persuadé qu'elle existe) qu Recherche directe dans un dataset [ par TrafMaxime ] Salut les pros de la prog,Dans une option 'statistique' de mon programme, je parcours les ventes dans une portion de date, pour un type d'appareil et excel [ par didier.007 ] j ai besoin de quelques lignes de programations et je ne sais pas faire.Pourriez vous m'aider ?A savoir :inserer un programme VB dans excel.une foncti Dimsension tableau [ par nevil ] Alors voila, je traite une base de données excel contenu dans un tableau.Quand je fé mes recherche, je recherche de A1 juska Z10000 comme ca je suis s accés aléatoire à un élément d'un tableau [ par hela_bouks ] Bonjour, Je voudrai savoir s'il existe une instruction me permettant de choisir aléatoirement un élément d'un tableau(unidimensionnel. En fait ce que accés aléatoire à un élément d'un tableau [ par hela_bouks ] Bonjour, Je cherche une instruction me permettant d'accéder aléatoirement à un élément d'un tableau unidimensionnel. Mon but est de de permuter deux é macro excel - recherche dans un tableau [ par tibss ] Salut tout le monde,  <img titl Comment effectuer la lecture de chaque élément d'un tableau [ par emarck ] Bonsoir, J'ai déclarer un tableau sans spécifier sa longeur et je fais un Redim preserve afin de le réajuster à chaque fois que j'ajoute un élémen


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,122 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales