1から100までの2つの異なる整数をランダムに選択します。大きい数が小さい数の2倍になる確率はどのくらいですか?


8

私は最近、データサイエンスポジションのHackerRankテストを受けましたが、この質問は間違っていました。に来ました1/200。方法は次のとおりです。

これを実現する50の組み合わせがあります。(つまり、{1,2}、{2,4}、{3,6} ... {50,100})。特定の番号が選択される確率は1/100です。特定のセットが選択される確率は(1/100 * 1/100)です。

50セットあるので、

P=50*(1/100)*(1/100)=1/200

もちろん、1と100が含まれていると想定しています。しかし、これは間違った答えでした。誰かが私の間違いを理解するのを手伝ってくれる?


4
エラーの鍵となるのは「明確」という言葉です。
Matthew Drury

ああ!それで、50 *(1/100)*(1/99)である必要がありますか?
Jo Bennet、

4
「100」を「3」に置き換えるなど、問題のより小さなバージョンで解決してください。これは、すべてのペアを完全に列挙することによって行います。あなたはすぐに正しい答えは100何のためにあるのか確認する必要があり
whuber

回答:


7

あなたの最初の間違いは50の結果があるということです、実際には100があります(編集:明確化のために以下のコメントを参照してください)。これは、(1,2)と(2,1)が2つの別々の結果の結果であるためですが、いずれの場合も、大きい数は小さい数のちょうど2倍です。

したがって、これを取得するための可能な方法の合計は、実際にはセットによって与えられます。

{(1,2)、(2,1)、(2,4)、(4,2)、...、(50,100)、(100,50)}

これは100の可能な結果のリストです。

可能な結果の総数は100×99

最初に選択する可能性のある数は100個あり、2番目の数は99個です。

したがって、答えは次のようになります。

P=100100×99=199

同じ引数を使用して、それから数字を選択するより一般的な場合の確率ことを証明することは簡単であるここで、nは正の偶数です。12

P=11


1
+1。ただし、OPは結果のカウントでミスを犯していないことに注意してください。順序付けされたペアを数えるのに対し、彼は順序付けられていないペアを数えていました。(このアプローチは有効である:ある「好調」すべてのアウト成果 nは/2結果、その比率で完全に一般的な答えが得られます。)問題は、すべての順序付けられていない異なる数のサンプル空間をカウントする際のエラーとして特徴付けられる可能性があります。2=/21
whuber

6

テスト名の「ハッカー」は、コンピューティング指向のソリューションを見つけようとしていることを示しています。

したがって、(a)1つの整数が他の整数の2倍である「好ましい」ケースと、(b)考えられるすべてのケースを総当たりで列挙するプログラムから始めましょう。答えはそれらの比率になります。一般的なソリューションをコーディングしました。入力は正の整数nで、出力は確率です。

n=100
all=favorable=0
for i=1 to n
    for j=1 to n
        if (i != j) all=all+1                  {1}
        if (j == 2*i) favorable = favorable+1  {2}
        if (i == 2*j) favorable = favorable+1  {3}
return(favorable / all)

(正しさの証明は、任意の正の数iに対してであるという事実に依存しています。)2

6262O2=10010000

ハッカーとして最初にしたいことの1つは、内部ループを(可能な場合)単純化することにより、2次のパフォーマンスを排除することです。このために、(番号が付けられた)内部ループの行を体系的に調べ、次の点に注意してください。

  1. iall1alljalln-1

  2. 2all12

  3. 行3は、提供されたものiが偶数になると実行されます。

これが変換されたプログラムです。

n=100
all=favorable=0
for i=1 to n
    all = all + (n-1)                      {1'}
    if (2*i <= n) favorable = favorable+1  {2'}
    if (even(i)) favorable = favorable+1   {3'}
return(favorable / all)

さらに進んで、そのループを排除できますか?

  1. alln*(n-1)

  2. 2/2/2

  3. /2

プログラムの2番目の変換は次のとおりです。

n=100
all=favorable=0                     {0}
all = all + n * (n-1)               {1''}
favorable = favorable + floor(n/2)  {2''}
favorable = favorable + floor(n/2)  {3''}
return(favorable / all)

O2O1

最後に、初期化(行0)を各変数の最初の使用にロールインし、行2 ''と3 ''を組み合わせることにより、いくつかの単純な代数的変換があります。

n=100
all = n * (n-1) 
favorable = 2 * floor(n/2) 
return(favorable / all)

=100

all = 100 * (100-1) = 100*99
favorable = 2 * floor(100/2) = 2*50 = 100
favorable/all = 100 / (100*99) = 1/99

1/99

O1


2

まず、交換せずにサンプリングしています。したがって、100 * 99の異なる結果があります。たとえば、(1,1)は有効な結果ではありません。

第二に、順序は関係ありません。大きい方はいない二、ちょうど2倍でなければなりません。したがって、対称ペアを削除します。

したがって、(100)* 99/2のうち50は正、つまり1/99

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.