Journal Probleme de math

Posté par  .
Étiquettes : aucune
0
15
mar.
2004
Bonjour,

Voici mon probleme :

J'ai deux nombres entiers composes de 9 chiffres chacun :
- Un groupID (unique)
- Un lineNumber (unique pour chaque groupID).

Tout cela est dans une base de donnees ou les groupID representent des fichiers et les lineNumber leur lignes...

A partir de la, je cherche la fonction miracle qui me donnerait a partir d'un lineNumber et d'un groupID un numero TOTO qui satisfairait les conditions suivantes :

- a partir d'un groupId et d'un lineNumber on peut calculer un TOTO unique
- le TOTO est code sur 9 chiffres
- le TOTO est entier (ce n'est pas un CHAR(8)).
- optionel : a partir du TOTO on peut retrouver le groupId et le lineNumber qui ont servi a le creer.

Des idees?
  • # Re: Probleme de math

    Posté par  . Évalué à 5.

    tu veux une fonction de AxA->A avec A l'ensemble des nombres à 9 chiffres, injective?

    sachant que le cardinal de AxA est supérieur à celui de A, je ne pense pas que cela soit possible...
  • # Re: Probleme de math

    Posté par  . Évalué à 5.

    Mathématiquement c'est pas posible:

    Tu cherche une bijection entre deux ensembles finies, les deux ensembles auront donc le même cardinal. Or c'est pas le cas dans ton cas. Le premier ensemble est le produit cartésien de l'ensemble des nombres à 9 chiffres par lui même, donc de cardinal 10^9*10^9 = 10^18, le second c'est l'ensembe des nombres à 9 chiffres (les TOTO) qui de cardinal 10^9.

    Donc mathématiquement ça ne peut pas marcher.
  • # Re: Probleme de math

    Posté par  . Évalué à 1.

    marchera pas...
  • # Re: Probleme de math

    Posté par  . Évalué à 3.

    c'est impossible :)

    il y a 10^9 TOTOs possibles

    et il y a 10^9*10^9 = 10^18 couples (groupID,lineNumber)

    donc si un groupID possède 10^9 lineNumber, et que tu calcules tous les TOTOs de ce groupID, soit tu vas en trouver 10^9, et dans ce cas tu as parcourus tous les TOTOs possibles et il ne t'en reste plus pour les autres groupID, soit tu en as moins que 10^9 et ça veut dire qu'il y en a au moins 2 identiques.

    tu ne peux pas non plus retrouver le groupID et le lineNumber, car cela voudrais dire que tu peux coder dans 10^9 possibilités l'information contenue dans 10^18 possibilités
    • [^] # Re: Probleme de math

      Posté par  . Évalué à 2.

      il peut utiliser la zlib pour compresser le résultat :-)
      • [^] # Re: Probleme de math

        Posté par  . Évalué à 3.

        héhé :)
        bien tenté mais la zlib c'est pas la garcimorelib, elle te transforme pas un chiffre en un chiffre plus petit :)
        • [^] # Re: Probleme de math

          Posté par  . Évalué à 1.

          si toto = 0 retourner toto
          sinon retourner 1

          voila... je l'ai reduit ton chiffre ;-)
          • [^] # Re: Probleme de math

            Posté par  . Évalué à 1.

            ah ouais et tu le retrouves comment le nombre de départ ?
            à moins que l'objectif de la zlib ne m'ait echapé :)

            PS: je voulais dire nombre et pas chiffre dans mon post :)
        • [^] # Re: Probleme de math

          Posté par  . Évalué à 2.

          S'il est sûr de ne pas avoir plus de 10^9 couples (groupId, lineNumber), il peut aussi utiliser ... une base de données !

          Création :
          insert into matable (toto, groupId, lineNumber) values (nextval(toto_seq), $groupId, $lineNumber);

          Puis :
          select toto from matable where groupId = $groupId and lineNumber = $lineNumber;

          Ou :
          select groupId, lineNumber from matable where toto = $toto;

          Magique, non ?
        • [^] # Re: Probleme de math

          Posté par  . Évalué à 2.

          zlib suxor
          garcimorelib suxor aussi (mais un peu moins)

          i2bp roxorise des mamans ours et répond parfaitement à ce problème.

          My 2 cents.
          • [^] # Re: Probleme de math

            Posté par  . Évalué à 2.

            ça me rappelle un forum ou un type disait que c'était possible avec un md5 d'une chaine de caractères de retrouver la chaine initiale

            j'avais trouvé ça encore plus puissant qu'I2BP :)
            • [^] # Re: Probleme de math

              Posté par  . Évalué à 1.

              J'ai deja lu dans les commentaires de linuxfr que le md5 (d'une iso par exemple) etait unique. Ce qui parait moins enorme, mais qui revient au meme :)
            • [^] # Re: Probleme de math

              Posté par  . Évalué à 1.

              je veux voir çà

              ;->
              • [^] # Re: Probleme de math

                Posté par  . Évalué à 1.

                Vive le brute force ... elle fait combien de caractères la chaine ? ;)
    • [^] # Re: Probleme de math

      Posté par  . Évalué à 1.

      Comme le cahier des charges ne fait aucune restriction sur ce point, je propose d'écrire TOTO en base 100 (eh oui, base 20 ça n'est pas suffisant non plus...)
      • [^] # Re: Probleme de math

        Posté par  . Évalué à 1.

        oui, pas mal

        on peut aussi faire varier la couleur des chiffres ou leur taille en milimètres, ou bien leur angle par rapport à l'horizontale, ou encore la longueur des pointillés avec lesquels ils sont dessinés
  • # Re: Probleme de math

    Posté par  . Évalué à 1.

    Ok. Merci a tous pour vos reponses. Meme s'il ressort que la cardinalite des nombres en jeu ne permette pas de garder un resultat injectif sur 8 chiffres, ca m'a aide a ecarte des possibilites. Merci encore a vous tous.
    • [^] # Re: Probleme de math

      Posté par  . Évalué à 1.

      si tu renonces à ton type int, le md5(group_id ^line) pourrait être fun
      par contre, c'est à sens unique ;-)
      en gardant un integer, un CRC d'une 50aine de caractères ? ça doit être possible ...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.