Реализация побитового XNOR

1

Я видел вопрос о поиске не повторяющегося числа из множества, содержащего только одно число диктата, а остальные числа могут повторяться любое четное число раз. Ограничение заключалось в том, что вам нужно найти это число за один проход, используя постоянную память. {предположим, что все - положительные числа}.
я легко понял это, выполнив эту функцию

  private static int nonRepeatingElement(int[] set) 
  {
        int element = 0;
        for (int i = 0; i < set.length; i++) 
        {
            element = (element ^ set[i]);
            System.out.println(element);
        }
    return element;
 }

и это работает нормально.
Теперь только из-за любопытства я решил изменить проблему с аналогичными ограничениями.
задачи1
Я думал о наборе, который теперь содержит элементы, которые могут возникать в любое нечетное число времени, за исключением одного элемента, который не имеет даже времени. for example {2,5,7,5,7,1,2,7,1,5,2}
Теперь, сохраняя логику, которую XNOR дает 0 для каждого нечетного появления 1, я немного изменил код

 for (int i = 0; i < set.length; i++) 
            {
                element = (element ^ set[i]);
                System.out.println(element);
            }
        return ~element;

но это не сработало.
задачи2
если я возьму элементы в наборе типа {2,5,7,5,7,1,2,7,5,2}, то мышление XNORing будет делать каждое трехкратное появление числа до 0 и XNORing с 1 (единственным вхождением) в 0 будет переворачивать биты 1. Конечный результат может быть достигнут, если я переверну (() биты того, что я получаю от операции XNOR. Но это также не работает.

Я знаю, почему эта семантика идет не так, потому что это побитовая операция не логична. Но если xoring можно использовать для поиска нечетного числа пробелов, не существует ли какой-либо возможности с XNOR для нахождения даже окклюзии числа?

Я не уверен в возможности этой проблемы, которую я прошу только из любопытства, поэтому простите мое невежество, если оно не имеет значения в любом контексте.

  • 0
    XNOR будет этим ~(element ^ set[i]); но теперь ~ после цикла.
  • 0
    здесь на самом деле есть несколько операндов (i / p), к которым я должен применить операцию XNOR. Я не могу каскадировать o / p из 2 операций i / p xnor для нахождения 3 i / p операции XNOR. Вот почему сначала я клонирую все Затем i / p использует ~ для передачи окончательного значения XNORed вызывающей функции.
Показать ещё 1 комментарий
Теги:
algorithm

1 ответ

2
Лучший ответ

XOR и XNOR являются коммутативными. Это означает, что любой повторный порядок последовательности всегда дает тот же результат.

Вы уже знаете, что a ^ a равно нулю. То, как работает одиночная абстракция числа: a ^ b ^ a равно a ^ a ^ b которая равна 0 ^ b которая равна b.

Но a XNOR a также не является функцией a. Это просто целая нагрузка 1 бит. Поэтому вы не можете восстановить значение a помощью a XNOR a и поэтому ваш подход не будет работать.

  • 0
    Так есть ли другой подход для достижения результата в этом сценарии?
  • 1
    Не с булевыми операциями и O (N) обходом, нет. Почему бы не попытаться доказать это?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню