Dan Kalowsky wrote:
> Anyone able to confirm or deny the validity of this patch?
>
>
> ---------- Forwarded message ----------
>
> [2002-07-18 01:03:51] [EMAIL PROTECTED]
>
> The shuffle() function in the CVS is (still) broken. It does not
> correctly generate all possible combinations of the array. (I know this
> function was recently updated, this test is with new version.)
>
> Here is a diff to fix the problem:
>
> --- array.c Thu Jul 18 00:50:54 2002
> +++ array.new.c Thu Jul 18 00:49:35 2002
> @@ -1441,7 +1441,7 @@
> {
> Bucket **elems, *temp;
> HashTable *hash;
> - int j, n_elems, cur_elem = 0, rnd_idx, n_left;
> + int j, n_elems, rnd_idx, n_left;
>
> n_elems = zend_hash_num_elements(Z_ARRVAL_P(array));
>
> @@ -1457,13 +1457,12 @@
> elems[j++] = temp;
> while (--n_left) {
> rnd_idx = php_rand(TSRMLS_C);
> - RAND_RANGE(rnd_idx, cur_elem, n_left, PHP_RAND_MAX);
> - if (rnd_idx != cur_elem) {
> - temp = elems[cur_elem];
> - elems[cur_elem] = elems[rnd_idx];
> + RAND_RANGE(rnd_idx, 0, n_left, PHP_RAND_MAX);
> + if (rnd_idx != n_left) {
> + temp = elems[n_left];
> + elems[n_left] = elems[rnd_idx];
> elems[rnd_idx] = temp;
> }
> - cur_elem++;
> }
>
> HANDLE_BLOCK_INTERRUPTIONS();
>
I've send the message to Dan, already.
Just posting php-dev again.
Top elements have more chance than end elements.
All elements should have equal chance to be shuffled.
--
Yasuo Ohgaki
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php