Топ контрибуторов
loading
loading
Знаете ли Вы, что

Если у вас есть уникальная статья и вы хотите, чтобы она стала достоянием общественности, вы можете разместить ее на Quizful.

Лента обновлений
ссылка Apr 24 18:49
Комментарий от motya:
Что значит - "неправильное?"
ссылка Apr 24 18:25
Комментарий от motya:
Croessmah прав. Почему ещё не исправили вопрос?
ссылка Apr 24 18:20
Комментарий от motya:
Забаньте вопрос.
ссылка Apr 24 14:33
Комментарий от mshfriend:
Есть такой аттрибут сборки InternalsVisibleToAttribute...
ссылка Apr 24 13:51
Комментарий от Oplia512:
+
Статистика

Тестов: 153, вопросов: 8596. Пройдено: 432162 / 2118783.

Задачи / Поиск уникального значения

Автор: k06a  к списку      

Вопрос
Имеется массив натуральных чисел. Каждое из чисел присутствует в массиве ровно два раза и только одно из чисел не имеет пары. Необходимо предложить алгоритм, чтобы за минимальное число проходов по массиву определял число не имеющее пары.

Необходимо также предложить алгоритм, если уникальных числа два.
Ответ
Первая задача решается за один проход по массиву.
Необходимо подсчитать XOR-сумму всех чисел массива.
Таким образом пары чисел "уничтожат" друг друга (A xor A = 0).

Для решения второй задачи необходимо разбить диапазон возможных значений чисел на несколько одинаковых по размеру поддиапазонов, например строго пополам. За один проход по массиву нужно вычислять XOR-суммы в поддиапазонах по-отдельности. Далее необходимо делить на поддиапазоны, объединение тех диапазонов, где XOR-сумма получилась не ноль. Как только при подсчёте XOR-сумм найдутся 2 диапазона с ненулевой XOR-суммой, это и будут искомые значение.

Например, для однобайтовых чисел и двух поддиапазонов: после первого прохода будут посчитанны XOR-суммы чисел диапазонов 0-127 и 128-255. Таким образом, если числа были в разных диапазонах, то обе XOR-суммы окажутся ненулевыми.

Для увеличения скорости поиска нужно использовать большее число поддиапазонов. Число проходов равно O(logA(B)), где A - число поддиапазонов (ячеек памяти для хранения XOR-сумм), а B - разрядность чисел в массиве.

Если Вам понравился вопрос, проголосуйте за него

Голосов: 19  loading...
krazh   lazik234   doubt   Engineer9   vasyura   k06a   atomix   azarov   SkyFreeLancer   zZoMROT   Deadly   art   Ingaf   SirSlava   lamed33   worm2   KvanGee   xornotxor   Ibanez