yigal_s: (Default)
[personal profile] yigal_s
Дан массив из N элементнов. Ну, к примеру, integers
Делается копия этого массива, элементы в ней случайно перемешиваются, а 4 элемента просто выкидываются.
Теперь у нас имеется два массива - из N и N-4 элементов.
-----
Требуется - быстро найти значения удаленных четырёх элементов.

Upd: дополнительное условие - не аллоцировать дополнительных массивов.

Date: 2007-01-29 05:10 pm (UTC)
From: [identity profile] igorbor.livejournal.com
А что-нибудь еще про массив известно? уникальные ли в нем числа, в каком диапазоне, то, се? или в самом общем виде?

Date: 2007-01-29 05:14 pm (UTC)
From: [identity profile] oblomov-jerusal.livejournal.com
Посчитать суммы двух, массивов, суммы квадратов, суммы кубов и суммы четвертых степеней. Разности дадут суммы удаленных элементов и их степеней. Получится система из четырех уравнений с четырьмя неизвестными. Если ֶa_1...a_4 наши неизвестные, то коэффициенты многочлена (t-a_1)(t-a_2)(t-a_3)(t-a_4) можно выразить через полученные суммы. Четыре корня многочлена и будут нашими неизвестными.

В лоб

Date: 2007-01-29 05:24 pm (UTC)
From: [identity profile] dimrub.livejournal.com
Загоняем значения из меньшего массива в хэш. Затем ищем в этом хэше значения из второго массива. Которые не нашли - те наши. Если с повторениями - та же идея, но клетки хэша содержат также счетчик повторений, который во время второго прохода уменьшается.

Для смеха

Date: 2007-01-29 05:56 pm (UTC)
From: [identity profile] profi.livejournal.com
Я не программист. Да и арифметику подзабыл. :-)

Просто, чтобы проверить себя. Если оба массива упорядочить по одному и тому же закону, а потом вычесть поэлементно. Все ненулевые значения в массиве разности - это удаленные. Да? Нет? Только не бейте сапогами по голове! :-)))))

Date: 2007-01-29 08:56 pm (UTC)
From: [identity profile] vladiv.livejournal.com
Отсортирован ли исходный массив? Если нет, отсортировать бинарной сортировкой. Второй массив (копию) отсортировать в любом случае. Дальше двигаться последовательно по первому массиву (i). сравнивая его с копией (j=i). Несравнение по некоторому индексу (i) означает, что этот элемент, выброшен из второго массива. Нарастить i и продолжать сравнение.
Лучшего алгоритма я пока не вижу, но, возможно, он есть.

Date: 2007-02-10 02:55 pm (UTC)
From: [identity profile] occuserpens.livejournal.com
Отсортировать оба массива на месте и сравнить

Date: 2007-03-29 03:07 pm (UTC)
From: [identity profile] thornik.livejournal.com
А вы специально указали "integers", чтобы притянуть задачу к арифметической или вас интересовал алгоритм со, скажем, строками?