特定の詳細を間違って覚えていたり、質問を誤って解釈した可能性はありますか?
説明で、位置bの要素aはa − b ≠ ± Mに制限されています。
しかし、差が制限されていることを意味している場合:a − b ≠ M、
問題は扱いやすいように見えます。aba − b ≠ ± M
a − b ≠ M
私はそのより単純な問題を解決し、より大きな問題を解決するのにある程度の自由を与えることができるように一般化しようとしました。しかし、これは、再帰的アプローチが機能しない可能性が非常に低い理由を明確にしただけで、最後に説明します。
関数考える要素のリストの順列の数が1標識与えるN元素は、A位置でのB(最初の位置は1である)を満たす- B ≠ M、及びbは- a ≠ Pf(N、M、P)Naba−b≠Mb−a≠P。
これを視覚化するために、2つの制約に分けることで、と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 )。同様に、G (N 、P )= F (N 、M 、P )ときM ≥ Nそれは順列に制限を配置しないこと。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)
以下のために、各要素は、1つの配置制約を有する(及び制限事項が異なっています)。したがって、要素iを選択して、位置jに配置します。jの選択にはN − 1の異なる可能性があります。M=0ijN−1j
この選択により、要素制限位置が削除されましたが、他の(N − 2 )要素にはまだ1つの制限があります。jの配置を2つのオプションに分割できます。j(N−2)j
配置します。残りの配置の問題は、現在まで低減されるので、これは葉つの制限を有する他のすべての要素を、G (N - 2 、0 )。ig(N−2,0)
位置に配置します。これは今のための1つの配置制約与えるjは、そのため各要素は、1つの制限があり、残りの配置問題がに還元される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
これは、通常の混乱の再帰式です。
誰かがその場でこれを思い付くとは想像できませんが、このための閉じた形式のソリューションがあることもわかります(詳細については、混乱 wikiの記事を参照してください)。
g(N,0)=⌊n!e+12⌋
以下のために、配置のいずれかに制限はありません。M≥N
(M≥N)⟹g(N,M)=N!
で、最初のM個の要素は、制限はありませんし、残りの要素は、一つの配置の制限を有することになります。それは位置の用語、最後のM0<M<NMMポジションはすべての数字を許可します。
最後の位置については、要素選択します。残りの配置は次の2つの可能性があります。i
場合、その後、私はそう使用して、何の配置制限がなかった私は、任意の位置の制限を変更しません。また、制限なしで1つの位置を削除したため、残りの配置はg (N − 1 、M − 1 )のようになります。i<Miig(N−1,M−1)
場合、その後、私は、配置制約を持っていた、と私たちは制限なしで1位を取り除きます。iが配置されているため、これまで制限されていた位置に残りの番号を受け入れることができます。したがって、残りの配置はg (N − 1 、M )のようになります。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)
これでの再帰解が終了します。g
場合、最初のN - Mの位置がその上に単数制限、最後有するNを- Pの位置は、それらの上に単一の数値制限を有し、中央M + P - Nの位置には制限がありません。これは、g (N 、M + P − N )の場合とまったく同じです。M+P≥NN−MN−PM+P−Ng(N,M+P−N)
(M+P)≥N⟹f(N,M,P)=g(N,M+P−N)
現在、M + P < Nのようなおよび0 < P < Nを除くすべてのケースを処理しています。これは、いくつかの要素に複数の制限がある場所です。そのための対称性のF、我々は考えることができます0 < M ≤ P < Nの一般性を失いません。0<M<N0<P<NM+P<Nf0<M≤P<N
最初のポジションには1つの制限があり、N - M - Pポジションには2つの制限があり、最後のMポジションには1つの制限があります。PN−M−PM
要素を見ると、最初の要素には1つの制限があり、N − M − P要素には2つの制限があり、最後のP要素には1つの制限があります。MN−M−PP
ただし、ここで終了する必要があります。この方法を使用する方法はありません。
選択した位置に数値を配置すると、の「+」制約と「-」制約の単一の制約位置の数が不均衡になることがわかったため、2つの制約を分離しました。a−b≠±M
しかし、より一般的な問題では、数字を配置して位置を削除しても、記述される副問題が常に発生するとは限りません。f(N,M,P)
順列にこれらの制約を視覚化するために、用いて有向グラフを考慮ノード、一組のNは標識{ A 1、A 2、。。。、A N }と他の標識{ B 1、B 2、。。。、B N }。i − j = Mの場合、有向エッジ(A i、B j)が存在します2NN{A1,A2,...,AN}{B1,B2,...,BN}(Ai,Bj)i−j=M、およびj − i = MおよびM ≠ 0の場合、有向エッジが存在します。(Bj,Ai)j−i=MM≠0
ノードのセットは、あるリストで並べ替えている数と見なすことができ、Bノードはそれらの可能な位置です。このグラフは制約を表しています。グラフにはサイクルはありません。常に独立したノードまたは1つ以上の長さのチェーンになります。AB
したがって、この制約グラフを入力として受け取り、制約を満たす順列の数を出力する関数が必要です。
M+P≥N、グラフだけ互いに素ノードと単一のエッジです。そのため、AノードとBノードを削除すると、互いに素なノードと単一のエッジであるサブグラフが得られます。
0<M≤P<NN! 順列。
チェーンが許可されると非常に多くのサブグラフが可能になるため、非同型制約グラフが順列の数に対して何らかの形で等価であるという賢明な関係がない限り、これを通常の再帰的方法でどのように解決できるかは本当にわかりません。
おそらく、質問は誤解されていたと思います。おそらく、インタビュアー(回答の詳細を自分で忘れている可能性があります)でも可能です。