Est-il possible d'avoir un identifiant invariant par rotation d'une matrice booléenne?

StackOverflow https://stackoverflow.com/questions/1812737

  •  06-07-2019
  •  | 
  •  

Question

Disons que j'ai une matrice de uns et de zéros, et j'aimerais un "identifiant" pour cette matrice qui prend la même valeur, que la matrice soit tournée de 90, 180 ou 270 degrés, c'est-à-dire un 4-to -1 mappage. Idéalement, cet identifiant devrait être 1/4 de la taille de la matrice. Est-il possible d'écrire une fonction qui effectue ce mappage?

Contexte: Je regardais ce problème sur l'ensemble de problèmes UVa. . Je n’ai pas vraiment besoin d’une telle fonction pour résoudre le problème, mais il semble raisonnable qu’elle existe, et son utilisation constituerait une solution plus élégante.

Était-ce utile?

La solution

Oui. Vous pouvez prendre votre matrice d'origine A et la faire pivoter vers toutes les configurations possibles A ', A' 'et A' ''. Vous pouvez ensuite les trier en utilisant le tri de votre choix (soyez juste cohérent), choisissez le premier et hachez-le en utilisant n'importe quelle fonction de hachage de votre choix (là encore, la fonction de hachage réelle n'a pas d'importance, soyez cohérente).

Évidemment, ceci peut être fortement optimisé en évitant de faire la rotation et le tri complets - vous pouvez faire les comparaisons paresseusement, en vous arrêtant dès que vous savez quelle rotation est triée en premier - mais le principe est le même.

Autres conseils

Vous pouvez simplement mordre XOR toutes les rotations, ce sera un identifiant symétrique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top