Является ли удаление дубликатов из одного списка по сравнению с другим операцией NAND? - PullRequest
0 голосов
/ 22 августа 2011

У меня есть список как

 list1 = {2,3,4,5,9}

другой список как

  list2 = {3,5,10,9}

Мне нужна какая-то операция (например, list.Operation (list2)), чтобы я мог вернуть list1 как

  list1 = {2,4}

Это то же самое, что и операция NAND?

Ответы [ 4 ]

4 голосов
/ 22 августа 2011

Нет. Операция NAND работает с двумя логическими значениями. У вас есть два списка.

Это называется разницей или дополнением .

3 голосов
/ 22 августа 2011

NAND, или не-и включает в себя все «биты», которых нет в обоих наборах.Под верхним пределом подразумевается, например, 7, 15, 31 или 63. биты представляют собой отсортированный набор значений true / false, которые лучше всего моделировать с помощью BitSet.

например,

set1 = {2,3,4,5,9}
set2 = {3,5,9,10}
and  = {3,5,9}
nand = {0,1,2,4,6,7,8,10,11 ... }

в двоичном видехотел бы

set1 = 0b10 | 0b100 | 0b1000 | 0b10000 | 0b100000000
set2 = 0b100 | 0b1000 | 0b10000 | 0b100000000 | 0b10000000000
and  = 0b100 | 0b1000 | 0b10000 | 0b100000000
nand = 0b1 | 0b10 | 0b100 | 0b10000 | 0b100000 | 0b10000000 | 0b100000000 | etc
2 голосов
/ 22 августа 2011

То, что вы описываете, является разницей в множествах.

В C ++ вы можете использовать std::set_difference.

1 голос
/ 22 августа 2011

Вы ищете set_difference, но для этого требуется сортировка обоих списков.Если они не отсортированы, вы всегда можете сделать очевидный алгоритм O(n^2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...