2011-06-28 11 views
1

私はC++とQtでGUIを使った小さなプログラムを書いています。 語彙トレーナーに似ているはずです。私は自分の勉強のためにそれを使用します。一方的に優先するランダムアルゴリズム

私はオブジェクトのQListを持っています(名前と説明は文字列などです)。

次に、int型の2番目のQListがあります。他のリストのすべてのオブジェクトに対して、intはこのリストにあります。開始値はすべてのオブジェクトに対して50です。ユーザーが正解をクリックすると、それは減分され、逆も同様です。 だから、値70を持つオブジェクトは、だから私は/それを増減正解方法では、QListのを並べ替えると、私のランダムなアルゴリズムを使用して値30を持つオブジェクトよりユーザーに、より頻繁に表示される必要があります。

if(packList.count()==0) // the QList with objects 
     return; 
    int Min = 0; 
    int Max = packList.count()-1; // -1 because i need the index 
    qsrand(QTime::currentTime().msec()); 

     if (Min > Max) 
     { 
      int Temp = Min; 
      Min = Max; 
      Max = Temp; 
     } 
     int randNum = ((rand()%(Max-Min+1))+Min); 
    setPage(randNum); // randNum will be used as index in this method 

今私が必要とするのは、このランダムなアルゴリズムで優先順位を実装する方法です。私は、より高い価値を持つものが時間の90%に見えることを望んでいませんが、ちょうどボキャブラリートレーナーのように、より頻繁に表示されることを望みます。

答えて

2

最初の注釈:qsrandは、プログラムの最初に1回だけ使用する必要があります。

アルゴリズムには、まずすべての値の合計を取得し、sumValuesとし、0とsumValues-1の間の乱数を計算します。あなたのリストを通り、あなたの乱数以上になるまで変数currentSumに値を合計し、このエントリーのインデックスを使用してください。値を減らしてリストを並べ替えると、これはより効率的になります。

+0

ここにも記載されています:http://stackoverflow.com/questions/1761626/weighted-random-numbers/1761646#1761646 –

+0

@Mu Mind、多くのうちの1つです。この質問は定期的にポップアップします。 –

+0

hmuelnerとMu Mindとありがとう、それは私が望むように動作します。 – VanillaBear