Как я могу отсортировать вектор булевых векторов таким образом? («анализ рейтинга») - PullRequest
1 голос
/ 30 сентября 2019

Нам нужно отсортировать большое количество векторов (массив массивов), содержащих только true и false (1 и 0), все одинакового размера. У нас есть правила: 1 + 1 = 1 (true + true = true) и 1 + 0 = 1 и 0 + 0 = 0.

  • Первый вектор - это вектор с наибольшим числом единиц.
  • Второй вектор - это тот, который приносит больше 1 в дополнение к тем, которые мы уже имели в первом векторе.
  • Третий вектор - это тот, который приносит больше 1 в дополнение к тему нас уже было 2 предыдущих вектора.
  • и т. д.

Например, предположим, у нас есть эти 3 вектора:

a. (0, 1, 0, 0, 1, 1, 0)
b. (1, 0, 1, 1, 0, 1, 1)
c. (0, 1, 1, 1, 0, 1, 0)

Первыйодин в нашем роде b, потому что у него больше 1. Следующий - это. Несмотря на то, что у c больше 1, чем a, a имеет больше 1 в дополнение к 1, которые мы имели в b. К настоящему времени сумма a + b равна (1, 1, 1, 1, 1, 1, 1), поэтому последний равен c, поскольку он не вносит ничего нового в сортировку.

Если двавекторы приносят одинаковое количество лишних единиц, порядок их не имеет значения. Я полагаю, что существует множество возможных результатов для такого рода сортировки, и они все так же хороши.

Мы называем это «анализом ранжирования», но у нас нет четкого термина для такого рода сортировки иGoogle не дает очень полезной информации об этом.

Самый простой способ - просто взять их один за другим с помощью O (n ^ 2). Однако мы работаем с большими данными, и у нас уже есть программное обеспечение для этого, которое слишком медленное, поэтому нам нужно что-то действительно оптимизированное.

Как мы можем этого добиться? Язык программирования не имеет значения, мы можем использовать что угодно. Можно ли распараллелить это (запустить его на нескольких процессорах, чтобы ускорить процесс)? Любые источники или идеи приветствуются.

Редактировать: Я проверил;очевидно, у нас есть случай, когда длина этих векторов равна 103, поэтому они могут быть длиннее 64 слотов.

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