Représentation, hachage et somme

Mammouth du PHP | 1668 Messages

16 déc. 2010, 22:57

Bonsoir à toutes à tous,

J'ai un tableau à deux dimensions de 0 et de 1 de taille variable (qui peut être assez grand) dont j'aimerais conserver toutes les versions (il peut y en avoir autant que de case). Je pensais, dans un premier temps le transformer en entier (ce qui m'aurais permis d'utiliser & et ~). Seulement PHP alloue dynamiquement ses entiers, ce qui est une bonne chose pour un développement "commun". Malgré un certains nombre de recherche je n'ai pas trouvé de moyen de soit ré-alloué un nombre précis de bits soit trouver un méthode de hachage permettant de faire des XOR équivalents au binaire.
Le soucis est de savoir si un schéma est faisable en fonction de quelques règles, je vais tenter une "brute-force".

Pour toutes vos idées,
Par avance,
Merci
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphant du PHP | 209 Messages

17 déc. 2010, 07:55

>Seulement PHP alloue dynamiquement ses entiers

Qu'est ce que ca veux dire ?
--
Eric

ViPHP
xTG
ViPHP | 7331 Messages

17 déc. 2010, 08:10

Je pense qu'il voulait dire que PHP s'occupe tout seul de l'allocation et que le programmeur n'a pas son mot à dire.
Si je comprend bien son soucis vient du fait qu'il ne peut avoir que des entiers, donc 32bits alors qu'il ne lui faut qu'un seul. Ce qui cause une surcharge de la mémoire de par l'énorme quantité de données qu'il a.
Quantité tout à fait négligeable si chaque nombre était codé sur un bit mais qui ne l'est pas actuellement.

Ai-je compris ?

Peut être peux-tu essayer lors de la création de l'array de passer par la fonction base_convert(), il ferra peut être une différence lors de l'allocation mémoire.

Eléphant du PHP | 209 Messages

17 déc. 2010, 08:18

Mais...

Un tableau de bit == un entier

Non ?
--
Eric

ViPHP
xTG
ViPHP | 7331 Messages

17 déc. 2010, 08:27

Euh... Seulement si tu as le même nombre de bits que de nombre de bits de codage dans un entier (32bits ou 64bits).
Dans tous les cas cela dépend de comment il a codé son système, pour ma part j'avais compris qu'il utilisait un truc de ce genre : array(1,0,1,0,0,0,1)
Vu qu'il parle d'un tableau à plusieurs dimensions, c'est une chose que tu ne fais pas avec une chaîne de bits ça...

Or si on code ceci on alloue 7 * 32 entiers.

Mammouth du PHP | 1668 Messages

17 déc. 2010, 17:40

>Seulement PHP alloue dynamiquement ses entiers

Qu'est ce que ca veux dire ?
ça veut dire que je peut pas allouer moi même le nombre de bits précis dont j'ai besoin, d'un côté ça simplifie bien l'un chose, d'un autre côté là ça m'ennuie.
En fait j'ai besoin de plus de 32 ou 64 bits.

Par avance merci de votre aide
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
xTG
ViPHP | 7331 Messages

17 déc. 2010, 21:00

As-tu essayé de déclarer tes nombres dans la base hexa ?
Il me semble avoir déjà vu des codes utilisant des chiffres hexa portant sur plus de 32bits.

devlop78
Invité n'ayant pas de compte PHPfrance

17 déc. 2010, 22:19

>Seulement PHP alloue dynamiquement ses entiers

Qu'est ce que ca veux dire ?
ça veut dire que je peut pas allouer moi même le nombre de bits précis dont j'ai besoin, d'un côté ça simplifie bien l'un chose, d'un autre côté là ça m'ennuie.
En fait j'ai besoin de plus de 32 ou 64 bits.

Par avance merci de votre aide

Je risque de dire une bêtise, mais ni en PHP, ni en Java (hé oui !), pointer sur la mémoire n'est pas possible, contrairement à C# en mode unsafe. Toutefois, il est possible de mettre le 0 et 1 sous forme de chaine de caractère (1 octet) ou de booléan (je sais pas combien de bits).

Mammouth du PHP | 1668 Messages

18 déc. 2010, 07:55

Bonjour,

La question que je me pose : est-il possible de manipuler les bits d'une chaîne de caractère comme un seul "grand entier" ?

Par avance merci
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphant du PHP | 209 Messages

18 déc. 2010, 08:55

Tu veux faire quelque chose comme ca :
echo 212132132134545646556212123 & 213215465456456213 ;
?

A part en éclatant les nombre en morceaux de 32 (64) bits et en recrééant les opérations, je ne vois pas.
--
Eric

Mammouth du PHP | 1668 Messages

18 déc. 2010, 21:38

Bonsoir,

La question que je me pose est : comment sont stockées les chaînes de caractères ? si c'est comme en C, dois pouvoir appliquer les opérateurs binaires dessus, non ?

Par avance,
merci
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

devlop78
Invité n'ayant pas de compte PHPfrance

19 déc. 2010, 02:54

Oui, tu peux, mais pas de pointeurs. Et surtout, c'est php qui s'en occupe, pas toi.

Ex :

$machin = "truc"; // Php s'occupe de l'allocation de la variable
$machin2 = $machin; // Php s'occupe de faire pointer $machin2 sur $machin, tout en enregistrant qu'il ne s'agit pas d'une référence.
$machin2 = 1; // Php s'occupe de ne plus pointer sur $mahcin2, et effectue le transtypage.
$machin3 = &$machin2; // php s'occupe de faire une référence ...

Par contre, il est tout à fait possible d'utiliser les opérateurs binaires tels que & et | qui diffèrent des opérateurs logiques && et ||

Mammouth du PHP | 1668 Messages

19 déc. 2010, 20:46

Merci, faut juste que je vois comment les "allouer", mais ça devrait allez.
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol