[JAVA] comment transformer un string en int
Fermé
paladin3
Messages postés
2
Date d'inscription
mercredi 29 novembre 2006
Statut
Membre
Dernière intervention
1 décembre 2006
-
29 nov. 2006 à 14:08
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 - 1 déc. 2006 à 09:28
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 - 1 déc. 2006 à 09:28
A voir également:
- [JAVA] comment transformer un string en int
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Transformer majuscule en minuscule word - Guide
- Java décompiler - Télécharger - Langages
2 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
30 nov. 2006 à 12:28
30 nov. 2006 à 12:28
Il est mathématiquement impossible de conserver le tri.
En effet, prends le mot "a". Donnons lui une valeur, par exemple, 1.
Le premier mot, par ordre alphabétique, après "a" est : "aa". Donc, on lui donne la valeur 2. Le 3e est bien "aaa", etc.
Si tu continues comme ça, tu verras que tu ne pourras JAMAIS atteindre la lettre "b". Tous les nombres vont être utilisés pour les "a"... Tu n'obtiendras même pas "aaab". Autant dire le début de l'ordre alphabétique !
Cela vient en fait du caractère "discret" de l'ensemble des entiers (il y a un nombre fini d'entiers entre deux nombres). Dans la plupart des n'est pas le cas de l'ensemble des mots... (En fait, "la plupart des cas" représente tous les mots qui contiennent plus d'une lettre distincte)
Ca parrait noir, comme ça, mais... je pars d'un postulat, c'est que tu as un ensemble de chaines possibles infinies. Si tel n'est pas le cas, alors tu peux te créer une table de Hash : tu prends toutes les chaines potentielles que tu es à même d'avoir à utiliser, tu les tries, tu leur associes un numéro.
Tu n'as besoin de faire ça qu'une fois, au chargement de ton programme par exemple.
Ensuite, passe par cette table à chaque fois que tu veux faire des tris ou autre...
Voilà, j'espère t'avoir éclairé, je sais que ça reste très théorique comme réponse... Bon courage !
Xavier
En effet, prends le mot "a". Donnons lui une valeur, par exemple, 1.
Le premier mot, par ordre alphabétique, après "a" est : "aa". Donc, on lui donne la valeur 2. Le 3e est bien "aaa", etc.
Si tu continues comme ça, tu verras que tu ne pourras JAMAIS atteindre la lettre "b". Tous les nombres vont être utilisés pour les "a"... Tu n'obtiendras même pas "aaab". Autant dire le début de l'ordre alphabétique !
Cela vient en fait du caractère "discret" de l'ensemble des entiers (il y a un nombre fini d'entiers entre deux nombres). Dans la plupart des n'est pas le cas de l'ensemble des mots... (En fait, "la plupart des cas" représente tous les mots qui contiennent plus d'une lettre distincte)
Ca parrait noir, comme ça, mais... je pars d'un postulat, c'est que tu as un ensemble de chaines possibles infinies. Si tel n'est pas le cas, alors tu peux te créer une table de Hash : tu prends toutes les chaines potentielles que tu es à même d'avoir à utiliser, tu les tries, tu leur associes un numéro.
Tu n'as besoin de faire ça qu'une fois, au chargement de ton programme par exemple.
Ensuite, passe par cette table à chaque fois que tu veux faire des tris ou autre...
Voilà, j'espère t'avoir éclairé, je sais que ça reste très théorique comme réponse... Bon courage !
Xavier
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
1 déc. 2006 à 09:28
1 déc. 2006 à 09:28
Bonjour,
excuse moi mais je n'ai abosluement rien compris à ton problème.
Ne te serait-il pas possible de mettre un exemple de fonctionnement de ton programme pour qu'un puisse comprendre?
excuse moi mais je n'ai abosluement rien compris à ton problème.
Ne te serait-il pas possible de mettre un exemple de fonctionnement de ton programme pour qu'un puisse comprendre?
30 nov. 2006 à 16:20
En fait, je viens de voir que tu te limitais à des chaînes de 32 caractères, donc à un dictionaire fini... Il est donc possible de trouver une fonction qui permette de conserver le classement.
Par contre, une bijection évidente serait (presque) celle que tu as suggérée (sauf que tu te places en base 10, alors qu'il faudrait le faire en base 26). Mais comme tu l'as judicieusement fait remarquer, le coût est exorbitant.
Sincèrement, je ne suis pas sûr que ce genre de fonction t'apporte le moindre gain : certes, trier des entiers est plus rapide que trier des chaînes (plus exactement, c'est la comparaison de valeurs qui est plus lente, mais l'algo de tri derrière est surement le même), mais cette différence est trop fine pour qu'on puisse "patcher" le tri des entiers pour trier des chaines et rester plus efficace que le tri d'entiers... Et si c'était faisable, ce serait surement implémenté ;)
Xavier
1 déc. 2006 à 09:11
Bon tant pis :(
Je vais tenter une optimisation du code (elle est faite) et peut etre qu'en augmentant les performances de mon serveur je gagnerais les précieuses secondes qu'il me manque.
Ou alors je tenterais une autre approche (couper mes index en plusieurs morceaux par exemple pour limiter la taille)