要素が正確にインデックス±Mでない順列のカウント


13

私は最近、アルゴリズムのインタビューでこの問題を尋ねられ、解決できませんでした。

NとMの2つの値が与えられた場合、長さNの順列の数を数えなければなりません(1からNまでの数を使用)。順列の任意の数と順列のその位置の絶対差がMと等しくないようにします。

例-N = 3かつM = 1の場合、1 2 3および3 2 1は有効な順列ですが、数字3は位置2にあり、それらの差は= Mであるため、1 3 2は無効です。

NxM Dynamicプログラミングを試しましたが、繰り返しをカウントしない繰り返しを作成できませんでした。


包含/除外を使用して、おそらく式を取得できます。の場合M=0は、古典的に混乱として知られています。
— ユヴァルフィルマス

1
これは、2部グラフで完全な一致をカウントする特定のインスタンスであり、#P -completeの問題です。もちろん、この特定のケースの方が簡単かもしれません。
— ユヴァルフィルマス

私はすでに包含排除を試みましたが、進展はありませんでした。
— ジーナ

混乱を数えるためにメソッドを適応させることができました。それがあなたをどこへ連れて行くのかは分かりません。また、M = 1(たとえば)を修正し、ブルートフォースでNの小さな値(N = 1,2,3,4,5,6,7,8)の数を計算してから、対応するシーケンスを検索することもできます。でOEIS期待して、あなたは役に立つ何かを見つけること。
— DW

設定した再帰とは何ですか?「繰り返しカウント」とはどういう意味ですか?
— ラファエル

回答:


2

この質問が与えられたときに私が最初に尋ねるのは

多項式時間アルゴリズムが必要ですか?

そして、答えが「いいえ」であることを願っています。次の理由により、この問題はNP困難であると思われます。

この問題に対する自然なアプローチは、最初の数の配置を検討し、他の数を配置するための再帰式を導出することです。これは場合(つまり、混乱の数を数える場合)にうまく機能します。最初の数を配置した位置は関係ありません。すべての数に「不正な」位置が1つしかないからです。言い換えれば、このアプローチは独立したサブ問題につながります。M=0

以下のために我々が今持っていることができますように、これは、それほど単純ではありません2つの、いくつかの数字のために違法な位置を。これらの位置のどれがサブ問題に残っているかは、サブ問題の解決策に関連しています。違法な位置を共有する数字の「連鎖」がその副問題の副問題の構造を決定するために必要であるため、「違法な」位置の数を考慮するだけでは十分ではありません。したがって、このアプローチは本質的に次の副問題につながります。M>02

セット所与、集合B ⊆ Nの両方で最もサイズのN及び自然数Mは、二部グラフ上の完全マッチングの数をカウント(A 、B 、E )、(、B )∈ E場合にのみ| a − bA⊆NB⊆NNM(A,B,E)(a,b)∈E。|a−b|≠M

この問題は難しいようです。私が見るこの問題への唯一のアプローチは包含/除外であり、これは多項式時間アルゴリズムにつながりません。

数字の繰り返し配置に依存しないアプローチを検討することはできますが、どのようにこれを行うかはわかりません。(特にインタビュー中!)

もちろん、これは単なる憶測に過ぎず、巧妙なトリックが多項式時間解を与える可能性は依然としてありますが、このトリックは本当に巧妙でなければならないという説得力のある議論をしたことを望みます。

おそらく、この問題を#2-SATに減らすことでNPの困難さを示すことが可能です(違法な位置を共有する数字の「チェーン」は、真理値の選択と一致する可能性のある重要な選択のようです)私は今のところそれを行う明白な方法を見ていません。


インタビュアーが実際に指数時間アルゴリズムに満足する場合、再帰的バックトラッキングアルゴリズムを適応させてこの特定のケースを除外する順列を生成することにより、すべての可能なソリューションを生成します。


私は指数時間アルゴリズムを提供できると言いましたが、Nが1000以下の場合に機能する多項式時間解を求められました
— 。– Gena

1
さて、PPenguinからの答えが示唆するように質問を誤って思い出した/誤解しない限り、この質問は非常に要求の厳しいインタビュアー、質問自体を誤解したインタビュアー、あるいはおそらく誰も解決することを期待していないインタビュアーによって尋ねられたと思います。この質問が計算上難しくないことが判明したとしても、ほとんどの場合、インタビューは困難です。
— 離散トカゲ

M = 1は実行可能である可能性が高い(したがって、おそらく他の可能性がある)ので、見落としたことがあります。M = 1ケースの理解/評価を手伝ってもらえますか?それがために、私は別の質問をしたcs.stackexchange.com/questions/74674/...
— PPenguin

2

特定の詳細を間違って覚えていたり、質問を誤って解釈した可能性はありますか?

説明で、位置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

  1. 配置します。残りの配置の問題は、現在まで低減されるので、これは葉つの制限を有する他のすべての要素を、G (N - 2 、0 )。ig(N−2,0)

  2. 位置に配置します。これは今のための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. 場合、その後、私はそう使用して、何の配置制限がなかった私は、任意の位置の制限を変更しません。また、制限なしで1つの位置を削除したため、残りの配置はg (N − 1 、M − 1 )のようになります。i<Miig(N−1,M−1)

  2. 場合、その後、私は、配置制約を持っていた、と私たちは制限なしで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<NNN! 順列。

チェーンが許可されると非常に多くのサブグラフが可能になるため、非同型制約グラフが順列の数に対して何らかの形で等価であるという賢明な関係がない限り、これを通常の再帰的方法でどのように解決できるかは本当にわかりません。

おそらく、質問は誤解されていたと思います。おそらく、インタビュアー(回答の詳細を自分で忘れている可能性があります)でも可能です。


Why is your constraint graph directed? What do the directions mean?
— Discrete lizard

@Discretelizard The two directions (a->b vs b->a) distinguish between where the constraint came from (the '+' or the '-' version of the constraint). It's not really needed, because it doesn't matter the origin of the constraint, it just made it easier for me to visualize what was going on.
— PPenguin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.