2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Количество отрезков в квадратной решетке
Сообщение26.05.2013, 10:34 
Заслуженный участник


02/08/10
629
malphunction в сообщении #728475 писал(а):
MrDindows в сообщении #728244 писал(а):
Можно источник задачи?
Я знаю решение за $O(n\ln{n})$ и вроде как за $O(n)$


Это задача 415 из Project Euler. А что у Вас за решение?

Ключевая идея - считать от обратного, то-есть от общего числа отрезков в квадрате отнять количество тех, которые содержат в себе ровно 2 целочисленные точки. Я, кстати, очень удивился, что никто её не предложил, а полезли все в страшные дебри=)

И так, с общим числом отрезков понятно: $\frac{(n+1)^2((n+1)^2-1)}{2}$ .
Нужно найти количество отрезков с двумя точками.
Заметим, что каждый такой отрезок задаётся вектором $(p;q)$, где $p$ и $q$ - взаимно простые числа, одно из них, например, $q$ может быть отрицательным. Также, очевидно, что для каждого такого вектора существует
$(n+1-p)(n+1-q)$ отрезков в квадрате, содержащих ровно 2 точки.
И вот мы уже получили решение за $О(n^2\cdot\ln(n))$ или за $О(n^2)$ - перебрать все пары взаимно простых, ну и посчитать искомое количество.
Теперь нужно ускорить этот подсчёт, чтоб не перебирать все пары.
Возьмём число $p$, по известному свойству, количество чисел, взаимно простых с $p$ и меньших его равно $\varphi(p)$. А их сумма равна: $\frac{p\cdot\varphi(p)}{2}$. Таким образом, нам осталось просуммировать
$\sum\left(\left(n+1-p\right)\cdot\left(\varphi(p)\cdot(n+1)-\frac{p\cdot\varphi(p)}{2}\right)\right)$. (и не забыть учесть единичные отрезки, и пары с отрицательны $q$).
А это можно сделать за $O(n\sqrt{n})$, если перебирать $p$ и считать $\varphi(p)$ в лоб, либо если запустить рекурсию, и получать все натуральные числа из простых, что тем самым даст возможность поддерживать значение $\varphi$ и изменять на каждом шаге за $O(1)$. Итого $O(n)$. Но, увы, тут возникает сложность для $n>10^9$, ибо мы не сможем получить достаточно большие простые числа.
Конечно, алгоритм ещё можно попробовать улучшить, или даже свернуть формулу.
п.с.
Вот, как пример, $O(n\sqrt{n})$: http://ideone.com/OzPUrR
п.с2
Прочитал я ту задачу, как-то там ещё сложнее, чем то, что вы написали=)

 Профиль  
                  
 
 Re: Количество отрезков в квадратной решетке
Сообщение26.05.2013, 10:46 
Заслуженный участник
Аватара пользователя


06/04/10
3152
MrDindows в сообщении #728487 писал(а):
ибо мы не сможем получить достаточно большие простые числа

О взаимной простоте я говорил.
Можно обдумать вариант алгоритма, оперирующего с цепными дробями - там она получается автоматом.
Да, самая "длинная" дробь - у последовательности Фибоначчи.

Задача тяготеет к описанию множества правильных дробей при ограничении на знаменатель.

 Профиль  
                  
 
 Re: Количество отрезков в квадратной решетке
Сообщение26.05.2013, 14:39 


16/03/11
31
MrDindows в сообщении #728487 писал(а):
Ключевая идея - считать от обратного, то-есть от общего числа отрезков в квадрате отнять количество тех, которые содержат в себе ровно 2 целочисленные точки.

Блиииин, точно!!!!! Вы гений :)

Сейчас попробую всю задачу решить, потом расскажу, как 415-ая сводится к этой.

 Профиль  
                  
 
 Re: Количество отрезков в квадратной решетке
Сообщение26.05.2013, 16:13 


16/03/11
31
MrDindows в сообщении #728487 писал(а):
И так, с общим числом отрезков понятно: $\frac{(n+1)^2((n+1)^2-1)}{2}$ .


Не, не сходится. У меня-то между двумя точками может быть несколько отрезков, а по этой формуле подразумеватеся один.
Пример: отрезок $(1,1) - (4,4)$, тремя точками он может быть представлен двумя способами: $(1,1) - (2,2) - (4,4)$, $(1,1) - (3,3) - (4,4)$

Так что формула вычисления общего количества многозвенных отрезков другая.

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

-- Вс май 26, 2013 23:15:36 --

nikvic в сообщении #728490 писал(а):
MrDindows в сообщении #728487 писал(а):
ибо мы не сможем получить достаточно большие простые числа

О взаимной простоте я говорил.
Можно обдумать вариант алгоритма, оперирующего с цепными дробями - там она получается автоматом.
Да, самая "длинная" дробь - у последовательности Фибоначчи.

Задача тяготеет к описанию множества правильных дробей при ограничении на знаменатель.


Пожалуйста, расскажите яснее, что-то не улавливаю суть Вашего предложения.

 Профиль  
                  
 
 Re: Количество отрезков в квадратной решетке
Сообщение26.05.2013, 17:44 
Заслуженный участник
Аватара пользователя


06/04/10
3152
malphunction в сообщении #728587 писал(а):
nikvic в сообщении #728490 писал(а):
MrDindows в сообщении #728487 писал(а):
ибо мы не сможем получить достаточно большие простые числа

О взаимной простоте я говорил.
Можно обдумать вариант алгоритма, оперирующего с цепными дробями - там она получается автоматом.
Да, самая "длинная" дробь - у последовательности Фибоначчи.

Задача тяготеет к описанию множества правильных дробей при ограничении на знаменатель.


Пожалуйста, расскажите яснее, что-то не улавливаю суть Вашего предложения.

Пока - мысли вслух. Оттрезки лежат на прямых, наклон которых выражается "короткими" несократимыми дробями. Несократимые дроби генерируются как цепные.

 Профиль  
                  
 
 Re: Количество отрезков в квадратной решетке
Сообщение26.05.2013, 19:38 
Заслуженный участник


02/08/10
629
malphunction в сообщении #728587 писал(а):
Не, не сходится. У меня-то между двумя точками может быть несколько отрезков, а по этой формуле подразумеватеся один.
Пример: отрезок $(1,1) - (4,4)$, тремя точками он может быть представлен двумя способами: $(1,1) - (2,2) - (4,4)$, $(1,1) - (3,3) - (4,4)$

Тю блин=)
Тогда формулировать надо было как-то иначе : множество точек, лежащих на одной прямой. А то - отрезок-отрезок... Он в геометрии такой один=)

 Профиль  
                  
 
 Re: Количество отрезков в квадратной решетке
Сообщение27.05.2013, 01:46 


16/03/11
31
MrDindows в сообщении #728687 писал(а):
malphunction в сообщении #728587 писал(а):
Не, не сходится. У меня-то между двумя точками может быть несколько отрезков, а по этой формуле подразумеватеся один.
Пример: отрезок $(1,1) - (4,4)$, тремя точками он может быть представлен двумя способами: $(1,1) - (2,2) - (4,4)$, $(1,1) - (3,3) - (4,4)$

Тю блин=)
Тогда формулировать надо было как-то иначе : множество точек, лежащих на одной прямой. А то - отрезок-отрезок... Он в геометрии такой один=)


Так и сформулировано было, отрезок, состоящий хотя бы из трёх точек.
Надо было мне точнее сформулировать: отрезок с концами на точках решетки, содержащий внутри себя хотя бы ещё одну точку решетки. Но, вообще-то, в дальнейшем обсуждении я, в ответе Sonic86, объяснял, какие отрезки мне нужные и приводил примеры.

 Профиль  
                  
 
 Re: Количество отрезков в квадратной решетке
Сообщение30.05.2013, 10:02 


11/04/13
36
По-моему, проще посчитать количество прямых, проходящих ровно через две точки решётки.
Должно получится двойное суммирование и, скорее всего, это выражение можно будет упростить, выразив через функцию Мёбиуса.

Как-то так:
$T_2(n) = \sum_{\frac{n}{2} < x \leqslant n} \sum_{1 \leqslant y < x}4 (n+1-x)(n+1-y) \cdot \theta(x,y) \ $,
где
$\theta(x,y) = \left\{\begin{matrix}
1, (x, y) = 1\\ 
0, (x, y) \ne 1
\end{matrix}\right.$

$\theta(x,y) = \sum_{d|(x,y)}\mu(d)$

теперь сюда нужно подставить $x = i \cdot d$ и $y = j \cdot d$ и поменять порядок суммирования

(Оффтоп)

Почему у меня пределы суммирования не под значком суммы, а сбоку?

 Профиль  
                  
 
 Re: Количество отрезков в квадратной решетке
Сообщение30.05.2013, 11:07 


11/04/13
36
$T_2(n) = \sum_{\frac{n}{2} < x \leqslant n} \sum_{1 \leqslant y < x}\sum_{d|(x,y)} 4 (n+1-x)(n+1-y)\mu(d)$
теперь сюда нужно подставить $x = i \cdot d$ и $y = j \cdot d$ и поменять порядок суммирования

-- 30.05.2013, 12:40 --

Упс!
Не заметил, что есть вторая страница, и что считать через "ровно 2" уже предложили :).

 Профиль  
                  
 
 Re: Количество отрезков в квадратной решетке
Сообщение30.05.2013, 13:19 


11/04/13
36
$$ T_2(n) = 4 \sum_{1 < d \leqslant \frac{n}{2}} \mu(d) \sum_{\frac{n}{2d} < i \leqslant \frac{n}{d}} (n+1-id) \sum_{ 1  \leqslant j < i} (n+1-jd) $$
$$ T_2(n) = 2 \sum_{1 < d \leqslant \frac{n}{2}} \mu(d) \sum_{\frac{n}{2d} < i \leqslant \frac{n}{d}} (n+1-di) (2(n+1) - di) (i-1)  $$
$$ T_2(n) = n \sum_{1 < d \leqslant \frac{n}{2}} \mu(d) \frac{2d^2-9d(n+2)+4n^2+21n+24}{12d} $$

Наверняка, я где-нибудь ошибся в преобразованиях - уж слишком они громоздкие :)

 Профиль  
                  
 
 Re: Количество отрезков в квадратной решетке
Сообщение30.05.2013, 13:20 
Заслуженный участник


16/02/13
4214
Владивосток

(Оффтоп)

Corwin в сообщении #730277 писал(а):
Почему у меня пределы суммирования не под значком суммы, а сбоку?
Потому что формула не выделенная, а в строку. Либо вдвое больше баксов (окаймлять двойными), либо вот так вот:
$T_2(n) = \sum\limits_{\frac{n}{2} < x \leqslant n} \sum\limits_{1 \leqslant y < x}4 (n+1-x)(n+1-y) \cdot \theta(x,y)$

 Профиль  
                  
 
 Re: Количество отрезков в квадратной решетке
Сообщение09.06.2013, 08:38 


16/03/11
31
Corwin писал(а):
Наверняка, я где-нибудь ошибся в преобразованиях - уж слишком они громоздкие :)


Я пока не вник в Ваши формулы, потому что сходу вопрос: как от прямых перейти к отрезкам? Мне нужно не количество прямых считать, а количество отрезков. Это в формуле учитывается?

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

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



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

Сейчас этот форум просматривают: Gagarin1968


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

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