Mutable int ? (passage par référence)
Résolu/Fermé
mikis69
Messages postés
168
Date d'inscription
mardi 26 novembre 2013
Statut
Membre
Dernière intervention
11 février 2019
-
Modifié le 24 mars 2017 à 00:43
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019 - 7 avril 2017 à 00:35
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019 - 7 avril 2017 à 00:35
A voir également:
- Mutable int ? (passage par référence)
- Reference pto - Accueil - Box & Connexion Internet
- Passage qwerty azerty - Guide
- Passage windows 7 à 10 - Accueil - Mise à jour
- Int converter - Télécharger - Bureautique
- Int(input()) - Forum Python
2 réponses
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
Modifié le 24 mars 2017 à 07:11
Modifié le 24 mars 2017 à 07:11
Bonjour,
Cependant je pense que la bonne pratique est de mettre l'entier comme attribut de la classe courante.
À voir ce que ça donne dans le contexte.
La confiance n'exclut pas le contrôle
AtomicIntegerfait le job bien qu'il ne sert pas à ça normalement. Tu aurais aussi pu faire un
int[] tab = new int[1];et changer la valeur de
tab[0].
Cependant je pense que la bonne pratique est de mettre l'entier comme attribut de la classe courante.
int k; public Node(int debut) { k = debut; } public int getFin() { return k; }
À voir ce que ça donne dans le contexte.
La confiance n'exclut pas le contrôle
mikis69
Messages postés
168
Date d'inscription
mardi 26 novembre 2013
Statut
Membre
Dernière intervention
11 février 2019
7 avril 2017 à 00:35
7 avril 2017 à 00:35
Finalement KX, tu avais raison !
L'attribut fin pour la classe Node n'avait pas lieu d'être car nous n'en avons pas besoin pour construire l'arbre des suffixes. Enfin si, nous en avons besoin mais pas sous la forme d'un mutable int. Nous en avons besoin simplement lorsque l'on crée un noeud interne qui aura un fin fixe (sauf si on sépare ce même noeud mais dans ce cas, un simple setFin(int fin) est suffisant)
Je suis désolé du retard pour la réponse, mais beaucoup de boulot avec l'école, du coup, j'ai seulement eu fini l'implémentation de l'arbre maintenant ^^
Je te remercie :)
Mikis
L'attribut fin pour la classe Node n'avait pas lieu d'être car nous n'en avons pas besoin pour construire l'arbre des suffixes. Enfin si, nous en avons besoin mais pas sous la forme d'un mutable int. Nous en avons besoin simplement lorsque l'on crée un noeud interne qui aura un fin fixe (sauf si on sépare ce même noeud mais dans ce cas, un simple setFin(int fin) est suffisant)
Je suis désolé du retard pour la réponse, mais beaucoup de boulot avec l'école, du coup, j'ai seulement eu fini l'implémentation de l'arbre maintenant ^^
Je te remercie :)
Mikis
24 mars 2017 à 12:06
La valeur fin ne changera jamais car elle a juste la valeur du int (à l'instant courant) lors de sa construction. Or si je passe la référence de l'objet AtomicInteger, j'ai la valeur finale (n) lorsque je fais un
Maintenant à savoir si c'est un bonne solution ou pas.. ?
24 mars 2017 à 18:42
Rien ne t'empêches de changer la valeur du int k; au fur et à mesure, de même que tu changes la valeur de ton AtomicInteger.
Par contre si tu arrives à ce genre de question c'est peut être que ce n'est pas à l'objet Node de porter cette information de fin, mais qu'elle est à récupérer ailleurs.
Est ce que tu pourrais donner un code plus complet pour revoir éventuellement la structure de bade que tu utilises ?
24 mars 2017 à 20:03
Donc on fait comme je l'ai dit dans le premier poste, on a un mot de longueur n et il faut construire l'arbre des suffixes en O(n). On peut donc faire une seule boucle for(int i = 0; i < n; i++).
Si la valeur fin ne se met pas à jour automatiquement (comme avec le AtomicInteger), alors je devrai faire par exemple :
Mais ici alors je ne suis plus en O(n) si à chaque itération je dois manuellement mettre à jour la valeur de fin de chaque fils.
L'objet Node est obligé de savoir quand il finit (à l'itération i) normalement.. Mais je me demande si cette information est vraiment nécessaire dans la classe Node puisque tout le traitement (normalement) se fait dans la classe SuffixTree (du coup, je me demande si je vais pas utiliser le 'i' à proprement dit à la place)
Je n'ai pas encore le code car j'essaie de comprendre correctement l'algorithme proposé par Ukkonen avant de me mettre à l'implémenter. Je me renseigne simplement pour savoir si c'est correct d'utiliser le AtomicInteger.
Merci pour ta réponse en tout cas ^^
24 mars 2017 à 21:04
Exemple :
Dans ce cas, tu crées d'abord un objet Arbre, qui porte les valeurs début/fin.
Puis tu créés des objets Node qui appartiennent à cet arbre, et partagent donc toutes les valeurs de l'Arbre.
25 mars 2017 à 00:18
Mais pourquoi pas utiliser cette manière, je n'y suis pas familier mais je peux essayer :)
Je finis de comprendre l'algorithme et après je me met à l'implémentation (J'ai mis le lien dans le premier poste pour plus d'information, si ce que j'ai expliqué n'était pas clair au cas où ^^)
Je reviendrai ici lorsque j'aurai plus d'info sur l'implémentation !
Merci en tout cas pour l'idée