Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, И эти люди не советуют рекурсию ))))) Я даже не поверил сначала, что это работает. Работает. Но эффективность неочь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:04 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
maytonAnatoly Moskovsky, давай тыщу шариков. Посмотрим как летает твой "Запорожец". Разрешаю )) Сложность - O(n) в 0.2 сек уложится, не бойтесь )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:05 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
SiemarglAnatoly Moskovsky, И эти люди не советуют рекурсию ))))) Я даже не поверил сначала, что это работает. Работает. Но эффективность неочь Во-первых, это алгоритм, а не оптимизированная программа. Цель была показать что там происходит. Во-вторых, не верю что неочь, давайте пруфы в сравнении с другими реализациями ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:10 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Нормально все, где вы тормоза увидели? Разве что state.push_back(v), несколько раз перевыделение памяти сделает, но это не большой тормоз на 500 элементах, и можно полечить выделив место заранее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:11 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Коллеги а вы тестили вариант с двумя локальными минимумами? (У меня к сож нет компиллятора под рукой щас) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:16 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Dima T, Сложность O(n), но на каждый элемент 2 вызова функции. И отдельно возня с динамическим массивом (хотя его тут можно заменить обычным фиксированным стеком). Для сравнения в рекурсии - один вызов функции. Причем хотя я написал для каждого элемента - можно вызывать ее только один раз для пары если два соседних шарика отличаются. Т.е работы примерно вчетверо меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:19 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
maytonКоллеги а вы тестили вариант с двумя локальными минимумами? (У меня к сож нет компиллятора под рукой щас) По идее для кода выше без разницы сколько минимумов. Может чуть допилить надо (сходу не могу сказать), а сложность так и останется: два прохода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:21 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
У меня по перформансу нет вопросов. Просто я (теоретически) там ожидал увидеть рекурсию но не увидел. И один проход.... Вобщем возникло подорзрение что какой-то кейс недотестирован. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:22 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Siemargl, Ну вот пусть ТС и оптимизирует, там есть куда и все прямо в глаза бросается. Я еле удержался когда писал )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:24 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
maytonУ меня по перформансу нет вопросов. Просто я (теоретически) там ожидал увидеть рекурсию но не увидел. И один проход.... Вобщем возникло подорзрение что какой-то кейс недотестирован. Тут неявная рекурсия. state - это стек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:24 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyТут неявная рекурсия Но при этом это один из тех немногих случаев, когда алгоритм проще реализовать именно с неявной рекурсией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:26 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskymaytonУ меня по перформансу нет вопросов. Просто я (теоретически) там ожидал увидеть рекурсию но не увидел. И один проход.... Вобщем возникло подорзрение что какой-то кейс недотестирован. Тут неявная рекурсия. state - это стек Я понял. А если использовать std::stack ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:27 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
maytonЯ понял. А если использовать std::stack ? А оно внутри все равно так же устроено )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:29 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
А ну ОК. Остался пустяк. Растолковать автору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:31 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
SiemarglТ.е работы примерно вчетверо меньше. Не согласен. Рекурсия - однозначно вызов функции (что не быстро), а тут все функции оптимизатор заинлайнит. vector это по сути обычный массив, который довыделяет память при необходимости, причем не по одному элементу, а сразу кратно текущему размеру (в 1,5 раза где-то читал). В принципе тут это решаемо на берегу: Код: plaintext 1. 2. и перевыделения памяти вообще не будет во время работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:31 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Почему "вызов функции" == "не быстро" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:43 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevПочему "вызов функции" == "не быстро" ? Все регистры в стэк, код функции, восстановление обратно. Или современные компиляторы как-то по другому вызов делают? Под "не быстро" имел ввиду по сравнению с инлайном, где не надо регистры сохранять/восстанавливать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 17:50 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Dima TВсе регистры в стэк... Нет такого AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 18:04 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Dima T, есть такой трюк. Называется хвостовая рекурсия. Механию ее работы я до конца не понимаю. Но гуры от Функциональщины говорят-де она с помощью этого "хвоста" способна сворачивать рекурсии в обычные циклы. Haskell, Scala теоретически ее поддерживают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 18:13 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
maytonНазывается хвостовая рекурсия. Механию ее работы я до конца не понимаю. Думаю к этой теме это не имеет отношения. А механика проста. При хвостовой рекурсии, после рекурсивного вызова локальные переменные вызывающей функции уже не используются, поэтому сам вызов можно не проводить, а сымитировать прямо в текущем фрейме, путем установки новых значений аргументов и перехода в начало функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 18:22 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevDima TВсе регистры в стэк... Нет такого AFAIK Не силен в асме, кодом доказывать не буду. Пример рефакторинга собственного кода. Схематично. Было Код: plaintext 1. 2. 3. 4. 5. 6. 7. переписал в класс Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Именно так, без каких-либо доп оптимизаций. Просто скопипастил куски кода. Ну и в клиентском коде создание объекта добавил. Стало работать на 15-20% быстрее, т.к. компилятор смог инлайнить f() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 18:27 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
поторопился, такой класс Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 18:29 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Опять поторопился :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Вобщем не знаю точно за счет чего, но как написал стало работать быстрее на 15-20%. Я считаю из-за инлайна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 18:39 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
Вообще-то в данном случае под виндовсом главный тормоз будет в Код: plaintext 1. Недавно тестили. 18908145 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 18:50 |
|
||
|
Шарики(задача по программированию)
|
|||
|---|---|---|---|
|
#18+
SiemarglDima T, Сложность O(n), но на каждый элемент 2 вызова функции. И отдельно возня с динамическим массивом (хотя его тут можно заменить обычным фиксированным стеком). Для сравнения в рекурсии - один вызов функции. Причем хотя я написал для каждого элемента - можно вызывать ее только один раз для пары если два соседних шарика отличаются. Т.е работы примерно вчетверо меньше. Приврал. Проверил. Вдвое. На данных 10 3 3 2 2 1 1 1 2 2 3 3 у АМ 13 вызовов функций (не включая работу с вектором) у меня - 6 Чуть позже выложу ассемблер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 19:28 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39195625&tid=2018575]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 275ms |
| total: | 446ms |

| 0 / 0 |
