Vertical Sticksチャレンジへのアプローチ方法


23

この問題はinterviewstreet.comから取られています

セグメント端点がおよびようなラインセグメントを表す整数の配列が与えられます。各セグメントの上部から水平光線が左に発射され、この光線が別のセグメントに触れるかy軸に当たると停止すると想像してください。n個の整数配列を作成しここで、はセグメント最上部からの光線ショットの長さに等しくなります。を定義します。Y={y1,...,yn}ni(i,0)(i,yi)v1,...,vnviiV(y1,...,yn)=v1+...+vn

たとえば、Y=[3,2,5,3,3,4,1,2]場合、[v1,...,v8]=[1,1,3,1,1,3,1,2]、次の図に示すように:

ここに画像の説明を入力してください

各順列、を計算できます。我々は一様にランダム順列を選択した場合の、の期待値は何である?[ 1 N ] V Y P 1Y 、PのNp[1,...,n]V(yp1,...,ypn)[ 1 N ] V Y P 1Y 、PのNp[1,...,n]V(yp1,...,ypn)

素朴なアプローチを使用してこの問題を解決する場合、効率的ではなく、実質的に永久に実行されます。各スティックのの予期される値を予期せずに計算することでこの問題に対処できると思いますが、この問題に対する別の効率的なアプローチがあるかどうかを知る必要があります。どの基準に基づいて、各スティックの期待値を個別に計算できますか?v in=50vi


期待の線形性を使用できます。この質問はmath.SEで、おそらくより適切である

回答:


23

別の問題を想像:あなたは場所にあった場合に等しい高さのスティックスロット次いでスティック間の予想距離(第スティックと概念的スロットとの間の予想距離、最後スティックの間の予想距離及び概念的スロット)であるがあるので長さに合うようにギャップ。n 0 n + 1 n + 1kn0n+1 k+1n+1n+1k+1k+1n+1

この問題に戻ると、特定のスティックは、それ自体を含むスティックの数が同じかそれ以上であることに関心があります。この数が場合、予想される左へのギャップも です。n + 1kn+1k+1

そのため、アルゴリズムは各スティックのこの値を見つけて、期待値を加算するだけです。たとえば、高さから始めて、それ以上の高さのスティックの数はしたがって、期待値はです。[ 5 7 1 5 5 2 8 7 ] 9[3,2,5,3,3,4,1,2][5,7,1,5,5,2,8,7]96+98+92+96+96+93+99+98=15.25

これはプログラムが簡単です。たとえば、Rの単一行

V <- function(Y){ (length(Y) + 1) * sum( 1 / (rowSums(outer(Y, Y, "<=")) + 1) ) }

元の問題のサンプル出力の値を与える

> V(c(1,2,3))
[1] 4.333333
> V(c(3,3,3))
[1] 3
> V(c(2,2,3))
[1] 4
> V(c(10,2,4,4))
[1] 6
> V(c(10,10,10,5,10))
[1] 5.8
> V(c(1,2,3,4,5,6))
[1] 11.15

1
とても興味深い。スティック間の予想距離がである理由を少し詳しく説明してください。(少なくとも私には)計算方法が明確ではないためです。ありがとうございました。(n+1)/(k+1)
M.アラガン

私の最初の場合、高さが同じであるスティックでは、ギャップで埋められる長さがあるので、平均ギャップは一方をもう一方で割ることによって得られます。これは、特定のスティックの前(および最後のスティックからまで)に予想されるギャップ(または水平光線)です。特定のスティックと同じかそれより高いスティックを考慮して、元の質問に移動します。n +kk + 1 n + 1n+1k+1n+1
ヘンリー

非常に素晴らしい。これは私のソリューションを完全に包含しています。すべての高さが異なる場合、。E[V]=k=1nn+1k+1=(n+1)(Hn+11)=(n+1)Hnn
-JeffE

2
@Henry:kスティックの高さが等しい、nスロットの問題の場合、平均長=(n + 1)/(k + 1)の理由は何ですか?k個のスティックがあり、n個のスロット内のk個のスティックのすべての順列でそれらのスティックの1つの平均光線長を知りたい場合、実際には結果と同じですが、理由はわかりません。ロジックがありますか、または1スティックとnスロット、次に2スティックとn、スロット、... kスティック、nスロットについて説明したことを数学的に推論しましたか?(n + 1)/( k + 1)?n + 1スロットを追加することに言及しています。それは非常に直感に反するようです。
アレクサンドル

3
それは私が以前に扱った質問です。席と人の円卓から始めて、ランダムに着席させます。個人間の距離は明らかに平均 iid です。人のテーブルを壊し、その人とその席を削除して、テーブルをまっすぐにします。ここで、席で人ですが、同じiidプロパティと同じ平均を持つ質問があります。(の珍しい韻を見つけるk + 1 n + 1 /k + 1 n + 1 番目の n kn+1k+1(n+1)/(k+1)n+1thnk
ヘンリー

11

ヘンリーのソリューションは、これよりもシンプルで一般的です!


E[V]は、ランダム化クイックソートによって実行される比較の予想数の約半分です。

スティックの高さが異なると仮定すると、次のように閉形式の解を導き出すことができます。E[Y]

いずれの指標について、聞かせて場合とそう。(の要素であればありませんその後、別個あることを意味ある厳密のすべての要素よりも大きい)。X I 、J = 1 のY J = 最大{ Y IY j } X i j = 0 Y X i j = 1ijXij=1Yj=max{Yi,...,Yj}Xij=0YXij=1 { Y iY j 1 }Yj{Yi,,Yj1}

次に、任意のインデックスに対して、(その理由がわかりますか?)があるため、 v j = j i = 1 X i j V = n j = 1 v j = n j = 1 j i = 1 X i jjvj=i=1jXij

V=j=1nvj=j=1ni=1jXij.

期待の線形性は

E[V]=E[1ijnXij]=1ijnE[Xij].

ためのいずれかであり、又は、我々は。 0 1Xij01E[Xij]=Pr[Xij=1]

最後に、これが重要なビットですの値は区別され、一様ため、サブセット各要素は、そのサブセットの最大要素になる可能性が等しくなります。したがって、。(の要素が明確でない場合、残っています。){ Y IY j } Pr [ X i j = 1 ] = 1Y{Yi,...,Yj} YのPr[XI、J=1]1Pr[Xij=1]=1ji+1YPr[Xij=1]1ji+1

そして今、私たちはいくつかの数学を持っています。 ここで、は番目の調和数を示します。

E[V]=j=1ni=1jE[Xij][linearity]=j=1ni=1j1ji+1[uniformity]=j=1nh=1j1h[h=ji+1]=h=1nj=hn1h[1hjn]=h=1nnh+1h=((n+1)h=1n1h)(h=1n1)=(n+1)Hnn
Hnn

これで、時間で(浮動小数点精度まで)を計算するのは簡単です。O n E[V]O(n)


これは、スティックが明確な高さであると仮定していますか?
アルヤバタ

はい、明確な高さを想定しています。(どうやら、私は質問を読み違えたようです。)ランダム化されたクイックソートとの同値性は、関係がある場合でも有効ですが、閉じた形式のソリューションではありません。
JeffE

4

コメントで述べたように、期待の線形性を使用できます。

並べ替えます:。yy1y2yn

各について、の期待値を考慮します。yivi=E[vi]

その後、E[i=1nvi]=i=1nE[vi]

を計算する簡単で素朴な方法の1つは、最初に位置を修正することです。言います。E[vi]yij

ここで、位置値がある確率を計算します。j1yi

次に、値あり、値がある確率j1<yij2yi

等々で、を計算することができます。E[vi]

おそらく、実際に数学を実行して式を取得することで、おそらくそれを高速化できます(ただし、私は自分で試したことはありません)。

お役に立てば幸いです。


3

@Aryabhataの答えを拡張する:

修正し、アイテムが位置にあると仮定します。高さの正確な値は重要ではありません。重要なのは、アイテムが以上であるかどうかです。したがって、アイテムのセットを考える、ここで 1である場合、及び そうでなければ0です。のy IiyijyiZ(i)zk(i)ykyizk(i)

集合順列は、集合対応する順列を誘導します。たとえば、セットの次の順列を考えてみてください: "01000(1) "。アイテムは、位置角括弧であり、「」で示されるアイテムは重要ではありません。Z(i)YZ(i)zi(i)j

の値は、1に左側にある連続ゼロの実行の長さを加えたものです。セットから最大ビットを選択した場合、は実際には1に連続するツェルの予想される長さを加えたものになります。(置換なし)。これは幾何学的分布を連想させますが、置換(および描画の境界数)がない場合を除きます。位置のセット統一された選択として、でも同様に想定されます。z i i E v i vizi(i)E(vi)j1Z(i)zi(i){ 1 n }j {1,,n}

これが(これらの行に沿っ)計算されると、@ Aryabhataの答えの行をたどることができます。


-2

私はあなたがアルゴリズムを探しているように見えるタグから、あなたが何を擁護するのか本当に理解していません。

もしそうなら、予想される時間の複雑さは何ですか?「ナイーブアプローチを使用してこの問題を解決する場合、n = 50で効率的でなく、実質的に永久に実行されます。」あなたの素朴なアプローチは指数関数的な時間でそれを解決するように思えます。

私は念頭に置いてO(n ^ 2)アルゴリズムを持っています。

assume int y[n], v[n] where v[i] initialized with 1; as described in the question
for (i=1;i<n;i++) 
   for ( j=i-1 ; j>=0 && y[j]<y[i] ; j--) v[i]++;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.