Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
Всем привет. Помогите с азимутом поиска задачю. Даже не знаю, как соотв-щая область математики зовётся. В общем есть временной интервал и для каждого момента времени - результат вычисления некоторой ф-ции: time07:0007:0507:1007:1507:2007:2507:3007:3507:4007:4507:5007:55func-1917123-812-11-21311-101 Требуется найти такую часть этого интервала, на котором сумма результатов ф-ции будет максимальной. Часть интервала может содержать от 1 до N элементов и может начинаться / заканчиваться на любом из них. Как такое решать ? Неужели только тупым перебором ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 00:24 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
Отбой, кажись. Нарыл, что это такое: https://en.wikipedia.org/wiki/Maximum_subarray_problem Буду теперь осиливать алгоритмы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 00:35 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
NightBomberНеужели только тупым перебором ?Даже не представляю, как по-другому можно получить суммы всех интервалов, чтобы сравнить их. В один проход делается ведь (в двух циклах). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 01:04 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
Наивный перебор - это O(n^3). А умные люди, оказывается, давно нашли алгоритмы со сложностью O(n). http://e-maxx.ru/algo/maximum_average_segment http://rosettacode.org/wiki/Greatest_subsequential_sum#Python ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 01:25 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
NightBomberВсем привет. Помогите с азимутом поиска задачю. Даже не знаю, как соотв-щая область математики зовётся. В общем есть временной интервал и для каждого момента времени - результат вычисления некоторой ф-ции: timet07:00t07:05t07:10t07:15t07:20t07:25t07:30t07:35t07:40t07:45t07:50t07:55funct-19t17t1t23t-8t12t-11t-2t13t11t-10t1 Требуется найти такую часть этого интервала, на котором сумма результатов ф-ции будет максимальной. Часть интервала может содержать от 1 до N элементов и может начинаться / заканчиваться на любом из них. Как такое решать ? Неужели только тупым перебором ?Двигаясь с левого края, суммируем. Если сумма стала отрицательной, обнуляем ее, и левый край интервала сдвигаем на следующий элемент. Запоминаем, на каком интервале сумма достигла максимума. Вроде в один проход получается. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Вот примерно так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 07:08 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
Сворачиваете массив данных, суммируя соседние данные одного знака. Исходный массив time7:007:057:107:157:207:257:307:357:407:457:50func-1917123-812-11-21311-10 преобразуется в time7:007:05-7:157:207:257:30-7:357:40-7:457:50func-1941-812-1324-10 Следующий этап свёртки такой: Если абс. значение отрицательного элемента меньше значения каждого из положительных соседей - эти три элемента сворачиваются в один (само собой, краевые отрицательные алгоритм игнорирует, у них нет одного из соседей). Массив преобразуется в time7:007:05-7:257:30-7:357:40-7:457:50func-194511-10-10 Этот этап повторяется до тех пор, пока не кончатся группы, пригодные к свёртке. Осталось выбрать максимальное положительное значение, в данном случае это интервал 7:05-7:25 и сумма 45. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 07:38 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
Пардон, ошибка от невнимательности. Вот правильный вариант: Сворачиваете массив данных, суммируя соседние данные одного знака. Исходный массив time7:007:057:107:157:207:257:307:357:407:457:50func-19 17 1 23 -812-11-2 13 11 -10 преобразуется в time7:007:05-7:157:207:257:30-7:357:40-7:457:50func-1941-812-1324-10 Следующий этап свёртки такой: Если абс. значение отрицательного элемента меньше значения каждого из положительных соседей - эти три элемента сворачиваются в один (само собой, краевые отрицательные алгоритм игнорирует, у них нет одного из соседей). Этап повторяется, пока возможно. На первом шаге массив time7:007:05-7:157:207:257:30-7:357:40-7:457:50func-19 41 -8 12 -1324-10 преобразуется в time7:007:05-7:257:30-7:357:40-7:457:50func-19 45 -13 24 -10 Возможен ещё один шаг этапа, он даёт time7:007:05-7:457:50func-1956-10 Ответ: интервал 7:05-7:45, сумма 56. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 07:47 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
Почему сворачиваем? Надо разворачивать. В N раз. Лет 20 назад вставала такая практическая задача. Только диапазон был не дискретный. Не помню как решали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 10:18 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
сории. понял задачу ствертки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 10:19 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
AkinaОсталось выбрать максимальное положительное значение, в данном случае это интервал 7:05-7:25 и сумма 45. Но это при N>=3 А если N=2 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 10:21 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
982183 , ты о чём? После первой свёртки положительные и отрицательные числа всегда чередуются. Ибо, как я понял из формулировки задачи, нужно найти именно подпоследовательность с максимальной суммой без ограничения по количеству элементов в ней. Если же надо найти макс. подпоследовательность со строго заданным количеством элементов или не длиннее заданной, то я бы применил заливку прямоугольной матрицы из N строк, где M(i+1,j) = M(i,j) + M(0,j+1), с последующим поиском глобального максимума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 10:27 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
Akina Ибо, как я понял из формулировки задачи, нужно найти именно подпоследовательность с максимальной суммой без ограничения по количеству элементов в ней. NightBomber "Часть интервала может содержать от 1 до N элементов и может начинаться / заканчиваться на любом из них." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 10:38 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
982183 , угу, в этом контексте можно воспринимать N двояко: или как некое заранее заданное значение, или как количество элементов исходного массива. Тебе нравится первый вариант, мне второй. Автор мог бы уточнить, но молчит аки партизан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 11:52 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
Эту задачу любят давать на собеседованиях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 14:18 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
Akina, Не согласен. Говорится о "части" интервала. а не о "интервале" + в твоей трактовке задача тривиальна. А твоё решение отвечает на вопрос - "наибольший положительный интервал" +А во входных данных может быть 1 1 1 1 99 -1 99 1 1 1 1 при N=3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 15:36 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
Хотя нет. Всё зависит от количества "шагов" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 15:38 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
982183Не согласен. Говорится о "части" интервала. а не о "интервале"Весь интервал тоже является частью интервала. Впрочем, какая в пень разница? пусть ТС нарисуется и уточнит постановку задачи, тогда будем дальше воздух трясти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 15:48 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
А как твой способ будет работать, если в массиве будут только положительные значения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 15:51 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
982183как твой способ будет работать, если в массиве будут только положительные значения?На первом этапе свёртки останется единственное значение. Оно и будет решением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 16:21 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
982183, Это самый прямой пример доказательного программирования. :) Логика следующая: 1. Если 2 положительных числа идут подряд, то их сумма всегда будет больше каждого из них, и потому если в интервал включено одно из чисел, то обязательно будет включено и рядом стоящее положительное 2. Если числа чередуются + - +, и отрицательное число меньше каждого из положительных, то сумма трёх чисел будет больше любого из них и если в интервал включено хоть одно, то обязательно будут включены все 3. Но в этом решении есть один большой минус, оно даст неверный результат при следующих входных данных: 20 -10 5 -10 20 Эти интервалы сложены не будут, и максимум определится как 20. Хотя сложив все 5 чисел получим ответ 25 :) Так что алгоритм неполон, а соответственно неверен. Сворачивания недостаточно для определения правильного результата! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 18:52 |
|
||
|
Найти интервал, на котором сумма максимальная
|
|||
|---|---|---|---|
|
#18+
А верный алгоритм следующий: 1. n = 0 2. для каждого элемента массива в направлении слева-направо: 2.1 n += k, где k - значение выбранного элемента массива 2.2 Если n <= k, то n = k, а для указанного массива ставим пометку левого края интервала 3. n = 0 4. для каждого элемента массива в направлении справа-налево: 4.1 n += k, где k - значение выбранного элемента массива 4.2 Если n <= k, то n = k, а для указанного массива ставим пометку правого края интервала 6. находим все пары пометок левая-правая (обязательно в таком порядке, пара - имеется ввиду пометки, между которыми нет других... ближайшие) и считаем сумму между ними. Пара с максимальной суммой и будет искомым интервалом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 19:04 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39524511&tid=1340279]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 145ms |

| 0 / 0 |
