특정 세부 사항을 기억하거나 질문을 잘못 해석했을 가능성이 있습니까?
당신의 설명에서, 요소 위치에서 (b)은 제한됩니다 - B ≠ ± M .
그러나 그들이 단지 차이가 제한되었다는 것을 의미한다면 : a - b ≠ M 이면
문제는 다루기 쉬운 것처럼 보입니다.aba−b≠±M
a−b≠M
더 간단한 문제를 해결하고 더 큰 문제를 자유롭게 해결할 수있는 방법으로 일반화하려고했습니다. 그러나 이것은 왜 재귀 적 접근 방식이 효과가 없을 가능성을 분명히 해주었습니다.
함수 고려 에 1로 표시된 요소 목록의 순열의 수를 제공 N 원소, A는 위치에서 (B) 을 만족하는 (제 1 위치 1) - B ≠ M 및 B가 - ≠ P .f(N,M,P)Naba−b≠Mb−a≠P
이를 시각화하기 위해 두 가지 제약 조건으로 분리하면 과 P 가 이러한 제한을 개별적으로 이동할 수 있습니다 .MP
1 2 3 4 5 M=0, restricted values for each position
. . . . . (positions in list)
1 2 3 4 5 P=0, restricted values for each position
3 4 5 M=2, restricted values for each position
. . . . . (positions in list)
1 2 3 4 P=1, restricted values for each position
편의상 일 때 순열에 제한을 두지 않도록 g ( N , M ) = f ( N , M , P )를 정의하십시오 . 마찬가지로, M ≥ N 인 경우 g ( N , P ) = f ( N , M , P ) 이므로 순열에 제한이 없습니다.P≥Ng(N,M)=f(N,M,P)g(N,P)=f(N,M,P)M≥N
특별한 경우에 에서 제약 M 및 P는 하나가 무시 될 수 있도록 기록 우리 있도록, 동일 F 환산 g :
F ( N , 0 , 0 ) = g ( N , 0 ) .M=P=0MPfg
f(N,0,0)=g(N,0).
문제의 대칭에서 :
f(N,M,P)=f(N,P,M)
먼저 풀고 더 일반적인 f ( N , M , P ) 를 다루 겠습니다 .g(N,M)f(N,M,P)
들면 , 각각의 요소는 하나 개의 배치 제한을 갖는다 (그리고 제한 구별된다). 그래서 어떤 원소 i를 선택하면 , 우리는 그것을 어떤 위치 j 에 놓을 것입니다 . 있습니다 N - 1 의 선택을위한 다른 가능성 j는 .M=0ijN−1j
이 선택은 요소 의 제한된 위치를 제거하는 반면, 다른 ( N - 2 ) 요소는 여전히 하나의 제한이 있습니다. j 의 배치는 두 가지 옵션으로 나눌 수 있습니다.j(N−2)j
에 배치 . 이로 인해 다른 모든 요소에 한 가지 제한이 있으므로 나머지 배치 문제는 이제 g ( N - 2 , 0 )으로 줄어 듭니다 .ig(N−2,0)
위치에 배치하십시오 . 이것은 j 에 대해 하나의 배치 제한을 제공 하므로 각 요소에는 하나의 제한이 있으며 나머지 배치 문제는 g ( N - 1 , 0 )으로 줄어 듭니다.≠ijg(N−1,0)
따라서 이것은 재귀 공식을 제공합니다 :
g(N,0)=(N−1)[g(N−2,0)+g(N−1,0)]
손으로 간단한 상황을 보면서 기본 사례를 얻을 수 있습니다.
g(1,0)=0, g(2,0)=1
이것은 일반적인 배열 재귀 공식입니다.
나는 누군가가 그 자리에서 이것을 떠 올릴 것이라고 상상할 수 없지만, 이것에 대한 닫힌 양식 솔루션이 있음이 밝혀졌습니다 (자세한 내용은 배열 위키 기사 참조).
g(N,0)=⌊n!e+12⌋
들면 은 임의의 게재에 대한 제한은 없다 :M≥N
(M≥N)⟹g(N,M)=N!
함께 , 제 M의 요소에는 제한이 없으며, 나머지 요소들은 하나 개의 배치를 제한 할 것이다. 위치와 관련하여 마지막 M 위치는 모든 숫자를 허용합니다.0<M<NMM
마지막 위치에서 요소 선택하십시오 . 나머지 게재 위치는 다음과 같은 두 가지 가능성이 있습니다.i
경우 , 다음, 난 너무 사용하여, 배치 제한이 없었 내가 어떤 위치에 대한 제한을 변경하지 않습니다. 또한 제한없이 한 위치를 제거 했으므로 나머지 배치는 g ( N - 1 , M - 1 ) 처럼 보입니다 .i<Miig(N−1,M−1)
i>=Miig(N−1,M)
(0<M<N)⟹g(N,M)=(M−1)g(N−1,M−1)+(N−M+1)g(N−1,M)
This finishes the recursive solution for g.
When M+P≥N, the first N−M positions have a single number restriction on them, the last N−P positions have a single number restriction on them, and the middle M+P−N positions have no restrictions. This is just like the g(N,M+P−N) case.
(M+P)≥N⟹f(N,M,P)=g(N,M+P−N)
We have handled all cases currently except 0<M<N and 0<P<N such that M+P<N. This is where some elements have multiple restrictions. Because of the symmetry in f, we can consider 0<M≤P<N without loss of generality.
The first P positions will have a single restriction, then N−M−P positions with two restrictions, then the last M positions have a single restriction.
Looking at the elements, the first M elements will have a single restriction, then N−M−P elements have two restrictions, then the last P elements have a single restriction.
However this is where we must end. As there is no way forward with this method.
I separated the two constraints because I could see that placing a number in a selected position could unbalance how many single constrained positions there were for the "+" constraint and the "-" constraint of a−b≠±M.
But in the more general problem, removing a position by placing a number in it, does not always result in a subproblem that is described with f(N,M,P).
To visualize these constraints on the permutation, consider a directed graph with 2N nodes, one set of N labeled {A1,A2,...,AN} and another labelled {B1,B2,...,BN}. A directed edge (Ai,Bj) exists if i−j=M, and directed edge (Bj,Ai) exists if j−i=M and M≠0.
The set of A nodes can be considered the numbers we are permuting in some list, and B nodes their possible positions. This graph represents the constraints. There will be no cycles in the graph. It will always be disjoint nodes or chains of length one or more.
So we want a function which takes as input this constraint graph, and outputs the number of permutations that satisfy the constraints.
In the case where M+P≥N, the graph is just disjoint nodes and single edges. So removing an A and B node will give a subgraph that is also disjoint nodes and single edges.
However for 0<M≤P<N, the graph can have long chains. To place a number in an available position, regardless of whether we fix the node or the position, we need to consider all the subgraphs of possible ways to build that. All the different ways of breaking up the chains will result in a "recursion" that is on the order of N parts each round, and thus can't expect much if any savings compared to checking all N! permutations.
Because there are so many possible subgraphs once chains are allowed, I really don't see how this can be solved with the usual recursive methods unless there is a clever relation saying how non-isomorphic constraint graphs are somehow equivalent for the number of permutations.
I think most likely, the question was misinterpreted. Possibly even by the interviewer (who may have forgotten the answer details themselves).