|
быстрая генерация простых чисел | ☑ | ||
---|---|---|---|---|
0
viktorovichvadim
30.01.14
✎
23:29
|
Коллеги, привет. Может кто разрабатывал генераторы простых чисел? Какие есть быстрые алгоритмы, сопоставимые/более быстрые чем решето Аткина?
Несколько дней назад разработал новый алгоритм генерации простых чисел, достаточно элементарный, и пока только на 1С. Но работает в 4.5 раза быстрее чем решето Аткина в реализации IamAlexy (http://infostart.ru/projects/5955/) Генерирует до 15 млн. простые за 40 сек, в то время как решето Аткина в реализации IamAlexy - за 187 секунд. Мой алгорим -тоже решето, но имеет мало общего с Эратосфена, Аткина и пр. В сети описание чего-то похожего пока не обнаружил. Хочу перекодить на Java, посмотреть на больших числах, т.к. в 1С дальше 15 млн. уже нехватка памяти. |
|||
1
IamAlexy
30.01.14
✎
23:31
|
(0) :)
ты с 2009 г. не спал и не ел, все работал чтобы победить мою обработку? похвально похвально.. надеюсь ты ее скачал и запустил на своем компе а не смотрел на циферки со скриншотов? |
|||
2
viktorovichvadim
30.01.14
✎
23:39
|
(1) спал и ел, работал. задачка интересная, вот и вспомнил. обработку запускал на своем компе и твою и свою. понятно, что твой код взят с википедии, он упрощен для демонстрации идеи решета Аткина. надо брать реальную реализацию и сравнивать с ней.
|
|||
3
NS
30.01.14
✎
23:47
|
Вроде нет быстрее решета Аткина.
|
|||
4
viktorovichvadim
30.01.14
✎
23:59
|
"It generates the 50847534 primes up to 1000000000 in just 8 seconds on a Pentium II-350". (Это про решето Аткина)
Вот похоже, какой-то ориентир в первом приближении. Если дойду до миллиарда за сопоставимое время, можно будет прорабатывать тему более конкретно. |
|||
5
Злопчинский
31.01.14
✎
00:06
|
ну-ну...
|
|||
6
Злопчинский
31.01.14
✎
00:07
|
если простые числа расположить в полярной ситеме координат - почему то прослеживается группирование.. ане равномерная размазня.. - так пишут британские учоные
|
|||
7
sda553
31.01.14
✎
00:34
|
Ты просто скажи какая сложность алгоритма. У Аткина N/loglogN
А то может у тебя линейная, просто на первых миллионах дает хороший результат, а асимптотически фигня будет |
|||
8
NS
31.01.14
✎
00:42
|
и желательно сколько памяти тратит.
|
|||
9
Asmody
31.01.14
✎
01:24
|
(0) [разработал новый алгоритм генерации простых чисел] - ООО! Патентуй скорей! Это как минимум Нобелевка! Жаль только, что Нобелевку по математике не дают
|
|||
10
NS
31.01.14
✎
10:26
|
Не нобелевка конечно, но если лучше чем (7), то в википедию впишут.
|
|||
11
NikVars
31.01.14
✎
10:50
|
Некогда не догадывался 1С использовать для такой ерунды.
Не глумитесь! 1С исключительно для зарабатывания денег! |
|||
12
Neg
31.01.14
✎
10:57
|
(0) а зачем тебе это нужно?
|
|||
13
sda553
31.01.14
✎
11:00
|
(12) Это все равно, что у Колумба, отплывающего спросить "Зачем тебе это нужно?"
Открыть новые алгоритмы. Назвать их своим именем. Прославиться. |
|||
14
Зойч
31.01.14
✎
11:02
|
(13) новый алгоритм генерации простых чисел????
Тут конуренция поболее будет, чем если индусов пустить 1сить |
|||
15
Neg
31.01.14
✎
11:02
|
(13) Ну если так, то тогда я очень рад, тому, что нахожусь на одном форуме с таким человеком, даже не общаясь с ним.
|
|||
16
Neg
31.01.14
✎
11:04
|
(14) Главное 3-й пункт, а как не самое главное. :)
|
|||
17
sda553
31.01.14
✎
11:04
|
(14) Наоборот, в генерации простых чисел, кажется, уже все возможные алгоритмы открыты и ничего нового не появляется.
(15) Он еще не доказал, что его алгоритм чем то новый и чем то производительный. |
|||
18
Ненавижу 1С
гуру
31.01.14
✎
11:06
|
мы даже не уверены, что его алгоритм правильный
|
|||
19
Зойч
31.01.14
✎
11:07
|
(17) ну это я и имел ввиду
|
|||
20
sda553
01.02.14
✎
11:33
|
Что то затих автор
|
|||
21
viktorovichvadim
01.02.14
✎
22:01
|
(20) времени не сильно много. переписал свой алгоритм на java, рядом для сравнения - упрощенную реализацию решета Аткина с Википедии (по сути кода-примерно то же, что и у IamAlexy на 1С: http://infostart.ru/projects/5955/). Все равно удалось сравнить на простых до 22 000 000. Дальше - ограничение по типу int. Алгоритм обращается на индексы массива, а значение индекса не может быть типом long (а только этот тип представляет достаточно большие числа). Надо модифицировать реализацию алгоритма.
Если говорить о результате сравнения для простых до 22 млн.: - решето Аткина 936 мск, мой алгоритм 728 мск. Выводы делать преждевременно на таких числах. Так что буду копать дальше. |
|||
22
NS
01.02.14
✎
23:50
|
(21) Ты странно пытаешься делать. Нужно не скорость измерять, а понять сложность алгоритма, и требуемую память.
|
|||
23
sda553
02.02.14
✎
00:18
|
(21) Ты не туда копаешь.
Сравнивать надо не конкретные времена на конкретных количествах простых, а сложность алгоритма. Если у тебя линейная сложность О(N), то Аткин может и будет вначале отставать, но через сколько то миллиардов, рано или поздно догонит и перегонит |
|||
24
viktorovichvadim
02.02.14
✎
00:21
|
(23) спасибо за совет. есть ли какая-то методика оценки сложности алгоритма?
|
|||
25
sda553
02.02.14
✎
00:22
|
(21) Если не можешь сам посчитать сложность, то просто хотя бы составь график времени по точкам от 1 до 22 млн. Что получается? Прямая линия, кривизна, выпукло, вогнуто. И то же самое составь такой же график для Аткина и посмотри, что приблизительно получается на бесконечности - если кривые продолжить
|
|||
26
sda553
02.02.14
✎
00:24
|
Если прямая линия, то считается сложность линейная O(N)
У Аткина сложность O(N)/loglog(N) т.е. если глянешь график, то, чем больше N тем Аткин эффективнее |
|||
27
viktorovichvadim
02.02.14
✎
00:25
|
(25) на отрезке, который я проверял, и аткин и мой показывают линейную зависимость.
|
|||
28
sda553
02.02.14
✎
00:34
|
(27) Упрощенный Аткин линейный. N/loglogN получается после усложнения, который скорее всего Asmody не делал.
Если у тебя алгоритм линейный, то это как бы не очень, достижение. Линейных алгоритмов поиска простых - куча. |
|||
29
NS
02.02.14
✎
00:36
|
N/loglogN алгоритмов куча. Аткин замечателен меньшими требованиями к памяти.
|
|||
30
viktorovichvadim
02.02.14
✎
00:40
|
так что, если один алгоритм работает в 10 раз быстрее другого при одинаковой сложности, то это и не считается достижением?
|
|||
31
sda553
02.02.14
✎
00:44
|
(30) Нет, т.к. их можно выровнять проведя хорошую оптимизацию кода или собрав специальную аппаратуру, которая может быстро проводить требуемое повторяющееся в цикле вычисление. А сложность алгоритма подобными мерами не изменишь.
Аткин не линейный. |
|||
32
NS
02.02.14
✎
00:46
|
(30) Если твой алгоритм линейный, то как бы ты его не ускорил - никакой практической ценности он не представляет.
|
|||
33
NS
02.02.14
✎
00:47
|
В редких случаях, когда константа намного лучше в алгоритме с худшей сложностью, он всё-таки применяется на практике. Но для этого константа должна быть реально лучше.
|
|||
34
viktorovichvadim
02.02.14
✎
00:51
|
(33) похоже, нужно применить какую-нибудь адекватную методику оценки сложности алгоритма, потом делать выводы. спасибо за внимание к вопросу.
|
|||
35
wertyu
02.02.14
✎
00:56
|
(33) для затравки
http://habrahabr.ru/post/104219/ |
|||
36
wertyu
02.02.14
✎
00:57
|
(35) к (34)
|
|||
37
NS
02.02.14
✎
01:11
|
Вообще вот так просто взять и оценить сложность хитрого алгоритма не выйдет. Этому учат. Долго и упорно.
Могу посоветовать книгу Кормена "Алгоритмы, построение и анализ" |
|||
38
wertyu
02.02.14
✎
01:14
|
(37) это бесспорно, потому и написал "для затравки"
|
|||
39
МишельЛагранж
02.02.14
✎
03:14
|
Ну вот, не произошло революции, снова и снова...
Только я не понял - на что рассчитывал ТС, обогнать алгоритм Аткина, не предложив никакой нелинейной альтернативы? |
|||
40
SUA
03.02.14
✎
11:43
|
тут кроме вброса ничего не произошло - даже код не выложен
|
|||
41
kiruha
03.02.14
✎
11:53
|
(30)
Ты должен победить O(N)/loglog(N) множители-константы не считаются Например добейся O(N)/log(N) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |