Re[2]: Кол-ва различных элементов в очень большом массиве
От: ch00k  
Дата: 05.01.07 21:49
Оценка:
Здравствуйте, DronG, Вы писали:

DG>Можно попробывать следующее (точной оценки временной сложности и расхода памяти не делал):

DG>Нужна длинная арифметика то есть работа с большими числами. Каждое новое число последовательности являеться порядковым номером простого числа, то есть мы производим преобразование числа из последовательности в простое число. Далее в нужно производить умножение каждого последующего простого числа на то произведение всех предыдущих, предварительно проверив не встретилось ли такое число на уже раньше. Проверка осуществляеться делением — если на цело то это число у нас уже есть и его добавлять, то есть умножать на уже накопленное произведение не будем. Не трудно организовать счетчик различных чисел так как есть процедура проверки. Загвоздка может быть в формировании простых чисел, хранении конечного произведения (так как чисел всего 2^32 может и хватить — все ж таки не 2^64 как в случае с другой структоруой данных)

DG>Вобщем можно попробывать, рекомендую просмотреть теорию чисел, арифметку по модулю (может удасться теряя точность повысить плотность хранения) и другие похожие темы.


Насчет ограничений по памяти — это будет произведение из 4 миллиардов простых чисел (в худшем случае). Занимать оно будет по самой грубой оценке (log P) * (4 миллиарда), бит где P — максимальное число. Памяти явно не хватит. Но идея интересная, попробую посмотреть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.