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


19

Кто-нибудь может мне помочь со следующей проблемой?

Я хочу найти некоторые значения a i , b jai,bj (mod NN ), где i = 1 , 2 , , K , j = 1 , 2 , , Ki=1,2,,K,j=1,2,,K (например, К = 6K=6 ), учитывая список значений К 2K2 которые соответствуют различиям a i - b j( модN )aibj(modN) (например, N = 251N=251 ), не зная конкретного соответствующего отношения. Поскольку значения a i , b j( модN )ai,bj(modN) не определены однозначно с учетом различий a i - b j( модN )aibj(modN) , мы ищем любое допустимое присвоение значений.

Определенно, попытка каждой перестановки чисел К 2K2 в списке (всего К 2 !K2! Возможных случаев), а затем решение модульных уравнений с a i , b jai,bj в качестве переменных невозможно.

Фактически эта проблема возникает в статье о криптоанализе в ранней версии схемы подписи NTRU ( http://eprint.iacr.org/2001/005 ). Однако автор написал только одно предложение «Простой алгоритм возврата находит одно решение…» (в разделе 3.3), и поэтому кто-нибудь может дать больше объяснений? Более того, автор также упомянул, что «каждый круговой сдвиг { ( ( a i + M )модификацияN , ( b i + M )модификацияN } K i = 1{((ai+M)modN,(bi+M)modN}Ki=1 или обмен ( { ( N - 1 - b i , N - 1 - a i ) } K i = 1 )({(N1bi,N1ai)}Ki=1) приводит к тому же шаблону a i - b jмодификацияNaibjmodN ”, и полезно ли это утверждение?


7
Обратите внимание, что невозможно восстановить a i , b jai,bj , так как если вы добавите некоторую константу СC ко всем числам, то различия останутся прежними.
Юваль Фильмус

1
@Yuval: это уже включено в последнее предложение описания. Я думаю, что нужно только одно решение, так как может существовать несколько.
domotorp

2
@Yuval Извините за не указав, что a i , b jai,bj «s также должны быть приняты модульное NN . Так что не существует бесконечных решений.
Гость

@domotorp Да, найти одно из решений - это нормально.
Гость

1
Возможно, ОП мог бы уточнить, что яai , б Jbj взяты по модулю NN ранее в посте: возможно, в заголовке или в первом абзаце. Стоит упомянуть и проблему с константой СCОбе вещи смутили меня, когда я начал читать.
Хуан Бермехо Вега

Ответы:


4

Вот предложение для и . Нам дан список . Начните с принятия одного из них без потери общности . Без ограничения общности , и мы получим значение . Теперь возьмите другой и надеемся, что он имеет форму (это происходит с вероятностью ), и выведите .K = 6 N = 251 a i - b jK=6N=251( модН ) 1 - б 1 б 1 = 0 1 2 - б 1 5 / 35 = 1 / 7 2aibj(modN)a1b1b1=0a1a2b15/35=1/7a2

На этом этапе мы знаем . Наша следующая цель - найти для . Для каждого кандидата , если тогда также должны быть в списке. Если , то вероятность того, что также присутствует в списке, составляет примерно . Так что если мы найдем кандидата для которого также есть в списке, то, вероятно, . Таким образом, мы можем восстановить с некоторой уверенностью.a 1 , a 2 , b 1 a 1 - b j j 1 a i - b j i = 1 ( a i - b j ) + ( a 2 - a 1 ) = a 2 - b j i 1 ( a i - b j ) + ( a 2 - aa1,a2,b1a1bjj1aibji=1(aibj)+(a2a1)=a2bji1 1 ) 33 / 251(aibj)+(a2a1)33/251 я - б J ( я - Ь J ) + ( 2 - 1 ) я = 1 б 2aibj(aibj)+(a2a1)i=1b2

На этом этапе мы знаем . Таким же образом, как мы восстановили , мы можем восстановить с достаточной уверенностью. Затем мы можем восстановить путем поиска кандидата для которого и оба находятся в списке. Потому что у нас есть еще с, наша вероятность отказа идет значительно вниз. Продолжаем и находим .a 1 , a 2 , b 1 , b 2 b 2 a 3 b 3 a i - b j ( a i - b j ) + ( a 2 - a 1 ) ( a i - b j ) + ( a 3 - a 1 ) а б 3 , а 4 , б 4a1,a2,b1,b2b2a3b3aibj(aibj)+(a2a1)(aibj)+(a3a1)a,a5,b6,a6,b6b3,a4,b4,a5,b6,a6,b6

В любой точке этого алгоритма мы могли догадаться, что что-то не так, и это в конечном итоге приведет к противоречию (скажем, в какой-то момент нет подходящего кандидата ). Затем мы возвращаемся назад и пробуем другую возможность; если мы исчерпали все возможности, мы снова вернемся назад и попробуем другую возможность (для другой стадии алгоритма); и так далее.aibjaibj

Это хорошее упражнение для программирования этого алгоритма - это, вероятно, единственный способ понять, как правильно осуществить возврат. Это также единственный способ определить, работает ли этот алгоритм на практике.


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

Извините, что забыли опубликовать мой комментарий к вашему ответу! Я также реализовал предложенный вами метод (в C ++). Вывод таков: ваш алгоритм работает достаточно хорошо, и одно из решений может быть найдено очень быстро (менее чем за секунду на моем ПК). И на этот раз я могу лучше понять процедуры возврата. Большое спасибо!
гость

Почему я не могу "@Yuval" в моем последнем комментарии ?! Извините, но я пробовал несколько раз.
гость

Возможно, вы могли бы поделиться кодом в Интернете, чтобы другие люди, читающие газету, имели к нему доступ.
Юваль Фильмус

5

Обновление : приведенное ниже описание относится к другой задаче (в которой у вас есть все попарные расстояния в наборе, а не попарные расстояния между двумя различными наборами). Я все равно оставлю это, так как это тесно связано.

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

Неизвестно, допускает ли проблема с кольцевым прохождением многовременный алгоритм. Существуют различные псевдополийные алгоритмы для смежных вопросов. Лучшая ссылка (увы, старая) - статья Лемке, Шиены и Смита .


1
Я думаю, что эта проблема другая. В задаче о кольцевой дороге мы знаем все попарные расстояния, здесь мы знаем ее только между двумя точками, находящимися в разных группах. Хотя это кажется меньше информации, на самом деле это может помочь решить проблему.
domotorp

О да. это двудольный граф. хорошая точка зрения.
Суреш Венкат

Двудольный граф? Что-то вроде. Может быть, я должен решить проблему таким образом, но у меня сейчас нет конкретного хода мыслей.
Гость

3

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

Предположим, у нас есть четыре различия: , , , которые возникают как парные различия между двумя 's и двумя ' s. Назовите это квартет различий. Обратите внимание, что у нас нетривиальные отношения:a1b1a1b1a1b2a1b2a2b1a2b1a2b2a2b2aabb

(a1b1)(a1b2)=(a2b1)(a2b2)(modN).

(a1b1)(a1b2)=(a2b1)(a2b2)(modN).

Вы можете попытаться использовать это отношение для выявления потенциальных квартетов из списка . Например, выберите четыре различия из списка; если они не удовлетворяют вышеуказанным отношениям, то они определенно не возникают из структуры квартета; если они удовлетворяют отношения, они могут возникнуть из квартета.K2K2

Есть много способов взять вещи отсюда, но я подозреваю, что этого будет достаточно.

Я особенно подозреваю, что для вашего примера настройки параметров проблема будет довольно простой, потому что вышеописанный тест для распознавания квартета, вероятно, не будет иметь слишком много ложных срабатываний. Наш из всех способов выбора 4 отличий из списка, будет квартета (которые будут удовлетворять соотношению), а остальные являются не квартетами (которые удовлетворяют связь с вероятностью , эвристически). Поэтому мы ожидаем увидеть примерно ложных срабатываний, то есть 4 кортежа, которые проходят тест, даже если они не являются квартетами. Для ваших параметров это означает, что у нас есть 225 квартетов и(K24)(K24)(K2)2(K2)21/N1/N((K24)(K2)2)/N((K24)(K2)2)/N(58905225)/251234(58905225)/251234другие ложные срабатывания; так что около половины 4-х кортежей, прошедших тест, на самом деле являются квартетами. Это означает, что приведенный выше тест является довольно хорошим способом распознавания квартетов. Как только вы сможете распознать квартеты, вы действительно сможете отправиться в город, чтобы восстановить структуру списка различий.


@DW: Спасибо, но теперь мне интересно следующий шаг после того, как найдены все возможные квартеты (всего 225 + 234 = 459). Должен ли он искать 3 непересекающихся квартета и проверять, могут ли они составить возможное решение? Как это сделать эффективно? Может быть, не так сложно, потому что не будет много перекрытий.
Гость

@aguest, хороший вопрос! Я не могу вспомнить, что я думал в то время. Мне кажется, я вспоминаю, что одним из подходов было бы начать с одного квартета, а затем искать все другие, которые перекрывают его с двумя различиями (например, возникающие из где ), но я не знать, куда идти (как отфильтровать ложные срабатывания). a 1 , a j , b 1 , b 2 j 2a1,aj,b1,b2j2
DW

3

Вот другой подход, основанный на итеративном поиске чисел, которые не могут появляться среди . Назовем множество Чрезмерно аппроксимацию «S , если мы знаем , что . Точно так же, является overapproximation из «ы , если мы знаем , что . Очевидно, что чем меньше , тем более полезно это по-приближение, и то же самое относится и к . Мой подход основан на итеративном уточнении этих чрезмерных аппроксимаций, т.е. итеративном уменьшении размера этих множеств (поскольку мы исключаем все больше и больше значений как невозможных).{ a 1 , , a 6 } A a { a 1 , , a 6 } A B b { b 1 , , b 6 } B A B{a1,,a6}Aa{a1,,a6}ABb{b1,,b6}BAB

Ядром этого подхода является метод уточнения : с учетом чрезмерного приближения для 's и чрезмерного приближения для ' s найти новое избыточное приближение для ', такое, что . В частности, обычно будет меньше, чем , так что это позволяет уточнить чрезмерное приближение для .A a B b A a A A A A aAaBbAaAAAAa

С помощью симметрии, по существу, тот же трюк позволит нам уточнить наше чрезмерное приближение для : s: с учетом избыточного приближения для и s и чрезмерного приближения для , это создаст новое -приближение для .b A a B b B bbAaBbBb

Итак, позвольте мне рассказать вам, как сделать уточнение, тогда я соберу все вместе, чтобы получить полный алгоритм для этой проблемы. В дальнейшем пусть обозначает множество множеств разностей, т. ; мы сосредоточимся на поиске дорабатываться приближения , учитывая .D D = { a i - b j : 1 i , j 6 } A A , BDD={aibj:1i,j6}AA,B

Как рассчитать уточнение. Рассмотрим одну разность . Рассмотрим множество . Основываясь на наших знаниях о том, что является чрезмерным приближением , мы знаем, что хотя бы один элемент из должен быть элементом . Таким образом, мы можем рассматривать каждый из элементов в , как «предложение» для ряда , чтобы возможно включить в . Итак, давайте рассмотрим все различия и, для каждого, определим, какие числа «предложены» .d D d + B = { d + y : y B } B b d + B { a 1 , , a 6 } d + B A d D ddDd+B={d+y:yB}Bbd+B{a1,,a6}d+BAdDd

Теперь я собираюсь заметить, что число обязательно будет предложено как минимум 6 раз во время этого процесса. Почему? Поскольку различие в , и когда мы его обработаем, будет одним из предложенных чисел (поскольку мы гарантируем, что , обязательно включает ). Точно так же разница появляется где-то в , и это заставит быть предложенным снова. Таким образом, мы видим, что правильное значение будет предложено как минимум 6 раз. То же самое верно для иa 1 a 1 - b 1 D a 1 b 1B ( a 1 - b 1 ) + B a 1 a 1 - b 2 D a 1 a 1 a 2 a 3a1a1b1Da1b1B(a1b1)+Ba1a1b2Da1a1a2a3, и так далее.

Итак, пусть будет набором чисел , которые были предложены как минимум 6 раз. Это, безусловно, является чрезмерным приближением , согласно приведенным выше комментариям.A a aAaa

В качестве оптимизации, мы можем отфильтровать все предложения, которые не присутствуют в сразу: другими словами, мы можем рассматривать разность как предполагающее все значения . Это гарантирует , что мы будем иметь . Мы надеемся, что строго меньше, чем ; никаких гарантий, но если все пойдет хорошо, возможно, так и будет.A d ( d + B ) A A A A AAd(d+B)AAAAA

Собирая это вместе, алгоритм для уточнения для получения выглядит следующим образом:A , B A A,BA

  1. Пусть . Это множество предложений.S = d D ( d + B ) AS=dD(d+B)A

  2. Подсчитайте , сколько раз появляется каждое значение . Пусть множество значений , которые появляются по крайней мере 6 раз в . (Это может быть осуществлено эффективно путем создания массива из 251 первоначально, первоначально все равен нуля, и каждый раз , когда число предполагается, вы увеличиваете , в конце концов вы несетесь через ищем элементы , которые имеют значение 6 или больше)S A S a s a [ s ] aSASasa[s]a

Подобный метод может быть построен, чтобы уточнить A , B, чтобы получить B . Вы в основном обратные вещи выше и флип некоторые признаки: например, вместо D + B , вы смотрите на - г + A .A,BBd+Bd+A

Как вычислить начальное чрезмерное приближение. Чтобы получить наше начальное чрезмерное приближение, одна идея состоит в том, чтобы предположить (wlog), что b 1 = 0 . Отсюда следует, что каждое значение a i должно появляться где-то среди D , поэтому список различий D можно использовать в качестве нашего начального чрезмерного приближения для a 's. К сожалению, это не дает нам очень полезного чрезмерного приближения для b .b1=0aiDDab

Лучший подход состоит в том, чтобы дополнительно угадать значение одного из а . Другими словами, мы предполагаем (wlog), что b 1 = 0 , и используем A = D в качестве нашего начального чрезмерного приближения a 's. Тогда мы угадать, один из этих 36 значений действительно один из через -х, скажем , на 1 . Это дает нам чрезмерное приближение B = a 1 - D для b . Мы используем это начальное чрезмерное приближение A , Bab1=0A=Daaa1B=a1DbA,Bзатем итеративно уточняйте его до сходимости и проверяйте, верен ли результат. Повторим до 36 раз, с 36 различных догадок в 1 (в среднем 6 догадок должно быть достаточно) , пока мы не находим тот , который работает.a1

Полный алгоритм. Теперь у нас может быть полный алгоритм для вычисления a 1 , , a 6 , b 1 , , b 6 . По сути, мы выводим начальное избыточное приближение для A и B , а затем итеративно уточняем.a1,,a6,b1,,b6AB

  1. Сделайте предположение: для каждого z D предположим, что a 1 = z . Сделайте следующее:zDa1=z

    1. Начальное течение приближения: Определить A = D и B = г - D .A=DB=zD

    2. Итеративное уточнение: неоднократно применять следующее до сходимости:

      • Уточните A , B, чтобы получить новое избыточное приближение B из b .A,BBb
      • Уточните A , B ∗, чтобы получить новое избыточное приближение A из a .A,BAa
      • Пусть A : = A и B : = B .A:=AB:=B
    3. Проверьте успешность: если каждый из наборов A , B имеет размер 6, проверьте, являются ли они допустимым решением проблемы. Если они есть, остановись. Если нет, продолжайте цикл по значениям-кандидатам z .A,Bz

Анализ. Будет ли это работать? Сойдет ли он в конечном итоге на A = { a 1 , , a 6 } и B = { b 1 , , b 6 } , или застрянет, не решив полностью проблему? Лучший способ выяснить это, вероятно, проверить это. Однако, по вашим параметрам, да, я ожидаю, что это будет эффективно.A={a1,,a6}B={b1,,b6}

Если мы используем метод # 1, пока | A | , | Б | не слишком велики, эвристически я ожидаю, что размеры наборов будут монотонно уменьшаться. Рассмотрим выводе A * из A , B . Каждое различие d предполагает | Б | ценности; один из них правильный, а другой | Б | - 1 можно рассматривать (эвристически) как случайные числа. Если x - это число, которое не появляется среди a , то какова вероятность того, что оно выдержит фильтрацию и будет добавлено к A|A|,|B|A ? Ну, мы ожидаембудет предложено о ( | B | - 1 ) × 36 / 251 раз в общей сложности (в среднем, со стандартным отклонением около квадратного корня из этого). Если | Б | 36 , вероятность того, что неправильный x переживет фильтрацию, должна составлять примерно p = 0,4 или около того (используя нормальное приближение для бинома с коррекцией непрерывности). (Вероятность меньше, если | B | меньше; например, для | B | =30 , я ожидаю, что p 0,25 .) Я ожидаю, что размер A будет примерно равен p ( | A | - 6 ) + 6 , что строго улучшит чрезмерное приближение, поскольку оно строго меньше | A | , Например, если | A | = | Б | = 36 , то исходя из этой эвристики я ожидаю | A | 18 , что является большим улучшением по сравнению с | A |,

Поэтому я прогнозирую, что время бега будет очень быстрым. Я ожидаю, что для сходимости будет достаточно 3-5 итераций уточнения, и, вероятно, достаточно около 6 предположений при z . Каждая операция уточнения включает, возможно, несколько тысяч операций чтения / записи в память, и мы делаем это, возможно, 20-30 раз. Итак, я ожидаю, что это будет очень быстро для указанных вами параметров. Тем не менее, единственный способ узнать наверняка - это попробовать и посмотреть, хорошо это работает или нет.


@DW: Большое спасибо за ваш длинный ответ и усилия, которые вы предприняли, чтобы напечатать так много слов !!! Согласно вашему описанию, ваш алгоритм здесь вполне корректен. И я собираюсь написать код, чтобы проверить эффективность прямо сейчас.
гость

@DW: Привет, я реализовал ваше описание на C ++. Алгоритм работает быстро и стадия очистки делает уменьшить размеры оригинальных множества A и B . Однако конвергенция кажется не такой идеальной. Фактически, для каждого предположения z D конечные размеры A и B по-прежнему превышают 10 в соответствии с моей записью программы. Наиболее частое число существующих элементов, когда A B ) не могут быть улучшены дальнейшими повторениями уточнения, равно 11, но я едва могу увидеть число ниже 10. Однако это сделало проблему разрешимой, пытаясь каждый 6- элементы, выбранные из
Гость

@DW: (Продолжение) окончательные A и B для каждого предположения z (хотя я не реализовал последний шаг на моем ПК). Общая сумма вычислений будет около 2 20 , я оцениваю. Большое спасибо!
Гость

Извините, но мой последний комментарий слишком длинный, и я должен разделить его на две части.
Гость
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.