Si je remplis des nombres de 1 à 4 dans une matrice deux par deux, il y a 16 combinaisons possibles. Ce que je veux faire est de stocker des valeurs dans un tableau de taille 24 correspondant à chaque matrice. Donc, étant donné un deux par deux matrice, je veux une méthode efficace d'indexation pour indexer dans la matrice directement. (Je ne veux on compare les 4 éléments pour chacune des 16 positions). Quelque chose de similaire au vecteur de bits? mais pas capable de comprendre comment? Je le veux pour une matrice 4 par 4 remplissant également de 1 à 9méthode d'indexation efficace pour une 2 par 2
Répondre
pour clarifier: vous cherchez une fonction de hachage efficace pour les matrices 2x2. vous voulez utiliser les résultats de la fonction de hachage pour comparer les matrices pour voir si elles sont les mêmes. Tout d'abord, supposons que vous voulez vraiment les chiffres de 0 à 3 au lieu de 1 à 4 - ce qui le rend plus facile, et est plus informaticien. Ensuite, 16 n'est pas correct. il y a 24 permutations possibles des nombres 0-3. Il y a 4^4 = 256 chaînes possibles de longueur 4 qui utilisent un alphabet de quatre lettres (vous pouvez répéter les numéros déjà utilisés).
ou l'autre est trivial pour coder en un seul octet. Laissez les 2 premiers bits représentent la (0,0) position, les 2 bits suivants représentent (0,1), et ainsi de suite. Que, de hachage votre matrice 2x2, il suffit de faire:
hash = m[0][0] | (m[0][1] << 2) | (m[1][0] << 4) | (m[1][1] << 6
exemple au hasard: le nombre 54 en binaire est 00110110 qui représente une matrice comme:
2 1
3 0
Lorsque vous avez besoin d'efficacité, parfois la clarté du code va par la fenêtre :)
Vous devez d'abord être sûr que vous voulez l'efficacité - vous avez des informations de profilage pour être sûr que le code de comparaison simple est trop inefficace pour vous?
Vous pouvez simplement le traiter comme un tableau d'octets de la même taille. memcmp
ne fait des comparaisons de mémoire arbitraire:
Une structure de données telle que:
int matrix[2][2];
est stocké le même que:
int matrix[2*2];
qui pourrait être attribué de façon dynamique en tant que:
typedef int matrix[2*2];
matrix* m = (matrix*)malloc(sizeof(matrix));
Je ne suggère pas que vous les allouer dynamiquement, j'illustre comment les octets dans votre type d'origine est effectivement mis en mémoire.
Par conséquent, ce qui suit est valable:
matrix lookup[16];
int matrix_cmp(const void* a,const void* b) {
return memcmp(a,b,sizeof(matrix));
}
void init_matrix_lookup() {
int i;
for(i=0; i<16; i++) {
...
}
qsort(lookup,16,sizeof(matrix),matrix_cmp));
}
int matrix_to_lookup(matrix* m) {
// in this example I'm sorting them so we can bsearch;
// but with only 16 elements, its probably not worth the effort,
// and you could safely just loop over them...
return bsearch(m,lookup,16,sizeof(matrix),matrix_cmp);
}
Je n'ai pas compris. S'il vous plaît expliquer dans certains détails. – avd
- 1. MySQL Trier par 2 colonnes
- 2. Fusionner 2 tables pour une requête SELECT?
- 3. Ruby on Rails - Partager une méthode avec 2 modèles
- 4. Comment appeler une méthode IronPython 2 à partir de C#
- 5. Pour faire une différence entre 2 dates
- 6. ASP.NET MVC 2 Aperçu 1 Pour prévisualiser 2 Migration
- 7. 2 comptes référence 2 pages maîtres différentes?
- 8. Quelle est la différence entre "2 * 2" et "2 ** 2" en Python?
- 9. Comment soumettre des valeurs par courrier en utilisant une action, méthode dans Struts 2
- 10. struts 2, tiles 2 titre dynamique
- 11. HABTM 2 tables 2 relations différentes
- 12. Bon algorithme pour dessiner des polygones solides à 2 dimensions?
- 13. Utilitaires Canvas pour Silverlight 2
- 14. Maven-2: éviter l'emballage par défaut?
- 15. Comment comparer 2 chaînes par ordre alphabétique
- 16. sortie 2 champs de groupe Linq Par
- 17. LINQ to Entities pour soustraire 2 dates
- 18. TSQL - Comment utiliser une instruction case pour 2 colonnes?
- 19. ASP.NET MVC 2 Preview 2 Route demande ne fonctionne pas
- 20. Extrait l'élément de 2 vecteurs?
- 21. Prism 2 pour Silverlight avec Unity - 'System.Threading.SynchronizationLockException'
- 22. ASP.NET MVC 2 DisplayFor()
- 23. méthode récursive de queue à plusieurs 2 numéros
- 24. Méthode la plus efficace pour surveiller une file d'attente
- 25. Méthode efficace pour vérifier si DataTable a une ligne
- 26. Turbogears 2 Tutoriels?
- 27. différence entre 2 données
- 28. Déploiement d'ASP.NET MVC 2 Preview 2 avec des zones
- 29. Comment remplacer 2 fichiers?
- 30. Erreur d'authentification Apache 2
Désolé, j'écrit 4! comme 16. – avd