2016-12-25 7 views
4

再現ランダムな値

として、たとえば、インデックスを1から10まで提供し、別の時間にインデックスを5から10まで呼び出すことができ、それらは5から10までの値で同じである必要があります。グローバルシードを設定すると、これは実行されませんベクトル内の位置によってランダム呼び出しのn番目の項目についてのみ同じに保たれます。

私がこれまで持っていることは、必要に応じて働く、これを次のとおりです。

f = function(ix,min=0,max=1,seed=1){ 
    sapply(ix,function(x){ 
    set.seed(seed + x) 
    runif(1,min,max) 
    }) 
} 
identical(f(1:10)[5:10],f(5:10)) #TRUE 
identical(f(1:5),f(5:1)) #FALSE 
identical(f(1:5),rev(f(5:1))) #TRUE 

各インデックスに対して明示的にシードを設定せずに、上記を達成するためのより効率的な方法があれば、私のように、思っていましたグローバルシードに相殺される。

答えて

0

暗号化を使用します。特定のキーを使用すると、一意の入力は常に固有の出力を生成します。あなたが入力した数字が異なっている限り、出力は常に異なっています。同じ数字が常に出力される出力暗号文に暗号化されます。 64ビットの数値にはDES、128ビットの数値にはAESを使用します。他のサイズの場合は、独自のFeistel暗号(安全ではないがランダム)を使用するか、Hasty Pudding暗号を使用してください。

+0

例を教えてください。 –

+0

何の例ですか?一般的な暗号化ですか? DES? AES?一般的な[Feistel暗号](https://en.wikipedia.org/wiki/Feistel_cipher)? [Hasty Pudding cipher](https://en.wikipedia.org/wiki/Hasty_Pudding_cipher)? – rossum

+0

これを使用して実際の質問に対処する方法の例。 –