2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 поиск попарных НОДов
Сообщение23.10.2012, 19:50 


23/10/12
6
Подскажите пожалуйста, существует ли эффективный алгоритм для решения следующей задачи:
Имеется большое количество чисел. Необходимо вычислить все их попарные НОДы.
Можно ли это сделать не "в лоб", а с максимальной быстротой?

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение23.10.2012, 22:24 
Заслуженный участник


27/06/08
4062
Волгоград
sundayafternuun в сообщении #634924 писал(а):
Подскажите пожалуйста, существует ли эффективный алгоритм для решения следующей задачи:
Имеется большое количество чисел. Необходимо вычислить все их попарные НОДы.
Можно ли это сделать не "в лоб", а с максимальной быстротой?
Если чисел действительно много, а размеры относительно невелики, возможно эффективно будет искать НОДы через каноническое разложение.

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 07:21 


23/10/12
6
забыл сказать, что числа весьма большого размера

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 08:04 
Заслуженный участник


27/06/08
4062
Волгоград
sundayafternuun в сообщении #635106 писал(а):
забыл сказать, что числа весьма большого размера
А точнее?
Сколько чисел и какого порядка?

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 09:52 
Заслуженный участник


12/09/10
1547
Если у нас есть $N$ чисел, ограниченных величиной $S$, то примерные оценки таковы
Алгоритм Евклида: $C\log{S} \cdot N^2$
Разложение на простые множители: $C_1\log{\log{S}} \cdot N^2+C_2 N S^{\alpha}$, где $ \alpha \in [0.15, 0.5]$ зависит от алгоритма разложения на множители

-- Ср окт 24, 2012 11:03:55 --

(Оффтоп)

Удовлетворите, пожалуйста, любопытство. Для какой задачи понадобилось это?

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 11:40 


23/10/12
6
около 5 тысяч чисел. длина числа в среднем 150 десятичных знака.

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 12:20 
Заслуженный участник
Аватара пользователя


18/05/06
13438
с Территории
Ну, это разве много. "Сразу бы убил - сегодня бы уже вышел".

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 12:50 
Заслуженный участник


27/06/08
4062
Волгоград
sundayafternuun в сообщении #635138 писал(а):
около 5 тысяч чисел. длина числа в среднем 150 десятичных знака.
При такой длине искать канонические разложения невыгодно.
Но возможно подойдет комбинированный метод: найти канонические разложения для тех чисел, для которых это легко (ограничив поиск разложения по времени). А затем искать: алгоритмом Евклида для тех пар, где оба числа не удалось разложить; через канонические разложения в парах, где оно известно для обоих; испытывая, являются ли делители одного делителями другого, в смешанных парах.

А с другой стороны стоит ли заморачиваться? 12 миллионов раз найти НОД 150-значных чисел... Хороший мат.пакет за несколько минут должен управится.

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 12:53 
Заслуженный участник


12/09/10
1547
Делайте в лоб бинарным алгоритмом. За несколько часов прожует.

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 13:04 
Заслуженный участник


27/06/08
4062
Волгоград
Cash в сообщении #635149 писал(а):
Делайте в лоб бинарным алгоритмом. За несколько часов прожует.

Зачем несколько часов?
Сейчас сгенерировал 5000 чисел из указанного диапазона и нашел все попарные НОД. На все (вместе с генерированием) ушло 2 минуты 18 секунд.

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 13:11 
Заслуженный участник


20/12/10
9069
VAL в сообщении #635153 писал(а):
Сейчас сгенерировал 5000 чисел из указанного диапазона и нашел все попарные НОД. На все (вместе с генерированием) ушло 2 минуты 18 секунд.

Интересно, а сколько среди этих НОДов не единиц получилось?

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 13:17 
Заслуженный участник
Аватара пользователя


18/05/06
13438
с Территории
Наверное, что-то вроде $1-{6\over\pi^2}$ :wink:

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 13:27 
Заслуженный участник


20/12/10
9069
Вот и интересно проверить.

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 17:51 
Заслуженный участник


27/06/08
4062
Волгоград
nnosipov в сообщении #635156 писал(а):
VAL в сообщении #635153 писал(а):
Сейчас сгенерировал 5000 чисел из указанного диапазона и нашел все попарные НОД. На все (вместе с генерированием) ушло 2 минуты 18 секунд.

Интересно, а сколько среди этих НОДов не единиц получилось?
7390559 единиц из 12497500. Т.е. примерно 0.5913629926 от общего числа.
В то время как $\frac6{\pi^2}\approx0.6079271016$.

-- 24 окт 2012, 18:07 --

При повторном запуске получилось 0.6108954591. Так что, в среднем нормально получается. Но разброс большой.

 Профиль  
                  
 
 Re: поиск попарных НОДов
Сообщение24.10.2012, 18:12 
Заслуженный участник


09/02/06
4398
Москва
Для случайных или для случая когда все попарные mod ы малы, можно считать чуть эффективнее, разбивая множество в бинарное дерево и учитывая, что если найдены $(x_i,x_k),k\in S, (x_j,x_k),k\in S$, то в начале можно найти $a_i=\operatorname{lcm}(x_i,x_k),k\in S, a_j=\operatorname{lcm}(x_j,x_k),k\in S$ и $\gcd$ находится из $(x_i,x_j)=\gcd(a_i,a_j)(\frac{x_i}{a_i},\frac{x_j}{a_j})$. Это должно сокращать вычисления по сравнению с вычислением по алгоритму Евклида для каждой пары.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group