|
|
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
maytonZyK_BotaN, в отбрасывании 19990 есть какая-то хитрость? Вообще весь код работает быстрее с отбрасыванием или нет?нет. не быстрее. меня просто интересуют последние числа. первая половина - все равно не интересна. там числитель 1, а знаменатель уменьшается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 00:57 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
maytonZyK_BotaNмогу сделать такое же решение, только на си или джаве. Нет. Не надо.а я уже было начал. ну ладно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 00:58 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNmaytonпропущено... Нет. Не надо.а я уже было начал. ну ладно но не забываем про экономию памяти. при отбрасывании, нам нужно не 20000 единиц под результат, а только 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 01:00 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNтех в таком стиле был написан кнутомИ пряником? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 03:55 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
Это называется рядами... эээ... имени Склероза. Не помню, в общем, кого. И строить можно примерно так: начинаем с . Потом промеж любой пары, у которой сумма знаменателей не больше нашего максимума, вставляем дробь сумма числителей/сумма знаменателей: . При этом не надо проверять на несократимость. Может получиться быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 04:09 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
Смоляное ЧучелкоЭто называется рядами... эээ... имени Склероза. http://ru.wikipedia.org/wiki/Ряд_Фарея ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 07:37 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
tanglir, Спасибо большое. Постараюсь запомнить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 09:22 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNпервая половина - все равно не интересна. там числитель 1, а знаменатель уменьшается Положим, всё это симметрично относительно 1/2, так что если первые 1/n, то и хвост будет состоять из ровно стольки ж (n-1)/n. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 09:36 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
Смоляное ЧучелкоZyK_BotaNпервая половина - все равно не интересна. там числитель 1, а знаменатель уменьшается Положим, всё это симметрично относительно 1/2, так что если первые 1/n, то и хвост будет состоять из ровно стольки ж (n-1)/n. я не правильно сказал. не половина дробей, а первые к чисел, где к - половина от н. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 11:23 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNСмоляное ЧучелкоZyK_BotaNпервая половина - все равно не интересна. там числитель 1, а знаменатель уменьшается Положим, всё это симметрично относительно 1/2, так что если первые 1/n, то и хвост будет состоять из ровно стольки ж (n-1)/n. я не правильно сказал. не половина дробей, а первые к чисел, где к - половина от н. и заметь, для примера н = 5. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. первые элементы действительно имеют числитель 1. а вот последние два - уже разнятся знаменателями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 11:26 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
Смоляное ЧучелкоЭто называется рядами... эээ... имени Склероза. Не помню, в общем, кого. И строить можно примерно так: начинаем с . Потом промеж любой пары, у которой сумма знаменателей не больше нашего максимума, вставляем дробь сумма числителей/сумма знаменателей: . При этом не надо проверять на несократимость. Может получиться быстрее. классный метод. вроде рулит не хило. считает элементы для н = 2024 - мгновенно. вот код: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. правда сам вывод занимает время, поэтому для бенчмарка, первую строку можно поменять на: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 11:53 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
а вот мне интересно, как в ghc реализована операция конкатенации(есть ли какие-то оптимизации в зависимости от контекста вычислений). если она реализована в лоб, то решение с мутабельными списками должно обгонять данное. ведь нам по сути нужна вставка элемента в список, а вместо этого, мне приходится их канкатенировать, так как списки иммутабельны. вернее я могу одну канкатенацию выкинуть, но она и не является накладной, так как там список состоит из одного элемента, но все же: Код: sql 1. а вот что делать с первой канкатенацией - не знаю. но есть не нулевая вероятность, что оптимизатор компилятора ghc понимает что от него хотят, и делает список мутабельным, так как тот виден только локально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 12:06 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
Если не лень, попробуй такой ещё вариант: Код: sql 1. 2. 3. 4. 5. Интересно, сильно ли повлияет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 13:08 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNа вот мне интересно, как в ghc реализована операция конкатенации(есть ли какие-то оптимизации в зависимости от контекста вычислений). вот что встретил на рсдн по данному вопросу: автор Ладно, тогда разберемся "аналитически". Ну, короче, как в принципе устроен ++? Ну, например, так. Я на Эрланге напишу, мне так проще, и в принципе один хрен. %% Вот это - достаточно понятно. concat( [], X ) -> X; %% Как, собственно, и вот это concat( [ H | T ], X ) -> [ H | concat( T, X ) ]. Как у нас будет выполняться concat( A, B) в ленивом языке? Для простоты, пусть у нас ленивые только конструкторы списка, остальное неважно. C = concat( A, B ) имеет сложность O(1) Пробежка по результату приведет к дополнительному ленивому вызову concat, который будет возвращать копию элемента списка H для каждого элемента А, и будет стоить столько же для элементов B. То есть, пробежка по С будет чуть дороже, чем пробежка по А или Б. Однако, налицо неплохой потенциал для оптимизации в ghc — компилятор может избежать задействования хипа, если выведет last use для элементов C. Это уже кое-что, не так ли? D = concat( concat( A, B ), B1 ) — само по себе тоже O(1), разумеется, это не интересно. А пробежка по D... Два накладных вызова на len( A ), один — на len( A + B ) — len( A ), и ноль на len( B1 ). Та же картина по last use для ghc. Итак, при наращивании глубины конкатенации по данной цепочке, имеем очень легкую, почти незаметную в сравнении со строгим случаем квадратичность (за счет отсутствия переливаний из памяти в память), которая будет почти незаметна на фоне обработки. Смотрим второй вариант: D = concat( B1, concat( A, B ) ) Имеем один накладной вызов при любой вложенности подобных операций конкатенации. То есть, квадратичности нет. Прикольно, не так ли? Будем проверять теорию экспериментом? взято отсюда. там на тему конкатенации идет дискусс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 13:20 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
Смоляное ЧучелкоЕсли не лень, попробуй такой ещё вариант: Код: plaintext 1. 2. 3. 4. 5. Интересно, сильно ли повлияет. вечером погоняю с профайлером для разных случаев. например сколько потребляется памяти, если нужно найти последних 10 из 20000. а сколько для всех 20000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 13:50 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
Общий порядок - неубывающая последовательность. Есть ли второй порядок сортировки? (судя по примеру, возрастающий числитель, если он не противоречит основному порядку) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 14:11 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNвзято отсюда. там на тему конкатенации идет дискусс сказать то сказал, а ссылку дать забыл: http://www.rsdn.ru/forum/decl/3389338.flat.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 14:11 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
maytonДано N (натуральное). Вывести список рациональных дробей в неубывающем порядке где числитель и знаменатель - целые от 1 до N. И числитель не больше знаменателя (т.е. результат дроби меньше 1.0) Вход: 5 Выход: 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 Меня волнует вопрос неубывающего порядка и тот факт, что все решили, будто 1/2 выводим, а 2/4 не выводим. Если порядок НЕубывающий -это равно сильно тому, что он может как расти, так идти "ровно" ;) Ошибаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 14:15 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
Озверин, Меня волнует вопрос неубывающего порядка и тот факт, что все решили, будто 1/2 выводим, а 2/4 не выводим. Третье и четвёртое сообщения темы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 14:29 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
AbstractionОзверин, Меня волнует вопрос неубывающего порядка и тот факт, что все решили, будто 1/2 выводим, а 2/4 не выводим. Третье и четвёртое сообщения темы. Я их прочел, но суть слова "Неубывающая последовательность" для меня осталась загадкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 14:32 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
Озверин, Неубывающая последовательность, все члены которой различны - в чём проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 14:48 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
ОзверинМеня волнует вопрос неубывающего порядка и тот факт, что все решили, будто 1/2 выводим, а 2/4 не выводим. Если порядок НЕубывающий -это равно сильно тому, что он может как расти, так идти "ровно" ;) Ошибаюсь? Это задача из книги Федор Меньшиков - Олимпиадные задачи по программированию. Но я с тобой согласен что такая постановка где надо сокращать дроби и убирать дубли - чем-то ограничнивает скорость генерации. Давай, сделай так как будто-бы сокращение не обязательно. Поскольку я - топик стартер - то имею право взять и поменять постановку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 14:55 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
Честно сказать, давно не решал олимпиданых..и совершенно забыл всю математику, но расскажу ход своих мыслей и то, к чему я пришел: 1) Максимальное значение для множества рациональных дробей , где N-числитель, M<N - знаментель = n-1/n 2) Минимальное значение для этого же множества: 1/n Дальше, я решил построить дерево, с убывающими вершнами и убывающими ветвями: где вершины: n-1/n -> n-2/n-1 -> n-3/n-2 ->...-> 1/2 и само собой листики веток: где вершина n-1/n : n-2/n > n-3/n > ... > 1/n Посмотрел на дерево, вершины всегда убывают, листики в отдельно взятой ветви всегда убывают. Как обойти дерево, чтобы выбрать с наименьшего (1/n) до наибольшего n-1/n? В итоге(для 5, допустим) Код: plaintext 1. 2. 3. 4. Движемся со двигом: 1/n -> 1/n-1 -> 1/n-? до значения ветви с числителем вершины целое от деления (n/2) и(соответственно) знаменателем = (целое отделения(n/2)) +1 Следующий этап 1/n -> 1+1/n такое же движение Я видимо повторил чей нибудь велосипед или просто попал в логическую ловушку, но эмпирически вывел следующее правило обхода: Код: java 1. 2. 3. 4. 5. Все...ничего не сохраняю, вроде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 16:05 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
Озверин, покажи вывод скажем для N=16 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 16:19 |
|
||
|
Задачка с дробями.
|
|||
|---|---|---|---|
|
#18+
mayton, 1/16 1/15 1/14 1/13 1/12 1/11 1/10 1/9 2/16 2/15 2/14 2/13 2/12 2/11 2/10 2/9 3/16 3/15 3/14 3/13 3/12 3/11 3/10 3/9 4/16 4/15 4/14 4/13 4/12 4/11 4/10 4/9 5/16 5/15 5/14 5/13 5/12 5/11 5/10 5/9 6/16 6/15 6/14 6/13 6/12 6/11 6/10 6/9 7/16 7/15 7/14 7/13 7/12 7/11 7/10 7/9 8/16 8/15 8/14 8/13 8/12 8/11 8/10 8/9 9/16 9/15 9/14 9/13 9/12 9/11 9/10 10/16 10/15 10/14 10/13 10/12 10/11 11/16 11/15 11/14 11/13 11/12 12/16 12/15 12/14 12/13 13/16 13/15 13/14 14/16 14/15 15/16 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 16:24 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38133808&tid=1341932]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
160ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 511ms |

| 0 / 0 |
