方法1: ランダム生成 まず、非常に一般的な方法であるランダム生成法(私が名付けました)を紹介します。私はこの方法を使用して、マインスイーパ ゲームで地雷の位置をランダムに分散させました(考え方は同じです)。この方法の重要なポイントは、最初から指定された領域に 1 つずつ数字をランダムに生成することです。新しく生成された乱数が以前に生成された場合、その数字は保存されません。新しく生成された乱数が以前に生成されていない場合、その数字は保存されます。生成された数字の数が必要な数に達するまで保存されます。 実装コードは次のとおりです。
コードでは、memchr 関数を使用しています (時間計算量は O(n) かもしれませんが、証拠は見つかりませんでした)。たとえ O(1) であっても、乱数を生成するためにループする回数は固定ではありません (生成する必要がある数以上)。 方法2: ポジション交換法 この方法は、昨日テンセントの筆記試験を受けているときに思いつきました。今日学校に戻って寮で試してみました。基本的な考え方は、まず分散した数字の列を初期化し、次にランダムな位置を生成して、各位置と順番に交換します。生成されたランダムな位置がそれ自身でない場合は、交換操作を実行します。 実装コード:
比較: 方法 2 は、スワップ位置の最大数が制限されている (生成される乱数の数が固定されている) ため、新しく生成された数が生成された数の中にあるかどうかを調べる時間が節約されるため、時間の点で方法 1 よりもはるかに高速です。方法 1 では、新たに生成された数字が既に生成された数字の中にある場合、新しい乱数を生成する必要があるため、乱数として生成される数字の数は固定ではありません (最小値があります)。 テストコード: 結果: 2 番目の方法が優れているかどうかはまだわかりません。これは私自身のアイデアであり、検証が完全ではないためです。他の欠点 (弱いランダム性など) がある可能性があります。他の本では見たことがありません。ネットユーザーがどこかで見たことがある場合は、教えてください。方法 1 は、中国語版の「The Essentials of C and C++ Code」P97 で見つかりました。 後続の補足: chncwang さんの返信ありがとうございます。方法 2 は完全にランダムではありません。完全にランダムな変更は次のとおりです。 なぜなら、「最初の移動後、最初の数字がまだ最初の位置にある確率は 1/n であり、その後の移動ではこの確率が下がるだけです。したがって、このアルゴリズムは完全にランダムではありません。」変更されたアルゴリズムは、実際には C++ の STL<algorithm> ライブラリの random_shuffle() 関数の実装方法です。 i が変化するたびに乱数の範囲が変更されるため、前の位置の数字が元の数字のままである確率は低下しません (つまり、後続のスワップ操作は、すでにスワップされた位置に影響を与えません)。 実装は標準ライブラリ <algorithm> の random_shuffle() 関数を使用すると簡単です。コードは次のとおりです。
オリジナルリンク: http://www.cnblogs.com/hanxi/archive/2012/10/15/2725047.html 【編集者のおすすめ】
|
<<: 基本的なアルゴリズムについての簡単な説明: AVL ツリーとスプレイ ツリー (パート 3)
>>: 大規模ウェブサイトのアルゴリズムとアーキテクチャについての簡単な説明(パート 2)
今日のデータセンターは、ほぼ克服不可能と思われる課題に直面しています。データ センターの運用はかつて...
[[263482]]老舗の文系大学が人工知能人材育成分野への参入を正式に発表した。 「中国人民大学...
戦略的利益のために AI を活用している企業の中に、アメリカの衣料品会社 Carhartt がありま...
過去2年間、中国は世界の継続的なイノベーションの最前線に立ってきました。2020年の疫病は、人工知能...
この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...
[[416068]] [51CTO.com クイック翻訳]人間が未来を予測することは困難ですが、人工...
2023 年は、大規模言語モデル (LLM) の台頭により、オープンソース分野にとって極めて重要な年...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
DeepFake は発売以来、潜在的な「悪質な AI」としてリストアップされてきました。 有名な「...
強化学習 (RL) とディープラーニングの組み合わせは、一連の印象的な結果をもたらし、(ディープ) ...
新型コロナウイルス感染症の流行から2、3年が経ち、私たちの日常生活の機能を維持するために、データセン...
ロジスティック回帰の2つの方法:勾配降下法と最適化関数ロジスティック回帰は非常に人気のある機械学習手...