タグ付けされた質問 「random」

このタグは、乱数、疑似乱数、およびコンピューターエントロピーを扱う質問用です。

10
ランダム性をテストするにはどうすればよいですか?
配列内の要素をランダムにシャッフルする方法を検討してください。これが機能していることを確認するために、シンプルでありながら堅牢な単体テストをどのように作成しますか? 私は2つのアイデアを思いつきましたが、どちらにも顕著な欠陥があります: 配列をシャッフルし、順序が以前と異なることを確認します。これは良いように聞こえますが、シャッフルが同じ順序でシャッフルされると失敗します。(ありえませんが、可能です。) 一定のシードで配列をシャッフルし、所定の出力に対してチェックします。これは、同じシードが与えられると常に同じ値を返すランダム関数に依存しています。ただし、これは無効な仮定である場合があります。 サイコロの出目をシミュレートし、乱数を返す2番目の関数を考えます。この機能をどのようにテストしますか?その機能をどのようにテストしますか... 与えられた範囲外の数値を返すことはありませんか? 有効な分布で数値を返しますか?(1つのダイスで均一、多数のダイスで通常)。 これらの例だけでなく、一般的なコードのランダム要素をテストするための洞察を提供する回答を探しています。ユニットテストはここでも正しい解決策ですか?そうでない場合、どのようなテストがありますか? みんなの心を楽にするためだけに、私は自分の乱数ジェネレーターを書いていません。

4
関数型言語は乱数をどのように処理しますか?
私はそれについて意味することにということですほとんど、すべてのチュートリアル私は関数型言語について読んだ機能の優れた点の一つは、あなたが二度同じパラメータを持つ関数を呼び出す場合、あなたはだろうということであるということである常にで終わります同じ結果。 一体どのようにして、パラメータとしてシードを取り、そのシードに基づいて乱数を返す関数を作成しますか? これは、機能について非常に良いことの1つに反するように見えることを意味しますよね?または、私はここで何かが完全に欠けていますか?

5
重み付けされたランダムなアイテムを取得する
例えば、私はこの表を持っています + ----------------- + | フルーツ| 重量| + ----------------- + | りんご| 4 | | オレンジ| 2 | | レモン| 1 | + ----------------- + ランダムなフルーツを返す必要があります。ただし、リンゴはレモンの 4倍、オレンジの 2倍の頻度で摘み取る必要があります。 より一般的なケースでは、それはf(weight)頻繁に起こるはずです。 この動作を実装するのに適した一般的なアルゴリズムは何ですか? または、Rubyにすぐに使える宝石がありますか?:) PS 現在のアルゴリズムをRuby https://github.com/fl00r/pickupに実装しました
51 algorithms  ruby  math  random 

9
真に乱数を生成することが不可能なのはなぜですか?
私は、100万個の乱数を生成する必要がある趣味の問題を解決しようとしていました。しかし、私はすぐに気付きました、それらをユニークにするのは難しくなっています。乱数生成について読むために、アルゴリズム設計マニュアルを取り上げました。 次の段落があり、私には完全に理解できません。 残念ながら、乱数の生成は実際よりもずっと簡単に見えます。実際、決定論的なデバイスで真に乱数を生成することは基本的に不可能です。フォン・ノイマン[Neu63]は、「ランダムな数字を生成する算術的方法を検討する人は、もちろん罪の状態にあります。」と言っています。ランダムに生成された場合。 決定論的なデバイスで真の乱数を生成することが不可能なのはなぜですか?この文はどういう意味ですか?

14
本質的にランダム/非決定的アルゴリズムの単体テスト
私の現在のプロジェクトは、簡潔に「制約のあるランダムなイベント」の作成に関係しています。私は基本的に検査のスケジュールを生成しています。それらのいくつかは、厳密なスケジュールの制約に基づいています。金曜日の午前10:00に週に1回検査を行います。他の検査は「ランダム」です。「検査は週に3回行う必要がある」、「検査は午前9時から午後9時までの間に行う必要がある」、「同じ8時間内に2つの検査を行うべきではない」などの基本的な構成可能な要件がありますが、特定の検査セットに対して設定された制約の範囲内で、結果の日付と時刻は予測できません。 ユニットテストとTDD、IMOは、このシステムで大きな価値があります。これは、要件の完全なセットがまだ不完全でありながら、段階的にビルドするために使用できるためです。現在、私が必要だとは知らない。厳密なスケジュールは、TDDにとって欠かせないものでした。ただし、システムのランダムな部分のテストを作成するときに、テスト対象を実際に定義するのは難しいと感じています。スケジューラによって生成されるすべての時間は制約内に収まる必要があると断言できますが、実際の時間を非常に「ランダム」にせずにこのようなすべてのテストに合格するアルゴリズムを実装できます。実際、それはまさに起こったことです。時刻は、正確には予測できませんが、許容される日付/時刻範囲の小さなサブセットに分類される問題を発見しました。アルゴリズムは、私が合理的に行うことができると思うすべてのアサーションに合格し、そのような状況で失敗する自動テストを設計することはできませんでしたが、「よりランダムな」結果が与えられると合格します。既存のテストを再構築して何度も繰り返すことで問題が解決したことを実証し、生成された時間が完全に許容範囲内に収まったことを視覚的に確認する必要がありました。 非決定論的な動作を期待するテストを設計するためのヒントはありますか? すべての提案に感謝します。主な意見は、決定論的で、再現性があり、主張可能な結果を​​得るために、決定論的テストが必要だということです。理にかなっています。 制約プロセス(任意の長いバイト配列が最小と最大の間で長くなるプロセス)の候補アルゴリズムを含む一連の「サンドボックス」テストを作成しました。次に、そのコードをFORループで実行し、アルゴリズムにいくつかの既知のバイト配列(開始時に1から10,000,000の値)を与え、アルゴリズムにそれぞれ1009から7919の間の値に制約させます(素数を使用して、アルゴリズムは、入力範囲と出力範囲の間で偶然のGCFを通過しません)。結果の制約値がカウントされ、ヒストグラムが作成されます。「パス」するには、すべての入力をヒストグラム内に反映する必要があり(「失わない」ようにするための健全性)、ヒストグラム内の2つのバケットの差は2より大きくすることはできません(実際には<= 1でなければなりません) 、しばらくお待ちください)。勝ったアルゴリズムがあれば、それをカットして実動コードに直接貼り付け、永続的なテストを実施して回帰することができます。 コードは次のとおりです。 private void TestConstraintAlgorithm(int min, int max, Func<byte[], long, long, long> constraintAlgorithm) { var histogram = new int[max-min+1]; for (int i = 1; i <= 10000000; i++) { //This is the stand-in for the PRNG; produces a known byte array var buffer = …

11
人間の脳の乱数生成アルゴリズム?[閉まっている]
人間が(やや「真」の)乱数を生成できる実用的で学習しやすい「インヘッド」アルゴリズムを知っていますか、または考案しましたか?「インヘッド」とは、外部ツールやデバイスがないことが好ましいということです。また、高出力(1分あたり多数の乱数)が望ましいです。 SOでこれを尋ねたが、あまり興味を引かれなかった。たぶんこれはプログラマーにより適しています。

11
出力が不確定な単体テストメソッド
ランダムな長さのランダムなパスワードを生成することを意図したクラスがありますが、定義された最小長と最大長の間に制限されています。 私は単体テストを作成していますが、このクラスで興味深い小さな障害に遭遇しました。単体テストの背後にある全体的な考え方は、繰り返し可能にする必要があるということです。テストを100回実行すると、同じ結果が100回得られるはずです。あなたが期待する初期状態にあるかもしれないし、そうでないかもしれないいくつかのリソースに依存しているなら、あなたのテストが本当に常に再現可能であることを保証するために問題のリソースをモックするつもりです。 しかし、SUTが不確定な出力を生成することになっている場合はどうでしょうか? 最小長と最大長を同じ値に修正すると、生成されたパスワードが予想された長さであることを簡単に確認できます。しかし、許容範囲(たとえば15-20文字)の範囲を指定すると、テストを100回実行して100パスを取得できるという問題がありますが、101回目の実行で9文字の文字列が返される可能性があります。 コアが非常に単純なパスワードクラスの場合、大きな問題を証明すべきではありません。しかし、一般的なケースについて考えさせられました。設計によって不確定な出力を生成しているSUTを処理するときに取るのに最適な方法として通常受け入れられている戦略は何ですか?

6
「究極のシャッフル」アルゴリズムを作成して、mp3コレクションを並べ替えたい
私は、タイトルとアーティストの重複を避ける方法でmp3ファイルをソートするための擬似コードの提案を探しています。私はクルーナーに耳を傾けます-フランク・シナトラ、トニー・ベネット、エラ・フィッツジェラルドなど、古い基準を歌います。各アーティストは、同じ曲を多数録音します-フライミートゥザムーン、ザウェイユールックトゥナイト、スターダストなど。2000曲あり、20曲がEllaのものである場合、100曲ごとに1回だけ聞きたいです。10人のアーティストがFly Me To The Moonを歌うなら、200曲に1回聴きたいです。もちろん、これら2つの要件を組み合わせて、「究極のシャッフル」を作成します。 これはかなり広範にわたる未解決の質問です。まだプログラミングを始めていませんので、良いアプローチの提案を探しています。実際には、他の曲の属性を均等に配置することに関して他のいくつかの要件がありますが、ここではそれに入りません。 出発点として、ここで見つけたコードを変更して、mp3ファイルを操作し、ID3タグを読み取ります。 以下のparsifalの回答を使用して、私のニーズを満たす小さなアプリを作成しました。ここにフォローアップの質問も書きました。素晴らしい反応をありがとう!

6
UUIDの衝突[終了]
特にバージョン4(ランダム)UUIDを使用して、UUID衝突の可能性について誰もが実際の研究を行いました。使用する乱数ジェネレーターが真にランダムではなく、同じコードを実行する数十または数百の同一マシンがある可能性があるためですUUIDを生成しますか? 私の同僚は、UUID衝突のテストは完全に時間の浪費であると考えていますが、データベースから重複キー例外をキャッチして新しいUUIDで再試行するコードを常に入れています。しかし、UUIDが別のプロセスから来て実際のオブジェクトを参照している場合、問題は解決しません。
33 random  uuid 

4
Piを粗雑な乱数ジェネレータとして使用できますか?
私は最近math.SEでこの質問を見ました。考えさせられました。Piは粗雑な乱数ジェネレーターとして使用できますか?私は結果がよく知られていることを意味します(これまでどのくらいのpiが計算されましたか?)が、一度に1桁の数字をとるとPiはかなりランダムに見えるようです。 これはまったく意味がありますか?

6
乱数ジェネレーターはどのように機能しますか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 私はちょうどphp rand()関数について熟考し、それをどのようにリメイクできるかを考えていたところ、完全にばかげて思いつきました。 乱数ジェネレーターはどのように機能しますか?
23 random  numbers 

4
PHPのrand()の出力を予測する
PHPのrand()の出力はそのPRNGとして予測可能であることを多くのソースで読みましたが、それを事実として受け入れているのは、多くの場所で見たからです。 概念実証に興味があります:rand()の出力をどのように予測しますか?この記事を読んで、乱数はポインター(シード)から始まるリストから返される数値であることを理解していますが、これがどのように予測できるか想像できません。 誰かが数千の推測内で与えられた瞬間にrand()を介してどのようなランダムな#が生成されたかを合理的に把握できますか?それとも10,000個の推測?どうやって? これは、rand()を使用してパスワードを失ったユーザーのトークンを生成するauthライブラリを見て、これが潜在的なセキュリティホールであると想定したためです。それ以来、このメソッドをopenssl_random_pseudo_bytes()、元のハッシュされたパスワードとマイクロタイムの混合物をハッシュする方法に置き換えました。これを行った後、外を見ていると、トークンがrand()のmd5であることを知っていてもトークンを推測する方法がわからないことに気付きました。
21 security  random 

7
「言語に安全な」UUIDを生成する方法は?
リソースのIDには常にランダムに生成された文字列を使用したかったため、次のような短いURLを使用できました。/ user / 4jz0k1 しかし、実際には、/ user / f * ckerなどの実際の単語を作成するランダムな文字列の生成が心配だったため、私は決してしませんでした。これには2つの問題があります。それはユーザーを混乱させたり、不快感を与えたり、SEOを混乱させる可能性があります。 その後、2文字ごとに数字を追加するような固定パターンを設定するだけでいいと思いました。「generate_safe_uuid」メソッドには非常に満足していましたが、実際に生成される単語の割合が増加したため、SEOのみに優れ、ユーザーにはさらに悪いことに気付きました。例:/ user / g4yd1ck5 今、メソッド 'replace_numbers_with_letters'を作成し、それが辞書などに対して単語を形成していないことを確認できると考えています。 他のアイデアはありますか? 追伸 これを書いているとき、複数の言語(英語、フランス語、スペイン語など)で単語をチェックするのは面倒であり、数字のみのIDが再び好きになり始めていることにも気付きました。 更新 誰もが読むべきいくつかのリンク: http://thedailywtf.com/Articles/The-Automated-Curse-Generator.aspx http://blogs.msdn.com/b/oldnewthing/archive/2008/06/27/8659071.aspx
20 random  uuid 

4
確率的挙動のプログラムをテストするためのベストプラクティスは何ですか?
研究開発の仕事をしていると、私は自分の行動にある程度のランダム性があるプログラムを書いていることがよくあります。例えば、私が遺伝的プログラミングで働いているとき、私はしばしば任意のランダムなソースコードを生成して実行するプログラムを書きます。 そのようなコードのテストに関する問題は、バグが頻繁に断続的に発生し、再現が非常に困難になる可能性があることです。これは、ランダムシードを同じ値に設定して実行を開始するだけではありません。 たとえば、コードはカーネルリングバッファからメッセージを読み取り、メッセージの内容を条件付きでジャンプします。当然、後で問題を再現しようとすると、リングバッファーの状態が変更されます。 この動作は機能ですが、予期しない方法で他のコードをトリガーする可能性があるため、多くの場合、単体テスト(または人間のテスター)が見つけられないバグを明らかにします。 この種のシステムをテストするためのベストプラクティスは確立されていますか?もしそうなら、いくつかの参照は非常に役立ちます。そうでない場合は、他の提案を歓迎します!

2
ガベージコレクションは非決定的であるため、なぜ安全な乱数生成に使用されないのですか?
/ dev / randomはエントロピーの優れたソースであり、通常使用されるものです-少なくともJavaでGCを読んでいるように、ガベージコレクションデーモンが非決定的に実行されることは受け入れられているようです。これが正しい場合、変数/ dev / randomの代わりに、ガベージコレクションのタイミングをエントロピーのソースとして使用しないのはなぜですか?

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