Je résolu ce problème à l'aide d'un graphique, mais malheureusement maintenant je suis coincé à devoir utiliser un tableau 2d et je poser des questions sur la meilleure façon d'aller à ce sujet:Quelle est la manière la plus rapide et la plus concise/correcte d'implémenter cette classe de modèle soutenue par des valeurs dans un tableau à deux dimensions?
public class Data {
int[][] structure;
public data(int x, int y){
structure = new int[x][y]
}
public <<TBD>> generateRandom() {
// This is what my question is about
}
}
J'ai un contrôleur/événement classe de gestionnaire:
public class Handler implements EventHandler {
@Override
public void onEvent(Event<T> e) {
this.dataInstance.generateRandom();
// ... other stuff
}
}
Voici ce que chaque méthode fera:
- Data.generateRandom() va générer une valeur aléatoire à un endroit aléatoire dans le tableau 2d int si la re existe une valeur dans la structure qui n'est pas initialisée ou une valeur qui est égale à zéro
- Si il n'y a pas de place disponible dans la structure, l'état de la structure est final (c.-à-d. au sens littéral, et non pas la déclaration Java)
Voilà ce que je me demande:
Quelle est la façon la plus efficace de vérifier si la carte est pleine? En utilisant un graphique, j'ai pu vérifier si la carte était pleine sur O (1) et obtenir un emplacement disponible mais aussi aléatoire sur le pire cas O (n^2 - 1), dans le meilleur des cas O (1). Évidemment, maintenant, avec une amélioration de tableau n^2 est difficile, donc je me concentre maintenant sur la vitesse d'exécution et LOC. Est-ce que le meilleur moyen de le faire maintenant pour vérifier l'ensemble de tableau 2D en utilisant des flux comme:
Arrays.stream(board).flatMapToInt(tile -> tile.getX()).map(x -> x > 0).count() > board.getWidth() * board.getHeight()
Même en muant les éléments déjà sélectionnés, si vous n'utilisez pas de structure de données auxiliaires, la recherche déterministe d'un élément disponible réellement aléatoire nécessite de rechercher l'ensemble de plus d'un million d'éléments; deux fois si vous êtes autorisé uniquement le stockage constant. C'est un goulot d'étranglement. Êtes-vous prêt à passer une partie significative d'une seconde? Parce que c'est ce que ça va prendre. Les bonnes manières de structurer le code viennent après que vous ayez compris comment résoudre le problème principal. – Gene