정렬되지 않은


19

다음 문제를 도와 줄 사람이 있습니까?

K ^ 2 값 의 목록이 주어진 경우 , i = 1,2,…, K, j = 1,2,…, K (예 : K = 6 ) 인 ai,bjai,bj (mod NN ) 값을 찾고 싶습니다 . 구체적 대응 관계를 알지 못하는 차이 a_i-b_j \ pmod N (예를 들어 N = 251 )에 대응한다. 값이 때문에 A_I, b_j \ pmod에 N이 유일하게 주어진 정의되지 않은 차이가 A_I-b_j \ pmod에 N , 우리가 찾는 모든 값의 유효 할당.i=1,2,,K,j=1,2,,Ki=1,2,,K,j=1,2,,KK=6K=6K2K2aibj(modN )aibj(modN)N = 251N=251a i , b j( 모드N )ai,bj(modN)a i - b j( 모드N )aibj(modN)

확실히, 목록에서 K 2K2 숫자 의 각 순열을 시도하고 (총 K 2 !K2! 가능한 경우) 변수가 실행 불가능한 상태에서 a i , b jai,bj 를 사용하여 모듈러 방정식을 푸십시오 .

실제로,이 문제는 초기 버전의 NTRU 서명 체계 ( http://eprint.iacr.org/2001/005 ) 에 대한 암호화 분석에 관한 논문에서 발생합니다 . 그러나 저자는“단순한 역 추적 알고리즘이 하나의 솔루션을 찾는다…”(3.3 절) 한 문장 만 썼으므로 누구든지 더 많은 설명을 할 수 있을까? 더구나 저자는“모든 순환 시프트 { ( ( I + M )모드N , ( B I + M )모드N } K i = 1{((ai+M)modN,(bi+M)modN}Ki=1 또는 스왑 ( { ( N - 1 - B I , N - 1 - I ) } K가 나는 = 1 )({(N1bi,N1ai)}Ki=1) 같은 패턴의 a i - b j모드aibjmodN ”이 결과가 도움이됩니까?


7
모든 숫자에 상수 C 를 추가 하면 차이가 동일하게 유지되므로 a_i, b_j 를 복구하는 것은 불가능합니다 . a i , b jai,bjC
Yuval Filmus

1
@Yuval : 설명의 마지막 문장에 이미 포함되어 있습니다. 여러 솔루션이 존재할 수 있으므로 하나의 솔루션 만 필요하다고 생각합니다.
domotorp

2
@Yuval 도 모듈 식 이어야한다는 점을 지적하지 못해 죄송합니다 . 따라서 무한한 해결책이 없습니다. ai,bjai,bjNN
손님

@domotorp 예, 해결책 중 하나를 찾는 것이 좋습니다.
손님

1
어쩌면 OP는 , 가 게시물의 부분에서, 즉 제목이나 첫 번째 단락에서 모듈로 이라는 것을 알 수 있습니다. 상수 의 문제 는 언급 할 가치가 있습니다. 내가 읽기 시작했을 때 두 가지 모두 나를 혼란스럽게했습니다. aiaib j NbjNCC
Juan Bermejo Vega

답변:


4

다음은 K = 6K=6N = 251에 대한 제안 N=251입니다. 우리는 목록이 제공됩니다 - B의 J( 모드N )aibj(modN) . 일반성을 잃지 않고 그들 중 하나를 복용하여 시작 a 1 - b 1a1b1 . 일반성의 손실없이 B (1) = 0b1=0 , 우리의 값을 구하는 1 . 이제 또 다른 하나를 가지고, 소망는 형태임을 A가 2 - B (1) (이 일어날 확률이 5 / 35 = 1 / 7 )과 deduce 2 .a1a2b15/35=1/7a2

이 단계에서 우리는 a 1 , a 2 , b 1을 알고 a1,a2,b1있습니다. 우리의 다음 목표는 찾는 것입니다 1 - J 에 대한 J 1 . 각 후보 a i - b j 에 대해 i = 1 이면 ( a i - b j ) + ( a 2 - a 1 ) = a 2 - b j 도 목록에 있어야합니다. 만약 내가a1bjj1aibji=1(aibj)+(a2a1)=a2bj1i1 것을 그 확률 ( I - B의 j는 ) + ( 2 - 1 )(aibj)+(a2a1) 리스트에 또한 대략 인 33 / 25133/251 . 따라서 ( a i - b j ) + ( a 2 - a 1 ) 도 목록에있는후보 a i - b jaibj 를찾으면아마도 i = 1 일 것 입니다. 이런 식으로, 우리는 복구 할 수 있습니다(aibj)+(a2a1)i=1b 2b2 확실성.

이 단계에서 우리는 a 1 , a 2 , b 1 , b 2를 알고 있습니다. 우리가 b 2를 회복 한 것과 같은 방식으로 , 우리는 합리적인 확실성 으로 3 을 회복 할 수 있습니다 . 그런 다음 ( a i - b j ) + ( a 2a 1 )( a i - b ) 후보 a i - b j 를 찾아 b 3 을 복구 할 수 있습니다a1,a2,b1,b2b2a3b3aibj(aibj)+(a2a1)j ) + ( a 3a 1 ) 이 모두 목록에 있습니다. 우리는 더 가지고 있기 때문에들, 우리의 실패 확률이 상당히 내려갑니다. 우리는 계속해서 b 3 , a 4 , b 4 , a 5 , b 6 , a 6 , b 6을 찾습니다.(aibj)+(a3a1)ab3,a4,b4,a5,b6,a6,b6

이 알고리즘의 어느 시점에서든, 우리는 무언가 잘못된 것을 추측했을 수 있으며, 결국 모순을 초래할 것입니다 (예를 들어, 좋은 후보 a i - b j 는 없습니다 ). 그런 다음 역 추적하고 또 다른 가능성을 시도합니다. 모든 가능성을 다 써 버리면 다시 역 추적하고 다른 가능성이있는 알고리즘의 다른 단계를 시도합니다. 등등.aibj

실제로이 알고리즘을 프로그래밍하는 것이 좋습니다. 역 추적을 올바르게 구현하는 방법을 이해하는 유일한 방법 일 것입니다. 이 알고리즘이 실제로 작동하는지 여부를 알 수있는 유일한 방법이기도합니다.


감사합니다. 이해를 돕기 위해이 역 추적을 코딩하겠습니다. 아마도 그 원본 논문의 저자는 "백 트랙"을 언급했기 때문에 비슷한 방법을 사용했을 것입니다.
손님

답변에 내 댓글을 올리는 것을 잊어 버려서 죄송합니다. 또한 제안한 방법을 C ++로 구현했습니다. 결론은 알고리즘이 잘 작동하고 솔루션 중 하나를 매우 빠르게 찾을 수 있다는 것입니다 (내 PC에서 1 초 미만). 그리고 이번에는 역 추적 절차를 더 잘 이해할 수 있습니다. 대단히 감사합니다!
손님

마지막 코멘트에서 왜 "@Yuval"을 할 수 없습니까?! 죄송하지만 여러 번 시도했습니다.
손님

아마도 당신은 온라인으로 코드를 공유하여 논문을 읽는 다른 사람들이 그 코드에 접근 할 수있게 할 것입니다.
Yuval Filmus

5

업데이트 : 아래 설명은 다른 문제에 대한 것입니다 (두 별개의 세트 사이의 페어 단위 거리가 아닌 세트의 모든 페어 단위 거리가 있음). 밀접하게 관련되어 있기 때문에 어쨌든 남겨 두겠습니다.

이 문제를 벨트 웨이 문제라고하며 일반적인 d- torus 임베딩 문제 의 특수한 경우입니다 . 또한 거리 차이가 절대적 (모듈로가 아닌 숫자) 인 회전익 문제와 밀접한 관련이 있습니다.d

벨트 웨이 문제가 다중 시간 알고리즘을 허용하는지 여부는 알려져 있지 않습니다. 관련 질문에 대한 다양한 의사 폴리 시간 알고리즘이 있습니다. 가장 좋은 참고 자료는 (Lala an Old One) Lemke, Skiena 및 Smith 의 논문 입니다.


1
이 문제가 다르다고 생각합니다. 벨트 웨이 문제에서 우리는 모든 페어 단위 거리를 알고 있습니다. 여기서 우리는 다른 그룹에있는 두 점 사이에서만 거리를 알고 있습니다. 정보가 적은 것처럼 보이지만 실제로는 문제를 해결하는 데 도움이 될 수 있습니다.
domotorp

아 예. 이분 그래프입니다. 좋은 지적.
Suresh Venkat

이분 그래프? 같은 것. 어쩌면 나는 이런 식으로 문제를 시도해야하지만, 지금은 구체적인 생각의 기차가 없습니다.
손님

3

여기에 문제를 해결하기에 충분한 발판이 될 것입니다.

두 개의 쌍별 차이로 발생 하는 a 1 - b 1 , a 1 - b 2 , a 2 - b 1 , a 2 - b 2의 네 가지 차이점이 있다고 가정합니다.a1b1a1b2a2b1a2b2의 두 개의 B '들. 이것을사중사분면이라고합니다. 우리는 사소한 관계가 없습니다.ab

( a 1 - b 1 ) - ( a 1 - b 2 ) = ( a 2 - b 1 ) - ( a 2 - b 2 )( 모드N ) .

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

이 관계를 사용하여 K 2 목록에서 잠재적 인 4 중주를 식별 할 수 있습니다 . 예를 들어, 목록에서 4 가지 차이점을 선택하십시오. 만약 그들이 위의 관계를 만족시키지 않는다면, 사중주 구조에서 분명히 일어나지 않습니다. 그들이 관계를 만족 시키면 사중주에서 생길 수 있습니다.K2

여기에서 여러 가지 방법을 취할 수 있지만 이것으로 충분하다고 생각합니다.

특히 매개 변수 설정 예제의 경우 4 중주 인식에 대한 위의 테스트에서 오 탐지가 너무 많지 않기 때문에 문제가 매우 쉽다고 생각합니다. 우리 모두의 ( K 24 ) 목록에서 4 가지 차이점을 선택하는 방법에는 ( K(K24)2 ) 2모두 관계를 만족 중주 ()와 나머지 확률의 관계를 만족하는 비 중주 (있는1/N을경험적). 그러므로 우리는에 대해 볼 것으로 예상((K2(K2)21/N4 ) ( K2 ) 2)/N오 탐지, 즉 사중이 아니더라도 테스트를 통과하는 4 튜플. 귀하의 매개 변수의 경우 이는 225 사중주 및(58905225)/251234기타 오 탐지가 있음을 의미합니다. 따라서 테스트를 통과 한 4 개의 튜플 중 약 절반이 실제로 4 중주입니다. 이것은 위의 테스트가 4 중주를 인식하는 아주 좋은 방법임을 의미합니다. 사중주를 인식 할 수있게되면 실제로 차이 목록의 구조를 복구하기 위해 마을로 갈 수 있습니다.((K24)(K2)2)/N(58905225)/251234


@DW : 감사합니다. 그러나 가능한 모든 4 중주 (총 225 + 234 = 459)가 발견되면 다음 단계가 궁금합니다. 겹치지 않는 3 중주를 검색하고 가능한 솔루션을 구성 할 수 있는지 테스트해야합니까? 이것을 효율적으로 달성하는 방법? 겹치는 부분이 많지 않기 때문에 어려울 수도 있습니다.
손님

@aguest, 좋은 질문! 당시 내가 생각했던 것을 기억할 수 없습니다. 나는 하나의 접근 방식이 하나의 사중주로 시작하고 두 가지 차이점 (예 : a 1 , a j , b 1 , b 2 에서 j 2 ) 에서 겹치는 다른 모든 것을 찾으라고 생각한다고 생각합니다. 거기에서 어디로 가야할지 모릅니다 (가짜 긍정을 걸러내는 방법). a1,aj,b1,b2j2
DW

3

{ a 1 , , a 6 } 사이에 나타날 수없는 숫자를 반복적으로 찾는 것에 따라 다른 접근 방식이 있습니다 . 설정된 전화 의 오버 근사 A는 우리가 알고있는 경우의를 { 1 , ... , 6 } . 마찬가지로, 우리가 { b 1 , , b 6 } B 라는 것을 알고 있다면 Bb 의 과대 근입니다 . 분명히 작은 A{a1,,a6}Aa{a1,,a6}ABb{b1,,b6}BA과대 근사가 유용할수록 B에 대해서도 마찬가지입니다 . 내 접근 방식은 이러한 초과 근사를 반복적으로 수정하는 것, 즉 이러한 세트의 크기를 반복적으로 줄이는 것입니다 (더 많은 값을 불가능한 것으로 배제함에 따라).B

The core of this approach is a method for refinement: given an over-approximation AA for the aa's and an over-approximation BB for the bb's, find a new over-approximation AA for the aa's such that AAAA. In particular, normally AA will be smaller than AA, so this lets us refine the over-approximation for the aa's.

By symmetry, essentially the same trick will let us refine our over-approximation for the bb's: given an over-approximation AA for the aa's and an over-approximation BB for the bb's, it will produce a new over-approximation BB for the bb's.

So, let me tell you how do refinement, then I'll put everything together to get a full algorithm for this problem. In what follows, let DD denote the multi-set of differences, i.e., D={aibj:1i,j6}D={aibj:1i,j6}; we'll focus on finding a refined over-approximation AA, given A,BA,B.

How to compute a refinement. Consider a single difference dDdD. Consider the set d+B={d+y:yB}d+B={d+y:yB}. Based on our knowledge that BB is an over-approximation of the bb's, we know that at least one element of d+Bd+B must be an element of {a1,,a6}{a1,,a6}. Therefore, we can treat each of the elements in d+Bd+B as a "suggestion" for a number to possibly include in AA. So, let's sweep over all differences dDdD and, for each, identify which numbers are "suggested" by dd.

Now I'm going to observe that the number a1a1 is sure to be suggested at least 6 times during this process. Why? Because the difference a1b1a1b1 is in DD, and when we process it, a1a1 will be one of the numbers it suggests (since we're guaranteed that b1Bb1B, (a1b1)+B(a1b1)+B will surely include a1a1). Similarly, the difference a1b2a1b2 appears somewhere in DD, and it'll cause a1a1 to be suggested again. In this way, we see that the correct value of a1a1 will be suggested at least 6 times. The same holds for a2a2, and a3a3, and so on.

So, let AA be the set of numbers aa that have been suggested at least 6 times. This is sure to be an over-approximation of the aa's, by the above comments.

As an optimization, we can filter out all suggestions that are not present in AA immediately: in other words, we can treat the difference dd as suggesting all of the values (d+B)A(d+B)A. This ensures that we will have AAAA. We are hoping that AA is strictly smaller than AA; no guarantees, but if all goes well, maybe it will be.

Putting this together, the algorithm to refine A,BA,B to yield AA is as follows:

  1. Let S=dD(d+B)AS=dD(d+B)A. This is the multi-set of suggestions.

  2. Count how many times each value appears in SS. Let AA be the set of values that appear at least 6 times in SS. (This can be implemented efficiently by building an array aa of 251 initially, initially all zero, and each time the number ss is suggested, you increment a[s]a[s]; at the end you sweep through aa looking for elements whose value is 6 or larger)

A similar method can be built to refine A,BA,B to get BB. You basically reverse things above and flip some signs: e.g., instead of d+Bd+B, you look at d+Ad+A.

How to compute an initial over-approximation. To get our initial over-approximation, one idea is to assume (wlog) that b1=0b1=0. It follows that each value aiai must appear somewhere among DD, thus the list of differences DD can be used as our initial over-approximation for the aa's. Unfortunately, this doesn't give us a very useful over-approximation for the bb's.

A better approach is to additionally guess the value of one of the aa's. In other words, we assume (wlog) that b1=0b1=0, and use A=DA=D as our initial over-approximation of the aa's. Then, we guess which one of these 36 values is indeed one of the aa's, say a1a1. That then gives us an over-approximation B=a1DB=a1D for the bb's. We use this initial over-approximation A,BA,B, then iteratively refine it until convergence, and test whether the result is correct. We repeat up to 36 times, with 36 different guesses at a1a1 (on average 6 guesses should be enough) till we find one that works.

A full algorithm. Now we can have a full algorithm to compute a1,,a6,b1,,b6a1,,a6,b1,,b6. Basically, we derive an initial over-approximation for AA and BB, then iteratively refine.

  1. Make a guess: For each zDzD, guess that a1=za1=z. Do the following:

    1. Initial over-approximation: Define A=DA=D and B=zDB=zD.

    2. Iterative refinement: Repeatedly apply the following until convergence:

      • Refine A,BA,B to get a new over-approximation BB of the b's.
      • Refine A,B to get a new over-approximation A of the a's.
      • Let A:=A and B:=B.
    3. Check for success: If the resulting sets A,B each have size 6, test whether they are a valid solution to the problem. If they are, stop. If not, continue with the loop over candidate values of z.

Analysis. Will this work? Will it eventually converge on A={a1,,a6} and B={b1,,b6}, or will it get stuck without completely solving the problem? The best way to find out is probably to test it. However, for your parameters, yes, I expect it will be effective.

If we use method #1, as long as |A|,|B| are not too large, heuristically I expect the sizes of the sets to monotonically shrink. Consider deriving A from A,B. Each difference d suggests |B| values; one of them correct, and the other |B|1 can be treated (heuristically) as random numbers. If x is a number that does not appear among the a's, what is the probability that it survives the filtering and is added to A? Well, we expect a to be suggested about (|B|1)×36/251 times in total (on average, with standard deviation about the square root of that). If |B|36, the probability that a wrong x survives the filtering should be about p=0.4 or so (using the normal approximation for the binomial, with continuity correction). (The probability is smaller if |B| is smaller; e.g., for |B|=30, I expect p0.25.) I expect the size of A to be about p(|A|6)+6, which will strictly improve the over-approximation since it is strictly smaller than |A|. For instance, if |A|=|B|=36, then based upon these heuristics I expect |A|18, which is a big improvement over |A|.

Therefore, I predict that the running time will be very fast. I expect about 3-5 iterations of refinement to be enough for convergence, typically, and about 6 guesses at z should probably be enough. Each refinement operation involves maybe a few thousand memory reads/writes, and we do that maybe 20-30 times. So, I expect this to be very fast, for the parameters you specified. However, the only way to find out for sure is to try it and see if it works well or not.


@DW: Thank you very much for your long answer and the effort you took to type so many words!!! According to your description, your algorithm here is quite correct. And I’m going to code it to test the efficiency right now.
a guest

@DW: Hi, I’ve implemented your description in C++. The algorithm runs fast and the refinement step does reduce the sizes of original sets A and B. However, the convergence seems to be not so perfect. In fact, for each guess zD, the final sizes of A and B are still more than 10 according to my record output by the program. The most frequent number of existing elements when A (and B) can not be improved by further repetitions of refinement is 11, but I can hardly see a number below 10. However, this has made the problem solvable by trying each 6-elements chosen from
a guest

@DW: (Cotinued)final A and B for each guess z (although I didn’t implement the last step on my PC). The total amount computation will be about 220, I estimate. Thank you very much!
a guest

Sorry, but my last comment is too long, and I have to split it into two.
a guest
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.