Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите придумать алгоритм / 7 сообщений из 7, страница 1 из 1
21.01.2015, 12:26
    #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
21.01.2015, 12:32
    #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
21.01.2015, 12:38
    #38859576
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите придумать алгоритм
herohero18121. Сначала находим суммы всех последовательностей (слайсов) A(0...N), A(1...N), A(2...N), A(3...N)
2. Сортируем суммы, при этом индексы начальных элементов храним вместе с суммами.
3. Находим минимальный элемент по модулю внутри отсортированного массива.
Зачем так сложно? Все суммы хранить не надо. Алгоритм поиска минимального значения в массиве знаешь?
...
Рейтинг: 0 / 0
21.01.2015, 12:48
    #38859591
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите придумать алгоритм
Начни с простого перебора всех возможных комбинаций. Сделаешь - потом будешь совершенствовать алгоритм.
Всего комбинаций N*(N-1)/2, т.е. перебор будет дольше чем O(N*log(N))
...
Рейтинг: 0 / 0
21.01.2015, 13:44
    #38859670
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите придумать алгоритм
Заводим переменную для текущего минимума, присваиваем ей min = A[1].
Идём по массиву и набираем вектор сумм summ(1,K).
На каждом шаге считаем все возможные суммы summ(M,K) = summ(1,K) - summ(1, M-1), если очередная сумма меньше min, переприсваиваем её. Для оптимизации считаем только те разности, где они одного знака.
Если текущий минимум = 0, сразу останавливаемся, иначе считаем до конца и выводим минимум.
...
Рейтинг: 0 / 0
21.01.2015, 13:48
    #38859677
herohero1812
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите придумать алгоритм
Не пойдет. Сложность квадратичная. Нужна N*log(N)
...
Рейтинг: 0 / 0
21.01.2015, 14:33
    #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]