FAQ по форумуНовые сообщения на Форуме
  • Страница 1 из 2
  • 1
  • 2
  • »
Неожиданные применения исключающего или
IQFunДата: Сб, 29.01.22, 19:45 | Сообщение # 1
Просветленный
Сообщений: 669
Награды: 39
Совы: 30
Логическая операция исключающее или (она же сложение по модулю два) имеет ряд неожиданных применений. Пусть дан массив чисел, в котором все числа кроме одного встречаются дважды, и только одно не имеет пары. Надо придумать алгоритм нахождения этого числа. Если кто-то догадался, как можно просто это сделать, высказывайте свои мнения.

IQFun.ru - играем и растём над собой. Авторские игры, головоломки, кроссворды онлайн, интересные статьи.


Сообщение отредактировал IQFun - Сб, 29.01.22, 19:46
 
ФигароДата: Вс, 30.01.22, 21:57 | Сообщение # 2
Мыслитель
Сообщений: 393
Награды: 23
Совы: 15
Переводим все числа в двоичную систему,  складываем побитно все возможные пары в Z/2Z, если при сложении получается 0 то эти числа одинаковы  их отбрасываем. Продолжаем пока не наткнемся на число которое при таком сложении с остальными не даёт 0,  это и будет искомое число  в данном массиве.

ʎʞнɐнԑи ɐн ʎdǝфɔ
৭ꓕɐʚиhɐdoʚыʚ
ꙕǝᥕʎ


Сообщение отредактировал Фигаро - Чт, 03.02.22, 20:59
 
VitaДата: Пн, 31.01.22, 19:18 | Сообщение # 3
Гений
Сообщений: 1524
Награды: 243
Совы: 13
 
IQFunДата: Пн, 31.01.22, 22:23 | Сообщение # 4
Просветленный
Сообщений: 669
Награды: 39
Совы: 30
Ответ: надо просто поксорить все элементы массива, в результате получим искомое число. Потому что пары одинаковых чисел дадут в результате нули. Даже опытные программисты могут здесь предложить хеш-таблицу и прочие штуки для ускорения расчётов, а ларчик открывается просто с пом. xor.

IQFun.ru - играем и растём над собой. Авторские игры, головоломки, кроссворды онлайн, интересные статьи.
 
ФигароДата: Пн, 31.01.22, 22:56 | Сообщение # 5
Мыслитель
Сообщений: 393
Награды: 23
Совы: 15
IQFun,  а чем отличается то что написал я от того что написали вы?
Для чего вы задаёте вопрос,  ответ на который вы не способны понять?


ʎʞнɐнԑи ɐн ʎdǝфɔ
৭ꓕɐʚиhɐdoʚыʚ
ꙕǝᥕʎ
 
IQFunДата: Вт, 01.02.22, 21:33 | Сообщение # 6
Просветленный
Сообщений: 669
Награды: 39
Совы: 30
Цитата Фигаро ()
IQFun,  а чем отличается то что написал я от того что написали вы?Для чего вы задаёте вопрос,  ответ на который вы не способны понять?
Мой ответ короче, надо просто ещё раз его прочитать. (В нём не надо складывать всевозможные пары.)


IQFun.ru - играем и растём над собой. Авторские игры, головоломки, кроссворды онлайн, интересные статьи.
 
ФигароДата: Ср, 02.02.22, 20:54 | Сообщение # 7
Мыслитель
Сообщений: 393
Награды: 23
Совы: 15
IQFun,  теперь я понял, вы не только ответы не можете понять, вы не понимаете даже то что пишите сами.
Вы предложили внимательней почитать, так давайте это сделаем:
Вот ваши слова:
Цитата IQFun ()
надо просто поксорить все элементы массива,

После чего пишите противоречащие этому слова:
Цитата IQFun ()
(В нём не надо складывать всевозможные пары.
Вы вменяемый вообще?
xor , или как вы выразились «поксорить» — это и есть сложение в кольце вычетов по модолю два.
Постарайтесь хотя бы со второй попытки ответить на тот же вопрос:
«чем отличается то что написал я от того что написали вы?»
И пожалуйста внятно и по существу.


ʎʞнɐнԑи ɐн ʎdǝфɔ
৭ꓕɐʚиhɐdoʚыʚ
ꙕǝᥕʎ


Сообщение отредактировал Фигаро - Чт, 03.02.22, 20:59
 
VitaДата: Чт, 03.02.22, 07:03 | Сообщение # 8
Гений
Сообщений: 1524
Награды: 243
Совы: 13
Фигаро пишет "все возможные пары", IQFun, пишет "все элементы массива". Вы оба пишете разными словами об одном и том же? Предлагаю писать на родном языке: языке программирования, раз так трудно найти общий.
Хотела поделиться опытом по поводу ИИ. Директор молзавода - молодой, продвинутый чел, имея автопарк и желая сократить расходы(читай уволить некоторых водителей), покупает крутую программу "Логистика". Однако, программа выдавая оптимальные маршруты доставки молока в торговые точки, никак не укладывается при имеющемся количестве персонала в необходимое время работы. И машин, и людей не достаточно!
Мало вас, математиков, видимо проблема в этом)

Добавлено (03.02.22, 19:32)
---------------------------------------------
P.s. я никак не могу понять - если сравнивать все возможные пары, зачем не использовать обычное математические равно, или вычитание с проверкой на ноль...а побитно все числа складывать попарно по модулю 2? Как этот xor работает с массивом? Алгоритм хоть бы опишите, пожалуйста O_o


Сообщение отредактировал Vita - Чт, 03.02.22, 19:51
 
ФигароДата: Чт, 03.02.22, 21:16 | Сообщение # 9
Мыслитель
Сообщений: 393
Награды: 23
Совы: 15
Цитата Vita ()
Фигаро пишет "все возможные пары", IQFun, пишет "все элементы массива". Вы оба пишете разными словами об одном и том же?
 Да Вита, об одном и том же! Но вот  IQFun не понимает этого,  более того, по видимому  он не понимает и того что пишет сам.
Цитата Vita ()
Как этот xor работает с массивом?

Я конечно постараюсь доступно разъяснить о том что написал я и о том что это за xor, но не уверен что это получится, т.к. не знаю что вам знакомо а что нет.

Вот давайте все целые числа будем делить на 2, и смотреть какие остатки при этом получаются.Не трудно понять что у нас будут получаться в остатке либо 0, либо 1.  Получается что все числа можно рассортировать на два множества, — множество чисел которые дают ноль в остатке при делении на 2, и множество чисел которые дают единицу в остатке при делении на два. Числа  входящие в эти множества называют вычетами по модулю два,  а сами  эти множества обозначают следующим образом [0]2, [1]2, и называют классами вычетов по модулю 2. В арифметике остатков,  вместо того чтобы складывать (или например умножать)  числа из этих классов, можно просто сложить остатки.Например вместо того чтобы складывать 13 и 17 и  искать какой остаток даёт  сумма этих чисел при делении на два, мы просто можем сложить остатки.Число 13 даёт остаток 1 при делении на 2,  и число 17 даёт остаток 1 при делении на два, значит  сумма этих чисел  даёт остаток 1+1=2,  т.е. 0, т.к. 2 делится на 2 без остатка.Можем даже таблицу сложения  соответствующую сделать:


Вот так лаконично выглядит таблица сложения всех целых чисел по модолю два.Можно так же и умножать эти остатки.В математике если  над некими объектами можно осуществлять операции похожие на сложения (и обратимую к ней операцию) а так же операцию похожую на умножение, то говорят что относительно  данных операций изучаемые элементы образуют конечное кольцо.Кольцо вычетов  по модулю два обозначается Z/2Z.(На самом деле здесь выполняются все аксиомы поля, поэтому я бы мог  обозначить это как GF(2), но я подумал IQFun не поймёт ничего, но в итоге он всё равно не понял).

Теперь думаю более ясно что написано в моём сообщении.

Теперь разберёмся с функцией xor.XOR,  это и есть функция сложения по  модулю два. Это функция встроена практически в любой язык программирования.В логике её называют «исключающее или» собственно от сюда и название функции.Сравните табличку сложения двух элементов по модулю 2 данную вверху и таблицу истинности для «исключающего или» так же для двух операндов:


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

Если вы введете некий массив чисел то компьютер будет оперировать ими в двоичной системе счисления.Пусть у нас есть два операнда например

001110001

и

001110001

Применяя к этим операндам функцию xor, — компьютер будет поразрядно складывать их (смотрите табличку сложения) , то есть  произойдёт следующее:


Как видим если два операнда равны, то в итоге получится ноль, всегда, а если не равны, то ноля не получится ни при каких условиях.

Так вот если мы будем применять к массиву чисел функцию xor, то будут складываться все числа попарно, и в итоге мы выявим те которые в массиве присутствуют дважды и те которые в единственном экземпляре.

Теперь давайте перечитаем то что написал я:
Цитата Фигаро ()
Переводим все числа в двоичную систему,  складываем побитно все возможные пары в Z/2Z, если при сложении получается 0 то эти числа одинаковы  их отбрасываем. Продолжаем пока не наткнемся на число которое при таком сложении с остальными не даёт 0,  это и будет искомое число  в данном массиве.

и то что написал IQFun:
Цитата IQFun ()
Ответ: надо просто поксорить все элементы массива, в результате получим искомое число. Потому что пары одинаковых чисел дадут в результате нули.

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


ʎʞнɐнԑи ɐн ʎdǝфɔ
৭ꓕɐʚиhɐdoʚыʚ
ꙕǝᥕʎ


Сообщение отредактировал Фигаро - Чт, 03.02.22, 21:21
 
VitaДата: Чт, 03.02.22, 21:30 | Сообщение # 10
Гений
Сообщений: 1524
Награды: 243
Совы: 13
Цитата Vita ()
------------------------------------------
P.s. я никак не могу понять - если сравнивать все возможные пары, зачем не использовать обычное математические равно, или вычитание с проверкой на ноль...а побитно все числа складывать попарно по модулю 2? Как этот xor работает с массивом? Алгоритм хоть бы опишите, пожалуйста


Я понимаю таблицу истинности, понимаю как из логических элементов собрать схему исключающее ИЛИ, я не понимаю - ЗАЧЕМ, чем это упростит задачу попарного перебора и сравнения?


Сообщение отредактировал Vita - Чт, 03.02.22, 21:36
 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Интересная информация
Последние задачи Сообщество эрудитов ВКонтакте Рейтинг сообщений Совиный рейтинг
1.Арнольд, да не тот21
2.Задача на подбор ответа0
3.загадка из видео на ютубе5
4.Замечание об определении ...0
5.Замечание о мантре в мето...2
6.Шофёры, художники, рыболо...1
7.Найди число19
8.Помощь с решением задачи11
9.Числовая последовательнос...20
10.А попробуйте ещё это опро...3
1.Rostislav5379
2.Lexx4728
3.nebo3639
4.Иван3061
5.никник2760
6.Kreativshik2472
7.Гретхен1807
8.Vita1524
9.erudite-man1378
10.Valet937
1.nebo123
2.Kreativshik113
3.sovetnik49
4.MrCredo38
5.IQFun30
6.Pro100_Artyom27
7.marutand20
8.хан20
9.никник15
10.Фигаро15

ГлавнаяГостевая книгаFAQОбратная связьКоллегиФорум Эрудитов