|
|
|||||
Во прикольно! Что значит что знаки пунктуации совпадают с математическим знаком (факториал)! :-) В конце n у меня не факториал а восклицательный знак! :-)
П.С. А я раза три перечитал ваш пост и не могу понять что у меня написано такое что вызвало возмущение! LOL |
|
|||||
Ветеран форума
|
не будем спорить...
вот так это делает ПХП static void array_data_shuffle(zval *array TSRMLS_DC) { Bucket **elems, *temp; HashTable *hash; int j, n_elems, rnd_idx, n_left; n_elems = zend_hash_num_elements(Z_ARRVAL_P(array)); if (n_elems < 1) { return; } elems = (Bucket **)safe_emalloc(n_elems, sizeof(Bucket *), 0); hash = Z_ARRVAL_P(array); n_left = n_elems; for (j = 0, temp = hash->pListHead; temp; temp = temp->pListNext) elems[j++] = temp; while (--n_left) { rnd_idx = php_rand(TSRMLS_C); 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; } } HANDLE_BLOCK_INTERRUPTIONS(); hash->pListHead = elems[0]; hash->pListTail = NULL; hash->pInternalPointer = hash->pListHead; for (j = 0; j < n_elems; j++) { if (hash->pListTail) { hash->pListTail->pListNext = elems[j]; } elems[j]->pListLast = hash->pListTail; elems[j]->pListNext = NULL; hash->pListTail = elems[j]; } temp = hash->pListHead; j = 0; while (temp != NULL) { temp->nKeyLength = 0; temp->h = j++; temp = temp->pListNext; } hash->nNextFreeElement = n_elems; zend_hash_rehash(hash); HANDLE_UNBLOCK_INTERRUPTIONS(); efree(elems); } мне кажется на сях полюбому побыстрее будет. даже если алгоритм такой же. |
|
|||||
[+1 23.05.11]
Регистрация: Dec 2001
Сообщений: 4,159
|
Цитата:
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++ |
|
|||||
Pochemu m=n obiasnit legko!
Tak kak esli bi mi razmeshali n elementov v masiv sluchainoi posledovatelnostu, to kolichestvo mest v masive ravno n. A znachit esli mi delaetm m peremeshenii to koeficient peremeshivania sootvetstvuet koeficientu sluchainoi posledovatelnosti! :-) |
|
|||||
Ветеран форума
|
=)
мило... =) |
|
|||||
[+1 23.05.11]
Регистрация: Dec 2001
Сообщений: 4,159
|
Цитата:
Очевидно, кстати, что каждая перестановка перемещает сразу два элемента. Соответственно, нет оснований считать, что повышение n свыше m/2 даст "более случайный" массив. Если же подходить к этому делу серьезно, то нужно либо обосновывать (без демагогии), либо проводить "следственный эксперимент". Либо, как я уже говорил, выбирать алгоритм, не зависящий от "волшебного n".
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++ |
|
|||||
Crazy! Ia prikalivaus!
A esli seriozno to voobshe vi pravi m/2 dast kak mne kajetsa totje rezultat, a voobshe nado proverit eksperementalno! |
|
|||||
Ветеран форума
|
=)))))
что за детский сад? что проверить эксперементально? |
|
|||||
Da prosto interes poiavilsa vot i interesno chemu doljno ravnaca n pri masive m! Zavtra poidu v univer i sproshu u uchitela teorii veroiatnosti, on naverneka budet znat!
A chto eta cifra imeet znachenie eto tochno, naprimer esli n ravno 1 to poluchitsa figna! ne tak li? |
|
|||||
Ветеран форума
|
нет...
у меня 3 элемента в массиве... поэтому надо переставить один раз... |
Часовой пояс GMT +4, время: 04:55. |
|
« Предыдущая тема | Следующая тема » |
|
|