Рейтинг:3

Самые быстрые операции с учетом заказов

флаг in

Для любой $v$ много $b$биты векторов $(\mathbf{x}_0, \mathbf{x}_1, \ldots, \mathbf{x}_{v-1}) \in \{\{0, 1\}^b\}^v$, что такое самый быстрый способ совместить $\mathbf{x}_0, \mathbf{x}_1, \ldots, \mathbf{x}_{v-1}$ в одно число, так что операция чувствительный к порядку?

Например. скажи это $\шляпа+$ это какой-то метод объединения чисел (не обязательно сложение, но мы можем определить его по своему усмотрению). Цель состоит в том, чтобы иметь $\mathbf{x}_0 \шляпа+ \mathbf{x}_1 \шляпа+ \ldots \шляпа+ \mathbf{x}_{v-1}$ привести к уникальному номеру, отличному от любого другого порядка, например, $\mathbf{x}_{v-1} \шляпа+ \mathbf{x}_{v-2} \шляпа+ \ldots \шляпа+ \mathbf{x}_0$.

Что касается самый быстрый, скорость измеряется на процессорах общего назначения. Например. х86-64.


Моя мысль до сих пор такова:

b_bits_variable xor = 0;
для (я = 0; я < v; я ++) {
  xor = xor ^ (xor + x_i);
}

куда:

  • b_bits_variable это переменная, которая имеет точно $b$ много бит. Например. если $б=16$, то мы можем использовать uint16_t на языке программирования Си.
  • в является $v$ (количество векторов, как указано выше).
  • х_я является $\mathbf{x}_i$ (переносчик среди $v$ многие из них, как в вопросе выше).
  • я++ $= я+1$.
  • ^ является побитовым XOR.
  • + это сложение, обычно используемое в языках программирования, которое переполняется, если число больше, чем $2^б - 1$. я считать такое переполнение в основном по модулю $2^б$ добавление. т.е. xor + x_i $=\text{xor} + \mathbf{x}_i \mod 2^b$.
kodlu avatar
флаг sa
пожалуйста, используйте математические обозначения. что такое uint_8t?
caveman avatar
флаг in
Беззнаковое целое с 8 битами. `uint8_t` используется в C. Я думал, что в криптографическом сообществе принято говорить на C, поскольку большинство реализаций в конечном итоге сводятся к их оптимизации? Может быть, я ошибаюсь. Есть лучший способ написать это?
kodlu avatar
флаг sa
написание задачи математически сделает ее более понятной для тех, кто не программирует. В каком наборе лежат ваши переменные? какие операции над ними определены? rand_pick_pool что означает?
kodlu avatar
флаг sa
Допустим, у меня есть $X_1,\ldots,X_N \in \{0,1\}^m$, так что это $m-$битовые векторы. Вы также можете думать о них как о целых числах в $\{0,1,..,2^m-1\}$ с добавлением по модулю $2^m-1$. Используя это, переформулируйте свой вопрос.
caveman avatar
флаг in
@kodlu - ИМО, это слишком много, потому что этот вопрос касается быстрой реализации. ИМО подмножество криптографии тесно связано с реализацией, когда дело доходит до производительности, и мой вопрос один. Я думаю, слишком много математической абстракции уведет нас от цели вопроса
kodlu avatar
флаг sa
Справедливо. *Но* если вы хотите понять, есть ли внутренняя причина, основываясь на параметрах $N,m$ в моем комментарии и точном порядке двух операций, которые определяют, является ли общий результат чувствительным к порядку, это математический криптографический вопрос. . Я про ваш вопрос 1. Я так и не понял, что именно за установка, но неважно.
caveman avatar
флаг in
@kodlu - Готово (спасибо, вы правы, я проглядел).
Рейтинг:1
флаг sa

Это одна простая идея.

я использую $x_i$ для вектора в $д$ размеры и использование $a_i$ для соответствующего целого числа в $\{0,1,\ldots, 2^d-1\}$.

Сортировать $a_i$ от малого до большого. Позволять $r_i$ быть в ранге $a_i$ использовать ранги из $\{0,1,\ldots,v-1\}$. Произвольно рвите галстуки во время сортировки.

Пример: $(а_1,а_2,а_3)=(1,7,2)$ имеет ранговый вектор $(r_1,r_2,r_3)=(0,2,1).$ Есть три записи, пронумерованные от 0 до 2, и средняя запись 7 является самой большой с рангом 2.

Теперь рассмотрим список перестановок 3 объектов в стандартном лексикографическом порядке и их индекс

$$ 012~~0\\ 021~~1\\ 102~~2\\ 120~~3\\ 201~~4\\ 210~~5\\ $$ и обратите внимание, что эта перестановка 021, поэтому занимает позицию 1 в списке перестановок. Кодирование позиции в виде двоичного вектора занимает $r=\lceil \log_2 v\rceil$ биты.

Если $r\leqd,$ мы можем определить $$ x_1+x_2+\cdots+x_v=x_1\oplus x_2\oplus \cdots\oplus x_v \oplus индекс (перестановка (x_1,\ldots,x_v)), $$ поэтому в конце мы исключаем индекс перестановки, который изменяется, если $x_i$ переупорядочены.

caveman avatar
флаг in
Как это соотносится с моей идеей выше? Например. рекурсивно для любого $i$, $x_i + x_{i+1} = x_i \oplus (x_i + x_{i+1} \mod 2^d)$, с базовым случаем $x_0 = x_0$. В основном меня интересуют два аспекта: (1) чувствительность к порядку и (2) скорость. Что касается (1), я думаю, что это подразумевает уменьшение столкновений; например насколько вероятно, что разные количества разных заказов в конечном итоге получат одинаковый окончательный номер?

Ответить или комментировать

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