ホームページ  >  に質問  >  本文

php - 確率的アルゴリズムによるソート

各確率区間で結果が得られるように、確率に従ってデータを並べ替えるにはどうすればよいですか?

たとえば、次のようなデータセットがあるとします

リーリー

Key は並べ替える値、value は配列内のその位置に各値が出現する確率です。たとえば、配列内の位置 0 に が出現する確率は 40% です。計算された配列、a は 40% です。機会が配列の最初に表示され、残りは確率に従ってアルゴリズムで並べ替えられます。

私の現在の解決策 (Low の方法であり、配列が拡張するにつれてサポートし続けることはできません):
1. a の間隔が 0 ~ 40、b であると仮定して、既存の確率に従って間隔を分割します。は 40 ~ 60、c は 60 ~ 70 などになります。
2.関数を使用して 1 ~ 100 の範囲の乱数を取得し、結果をスローします (つまり、対応する範囲に入れます)。 )

コードは以下の通りです(最適化アイデア募集中)

リーリー

発生した問題: (in_array の判定は、これらの間隔の値が 1 回しか計算できないため)
1. 計算された値が各間隔の値を持つとは限りません
2. コード Noスケーラビリティ

また、アドバイスをいただければ幸いです、アドバイスをお願いします、みなさん、ありがとうございました!

过去多啦不再A梦过去多啦不再A梦2675日前680

全員に返信(2)返信します

  • 黄舟

    黄舟2017-05-24 11:35:58

    この質問には問題があると思います。そのような入力は、条件を満たす分布が存在することさえ保証しません。

    {a: 60, b: 40} 为例:全排列的空间是{ab, ba}と一緒に。次に、あなたの定義によれば、それは次のようになります:

    リーリー

    返事
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-24 11:35:58

    私が書いた通り == 拡張方法も知りたいです

    返事
    0
  • キャンセル返事