まず、実際にタイトルに記載されている制限よりも多くの制限があります。 Plz readon。ランダムな順序で辞書から項目を表示する方法隣接する2つの項目が同じではない
たとえば、私はdictionary<char,int>
を持っています。ここでkeyはアイテムとして機能し、valueは出力の出現回数を意味します。 (重み付けに若干似ていますが、置換えなし) ( 'A'、2)( 'B'、3)( 'C'、1)
可能な出力は、私はそれを実装するには、次の方法を考えています 'babcab'
だろう。
- (累積weightings、char)をエントリとして含む新しいリストを作成します。
- がランダム
- が累積重みを再計算し、リストから項目を選択し、また0
- リピートとして計量最近描かれた項目を設定。
「bacab」が生成されますが、それ以上はできません(「b」だけが残っていますが、重み付けは即時繰り返しが許可されていないため0に設定されています)。この場合、すべての結果を破棄し、最初からやり直してください。
他にも良いアプローチがありますか?
また、「対応する重み付けを0に設定する」プロセスをスキップすると、実行不可能なソリューションが拒否されます。例えば私はすでに「バブ」を手に入れました。次のrngの選択では、私は 'b'を取得し、その後、私は 'b'でないものを得るまで描画プロセスをやり直してから、続けます。これはうまくいくのでしょうか?
1. RandomString
ネームスペース。 2.要件を満たさない順列をすべて削除します。 3.残っている置換からランダム置換を選択する。 – dtb
そして、それはどのように 'ランダム'でなければならないのですか?無作為の建設は容認できますか? –
実際に私は( 'a'、20)、( 'b'、23)、...、( 'j'、34)のようなものに取り組んでいますが、すべての可能な順列を生成するのは簡単ではありません。 – colinfang