2010-08-25 5 views

Répondre

1

Vous voulez dire probablement

1->3 

Créer un vecteur (tableau), rempli de z eros, qui ont la taille de la valeur max dans la matrice (comme [0..9]), voyagent par matrice entière et avec chaque incrément d'incrément du vecteur qui est égal au nombre réel.

Ceci est la solution pour les valeurs courtes dans la matrice. Si vous ne l'auriez imaginé quelques grandes valeurs, utilisez la liste jointe insted du vecteur, ou comme celui-ci pour matrice comptage:

1 0 
5 0 
15 0 
142 0 
2412 0 

et les valeurs incrément dans la deuxième colonne et d'élargir cette lignes de chaque fois que vous Matrice à trouver un nouveau numéro.

+0

un avoir des nombres aléatoires. comment puis-je faire – eni

+0

dépend de ce que la langue que vous utilisez.En php par exemple, vous n'avez pas besoin de vous soucier des gros index dans le tableau, et pouvez implémenter une première solution simple (incrément array à index = valeur du nombre dans la matrice) –

+0

J'ai résolu mon problème ici est ma solution en php: $ freq = array() // un tableau associatif avec numéro et cette fréquence pour ($ i = 0; $ i <3; $ i ++) { pour ($ j = 0; $ j <4; $ j ++) { si (array_key_exists ($ a [$ i] [$ j], $ freq)) { $ freq [$ a [$ i] [$ j]] + = 1; } autre { $ freq [$ a [$ i] [$ j]] = 1; } }} – eni

0

En utilisant des pointeurs, ce problème est réduit d'une matrice à une matrice unidimensionnelle. Maintenir un tableau 1D dont la taille est égale au nombre total. d'éléments dans la matrice, disons COUNT. Initialisez-le avec zéro. Commencez par le premier élément de la matrice et comparez-le avec tous les autres éléments. Si nous utilisons des pointeurs, ce problème se transforme en traversant un tableau 1D et en trouvant le non des occurrences de chaque élément. Pour traverser tout ce que vous avez à faire, il suffit d'incrémenter le pointeur. En comparant lorsque vous rencontrez le même nombre, déplacez simplement tous les nombres consécutifs d'un endroit vers l'avant. Par exemple, si le 0ème élément est 1 et que vous avez de nouveau trouvé 1 sur le 4ème index, alors déplacez l'élément suivant sur le 5ème index vers le 4ème, le 6ème vers le 5ème et ainsi de suite jusqu'au dernier élément. De cette façon, l'entrée en double au 4ème index est perdue. Maintenant, diminuez de 1 le nombre total d'éléments dans la matrice et augmentez l'entrée correspondante dans le tableau COMPTE par 1. Continuez ainsi jusqu'au dernier élément, nous obtenons une matrice avec des nbre distincts. et leur fréquence correspondante dans le tableau COUNT. Cette implémentation est très efficace pour les langages supportant les pointeurs.

0

Voici un exemple de comment cela pourrait être fait en Python. Le dict est de ce format: {key:value, key2:value2}. Donc, vous pouvez l'utiliser pour que vous ayez quelque chose comme {'2':3} donc ça vous dira quel nombre a combien d'occurrences. (je ne suis pas en supposant que vous allez utiliser Python. Il est juste que vous compreniez le code ... peut-être)

matrix = [[1,5,6], 
      [2,6,3], 
      [5,3,9]] 
dict = {} 

for row in matrix: 
    for column in row: 
     if str(column) in dict.keys(): 
      dict[str(column)] += 1 
     else: 
      dict[str(column)] = 1 

for key in sorted(dict.keys()): 
    print key, '->', dict[key] 

J'espère que vous pouvez comprendre ce que cela fait. This codepad montre la sortie et la belle syntaxe.

(Je ne comprends pas pourquoi SO n'aligne pas le code correctement ... il est monospace mais pas aligné: S ... s'avère que c'est parce que j'utilisais IE6 (C'est le seul navigateur au travail: - (

+0

Je résolu mon problème ici est ma solution en php: $ fréq = array() // un tableau associoative avec le numéro et cette fréquence for ($ i = 0; i <$ 3; $ i ++) { for ($ j = 0; $ j <4; $ j ++) { if (array_key_exists ($ a [$ i] [$ j], $ freq)) { freq $ [$ a [$ i] [$ j]] + = 1; } autre { $ freq [$ a [$ i] [$ j]] = 1; } } } – eni

Questions connexes