![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| HackMan |
|
|||
|
Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
Создать массив, например, из 1000 неповторяющихся чисел в диапазоне от 0 до 9999
Пока ничего умнее следующего придумать не смог
Но такой метод по скорости работы оставляет желать лучшего... Есть ли более рациональные способы? Это сообщение отредактировал(а) HackMan - 16.12.2007, 03:42 -------------------- Завтра - это самый загруженный день недели ![]() ![]() |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Как вариант (по сути - почти то же самое ;):
Как другой вариант- взять range(0, 9999), перемешать (shuffle), отрезать кусок в 1000 штук и отсортировать (раз надо), но это дольше, очевидно (хотя и быстрее, чем вложенный цикл). -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| Kallisto |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 20.4.2007 Репутация: -3 Всего: -1 |
|
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Kallisto, сам поймёшь свою ошибку?
|
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
||||
|
||||
| HackMan |
|
|||
|
Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
Kallisto, спасибо за функцию in_array.
Но всё же это наверняка не самый оптимальный способ. SelenIT, а почему shuffle будет работать медленнее? Mal Hack, спасибо, но эта функция заполняет массив с шагом, а не случайным образом Это сообщение отредактировал(а) HackMan - 17.12.2007, 09:11 -------------------- Завтра - это самый загруженный день недели ![]() ![]() |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Потому, что ей придется перемешивать все 10000 элементов, вместо того, чтобы тысячу с небольшим раз "потыкать" в диапазон в поисках незанятых мест. Это при заданных параметрах. Если понадобится выбрать порядка половины диапазона и более, то вариант с shuffle вполне может оказаться даже быстрее. А для маленьких массивов (сотня-другая элементов) вариант с shuffle + array_slice вообще можно смело использовать всегда - торможение будет совершенно незаметным по сравнению с простотой и надежностью метода. -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Совершенно верно. in_array - это более оптимальный, но всё равно - вложенный цикл с перебором всего массива.
Не говоря уже о том, что конкретный код Kallisto, не отвечает условиям задачи. Именно поэтому код SelenIT работает с ключами, а не со значениями. |
|||
|
||||
| HackMan |
|
|||
|
Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
Вот интересно, каким образом это делает MySQL при запросе
-------------------- Завтра - это самый загруженный день недели ![]() ![]() |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
весьма неоптимальным.
Вообще, 1000 реально случайных и уникальных значений представляются мне довольно странной потребностью |
|||
|
||||
| HackMan |
|
|||
|
Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
Просто был большой список людей, из которых случайным образом надо было выбрать только 500. Интересно было, какой алгоритм будет самым оптимальным.
Это сообщение отредактировал(а) HackMan - 19.12.2007, 03:48 -------------------- Завтра - это самый загруженный день недели ![]() ![]() |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Я понимаю, когда есть большой список, и надо отобрать из него случайным образом 500 человек.
Один раз. Я не понимаю, когда есть большой список, и надо отобрать из него случайным образом 500 человек каждую секунду. В первом случае оптимальность соверщенно не играет никакой роли. Второй же, как я уже написал - не понимаю, зачем может понадобиться. |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Feldmarschall, вы не понимаеете сути... 1000 Записей уже в памяти находятся в рэндомном практичеки порядке... ;)
Либо становятся такими после первого RAND() Учим матчасть по части того, как хранятся данные в памяти сервера БД.... |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Не всякая база влезает в оперативную память.
|
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
йоперный театр....
Вы хоть отдаете себе отчет, что в 80% БД, в 99% слчаев, реально постоянно работа ведется с 5-20% данными, которые и находятся в ОП... Остальное подгружается по мере необходимости... |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |