DTB>Как быстро заполнить массив рандомными числами без повторов?
DTB>int a[36];
DTB>// заполнить рандомно, числа от 0 до 35 включительно.
DTB>-----------------
DTB>Мой способ занимает несколько минут, можно ли уменьшить время?
DTB>отсюда
DTB>я нахожусь в некотором замешательстве
DTB>Как быстро заполнить массив рандомными числами без повторов?
DTB>int a[36];
DTB>// заполнить рандомно, числа от 0 до 35 включительно.
DTB>-----------------
DTB>Мой способ занимает несколько минут, можно ли уменьшить время?
DTB>отсюда
DTB>я нахожусь в некотором замешательстве
все вполне логично. Он скорей всего генирирует очередное число и проверяет не бы ло ли его в массиве уже. Соответственно последние числа будут подбираться довольно долго, пока генератор не выдаст наконец числа которых небыло.
N_>все вполне логично. Он скорей всего генирирует очередное число и проверяет не бы ло ли его в массиве уже. Соответственно последние числа будут подбираться довольно долго, пока генератор не выдаст наконец числа которых небыло.
если комп не ХТ то даже в этом случае несколько минут не будет ну никак Но что-то мне кажется что и на ХТ такого не будет даже при таком подходе.
N_>все вполне логично. Он скорей всего генирирует очередное число и проверяет не бы ло ли его в массиве уже. Соответственно последние числа будут подбираться довольно долго, пока генератор не выдаст наконец числа которых небыло.
N_>WBR, K.O.
да ладно. Вот тупейший код на перле работающий по твоему методу -- даже не использует хэши а честно линейно проходит много раз списки.
DTB>Как быстро заполнить массив рандомными числами без повторов?
DTB>int a[36];
DTB>// заполнить рандомно, числа от 0 до 35 включительно.
DTB>-----------------
DTB>Мой способ занимает несколько минут, можно ли уменьшить время?
DTB>отсюда
DTB>я нахожусь в некотором замешательстве
наверно он сначала гененерирует 36 случайных, а потом проверяет, удовлетворяют они или нет условию "без повторов".
Здравствуйте, dilmah, Вы писали: D>да ладно. Вот тупейший код на перле работающий по твоему методу -- даже не использует хэши а честно линейно проходит много раз списки.
Скорей всего алгоритмы рандома раздные, мож у автора менее равномерный и некоторые числа выдает крайне редко.
Здравствуйте, saturas, Вы писали:
DTB>>я нахожусь в некотором замешательстве
S>наверно он сначала гененерирует 36 случайных, а потом проверяет, удовлетворяют они или нет условию "без повторов".
даже если так, минут скорей всего там тоже не будет. можно предположить, что это опечатка, не минут, а секунд, но даже это особо ситуацию не исправляет
S>>наверно он сначала гененерирует 36 случайных, а потом проверяет, удовлетворяют они или нет условию "без повторов".
DTB>даже если так, минут скорей всего там тоже не будет. можно предположить, что это опечатка, не минут, а секунд, но даже это особо ситуацию не исправляет
такой метод требует примерно 36^36 / (36!) попыток сгенерировать 36 случайных. Даже если такиъх попыток делать миллиард в секунду, то понадобится 80 часов:
Здравствуйте, saturas, Вы писали:
S>Здравствуйте, Nik_1, Вы писали:
N_>>Скорей всего алгоритмы рандома раздные, мож у автора менее равномерный и некоторые числа выдает крайне редко.
S>автор уточнил:
S>
S>Я создавал рандомное число, зависимое от времени. Проверял есть ли такое в массиве и повторял снова.
Здравствуйте, DTB, Вы писали:
S>>наверно он сначала гененерирует 36 случайных, а потом проверяет, удовлетворяют они или нет условию "без повторов". DTB>даже если так, минут скорей всего там тоже не будет. можно предположить, что это опечатка, не минут, а секунд, но даже это особо ситуацию не исправляет
Если брать случайным числом текущую секунду то примерно в половине случаев такой "алгоритм" будет работать более минуты.
DTB>Как быстро заполнить массив рандомными числами без повторов?
DTB>int a[36];
DTB>// заполнить рандомно, числа от 0 до 35 включительно.
DTB>-----------------
DTB>Мой способ занимает несколько минут, можно ли уменьшить время?
DTB>отсюда
DTB>я нахожусь в некотором замешательстве
при каждом вызове рэндом функции менять диапазон
это работает?
Здравствуйте, yoriсk.kiev.ua, Вы писали:
YKU>Здравствуйте, DTB, Вы писали:
S>>>наверно он сначала гененерирует 36 случайных, а потом проверяет, удовлетворяют они или нет условию "без повторов". DTB>>даже если так, минут скорей всего там тоже не будет. можно предположить, что это опечатка, не минут, а секунд, но даже это особо ситуацию не исправляет
YKU>Если брать случайным числом текущую секунду то примерно в половине случаев такой "алгоритм" будет работать более минуты.
Отаке способ
1. Сначала честно заполнить по порядку
for (int i = 0; i < 36; i++)
a[i] = i;
2. А теперь какой-нибудь random_shuffle
D>такой метод требует примерно 36^36 / (36!) попыток сгенерировать 36 случайных. Даже если такиъх попыток делать миллиард в секунду, то понадобится 80 часов
В переводе на стандартное центаврийское время это будет несколько минут
Здравствуйте, DTB, Вы писали:
DTB>[q] DTB>Как быстро заполнить массив рандомными числами без повторов?
DTB>int a[36]; DTB>// заполнить рандомно, числа от 0 до 35 включительно.
Кажется, это было в каком-то фильме, название типа "Карты...