|
|
|
Выборка из миллиарда
|
|||
|---|---|---|---|
|
#18+
Dima TС учетом большого числа дырок, лично мне кажется оптимальный алгоритм - сначала поиск интервала с дыркой от единицы вверх, затем поиск непрерывного вниз двоичным поиском. т.е. берем 1 - сканируем весь поток, затем 2,4,8 и т.д. как получили дырку - продолжаем между предыдущим и текущим, т.е. дальше чистый двоичный поиск. вероятность что нет первого составляет 10^3 к 1, нет второго 10^6 к 1 и т.д. (если теорию вероятностей правильно помню), т.е. скорее всего за один проход все найдется. В худшем случае 40 сканов для непрерывной последовательности в миллион. Т.е. тут сложность O(log2(n) + log2(n)) но по сравнению с чистым двоичным поиском высока вероятность решить в один проход. Двоичным от миллиона поиск значения 1 потребует 20 проходов. Также получается универсально, т.к. тут нет ограничения сверху, т.е. без разницы сколько значений хоть миллион, хоть олимпиард :) а что мешает объединить два этих метода ? пусть будет бинарный поиск с нижним расширением :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 18:54 |
|
||
|
Выборка из миллиарда
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)а что мешает объединить два этих метода ? пусть будет бинарный поиск с нижним расширением :-) распиши подробнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 18:59 |
|
||
|
Выборка из миллиарда
|
|||
|---|---|---|---|
|
#18+
Dima T, ну в бинарном поиске ты всё равно весь файл читаешь что мешает вести L,R бинарного поиска и попутно считать число значений меньше L+степени двойки чтение из файла ведь всё равно затратнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 19:03 |
|
||
|
Выборка из миллиарда
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)Dima T, ну в бинарном поиске ты всё равно весь файл читаешь что мешает вести L,R бинарного поиска и попутно считать число значений меньше L+степени двойки чтение из файла ведь всё равно затратнее можно параллельно считать обоими способами, потом переходить к двоичному поиску, только польза будет при большой искомой непрерывной последовательности 1...N, а вероятность изначальной генерации такой последовательности 1 из 10^(N*3), т.е. практически невозможно, поэтому можно не усложнять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 19:38 |
|
||
|
Выборка из миллиарда
|
|||
|---|---|---|---|
|
#18+
Dima T, задача олимпиадная, проверяют такие вещи самыми неудобными наборами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 21:21 |
|
||
|
Выборка из миллиарда
|
|||
|---|---|---|---|
|
#18+
Задумался как сделать Shuffle последовательности без временных массивов. По сути речь идёт об ограниченном ГПСЧ "без повторений" только для решения данной задачи. Для последовательности кратной 2^N вроде-бы всё просто. А вот для произвольного size = 1 000 000 000 пока не знаю как такой Shuffle сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2014, 15:03 |
|
||
|
Выборка из миллиарда
|
|||
|---|---|---|---|
|
#18+
maytonДля последовательности кратной 2^N вроде-бы всё просто. А вот для произвольного size = 1 000 000 000 тогда делаешь последовательность 2^30 и все что больше 1 000 000 000 пропускаешь Для 2^N ты как хотел сделать просто? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2014, 15:36 |
|
||
|
Выборка из миллиарда
|
|||
|---|---|---|---|
|
#18+
Dima T, перестановкой битов в целом числе. Я до этого так делал псевдо-ГПСЧ с уникальностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2014, 15:54 |
|
||
|
Выборка из миллиарда
|
|||
|---|---|---|---|
|
#18+
Для миллиарда думаю можно взять 30 битиков и использовать тот-же самый алгоритм но проверять что результат попадает в диапазаон [0..999 999 999] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2014, 15:57 |
|
||
|
Выборка из миллиарда
|
|||
|---|---|---|---|
|
#18+
Не получился у меня ГПСЧ. Вобщем сходу энтропия плохая. Глазом видно что все чётные - меньше. А ну его в болото. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Вобщем лучшее решение у kealon(Ruslan). Фух ... надоёло всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2014, 21:59 |
|
||
|
Выборка из миллиарда
|
|||
|---|---|---|---|
|
#18+
maytonНе получился у меня ГПСЧ. Ну и отлично, а то я весь мозг сломал как можно последовательность из неповторяющихся чисел сгенерить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2014, 06:25 |
|
||
|
Выборка из миллиарда
|
|||
|---|---|---|---|
|
#18+
Можно легко. Только я себе ограничение поставил. Не использовать массивы и сортировки. Надо-б еще сдвиговый регистр с хорём попробовать но уже лень и у него тоже энтропия плохая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2014, 11:23 |
|
||
|
Выборка из миллиарда
|
|||
|---|---|---|---|
|
#18+
maytonМожно легко. Только я себе ограничение поставил. Не использовать массивы и сортировки. Надо-б еще сдвиговый регистр с хорём попробовать но уже лень и у него тоже энтропия плохая. А мне кажется, как не крути, псевдослучайная генерация без повторов уже не является ни случайной, ни даже псевдослучайной. Всё очень просто.... в таком алгоритме появляется чёткая закономерность. И скажем например, сгенерировав 999'999 значений, я точно буду знать следующее генерируемое значение (хотя конечно всего одно значение можно и не брать в счёт). При этом мы не можем взять какой либо генератор энтропии с хорошими параметрами, так как тогда мы автоматически исключаем пункт "без повторений" пока просто не начнём явно определять (с помощью массива), что это значение уже показывали и надо выбрать случайное среди оставшихся. Потому без массивов, думаю, задача не решаема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2014, 13:27 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38643650&tid=1341363]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 362ms |

| 0 / 0 |
