-1

forループを使用して10行を作成しています。for ループ内で、dbms_random.value を使用して 0 から 10 までの整数を生成しています。各行が 30% の確率で 0 になるように dbms_random メソッドをコーディングしたいと考えています。

4

1 に答える 1

2

乱数発生器をそのまま使用すると、すべての数値に等しい確率が与えられます。したがって、特定の数値に高い確率または低い確率を与え、残りの数値の確率を公平に保ちたい場合は、数値を表す範囲を同じ方法で設定する必要があります。

したがって、30% の確率を 0 にし、残りの 10 個の数字は同じ確率になるようにする必要があります。N が数値の範囲全体である場合、x が数値 1 ~ 10 を表す場合、3*x は数値 0 を表します。したがって、スローされる数値の数は N = 10*x + 3*x = 13*x です。

したがって、生成される範囲は 13 の倍数である必要があります。

したがって、dbms_random が 0 ~ 12 の数字を生成するようにします。そして、「生成値」<=2 の場合は条件を設定し、それ以外の場合は「生成値」-2 とみなします

疑似コードは次のようになります

select case when T1.x>2 
   then T1.x-2  
   else 0 
end case  
from (select  dbms_random(0,13) as x from Dummy) T1
于 2015-03-11T03:37:35.300 に答える