powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите придумать алгоритм
7 сообщений из 7, страница 1 из 1
Помогите придумать алгоритм
    #38859543
herohero1812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попалась интересная задачка с codility, никак не могу придумать алгоритм, помогите:

A non-empty zero-indexed array A of N integers is given. A pair of integers (P, Q), such that 0 ≤ P ≤ Q < N, is called a slice of array A.
Модератор: текст задачи удален по требованию codility under DMCA
...
Рейтинг: 0 / 0
Помогите придумать алгоритм
    #38859562
herohero1812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня такие мысли:

1. Сначала находим суммы всех последовательностей (слайсов) A(0...N), A(1...N), A(2...N), A(3...N)
2. Сортируем суммы, при этом индексы начальных элементов храним вместе с суммами.
3. Находим минимальный элемент по модулю внутри отсортированного массива.
4. Теперь организуем цикл от оригинального последнего элемента до первого (from A[N] to A[0])
В этом цикле отнимаем (реально не отнимаем, а только сравниваем) текущий элемент от локального минимума и проверяем снова на локальный минимум. Т.е. ищем локальный элемент, как будто все элементы уменьшены на текущий элемент внутри региона с локальным минимумом, который нашли на предыдущем шаге.
Проблема в том, что на каждой итерации мы должны выкидывать из рассмотрения элементы отсортированного массива, которые по длине уже стали 0. Их лучше удалять, поэтому для хранения сортированного массива лучше использовать связанный список.

Как только находим сумму равную 0, сразу прекращаем поиск.
...
Рейтинг: 0 / 0
Помогите придумать алгоритм
    #38859576
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
herohero18121. Сначала находим суммы всех последовательностей (слайсов) A(0...N), A(1...N), A(2...N), A(3...N)
2. Сортируем суммы, при этом индексы начальных элементов храним вместе с суммами.
3. Находим минимальный элемент по модулю внутри отсортированного массива.
Зачем так сложно? Все суммы хранить не надо. Алгоритм поиска минимального значения в массиве знаешь?
...
Рейтинг: 0 / 0
Помогите придумать алгоритм
    #38859591
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начни с простого перебора всех возможных комбинаций. Сделаешь - потом будешь совершенствовать алгоритм.
Всего комбинаций N*(N-1)/2, т.е. перебор будет дольше чем O(N*log(N))
...
Рейтинг: 0 / 0
Помогите придумать алгоритм
    #38859670
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заводим переменную для текущего минимума, присваиваем ей min = A[1].
Идём по массиву и набираем вектор сумм summ(1,K).
На каждом шаге считаем все возможные суммы summ(M,K) = summ(1,K) - summ(1, M-1), если очередная сумма меньше min, переприсваиваем её. Для оптимизации считаем только те разности, где они одного знака.
Если текущий минимум = 0, сразу останавливаемся, иначе считаем до конца и выводим минимум.
...
Рейтинг: 0 / 0
Помогите придумать алгоритм
    #38859677
herohero1812
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не пойдет. Сложность квадратичная. Нужна N*log(N)
...
Рейтинг: 0 / 0
Помогите придумать алгоритм
    #38859735
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
herohero1812У меня такие мысли:

1. Сначала находим суммы всех последовательностей (слайсов) A(0...N), A(1...N), A(2...N), A(3...N)
2. Сортируем суммы...

...
3. Находим минимальную разность между парой соседних элементов отсортированного массива :)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите придумать алгоритм
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]