优先于一端的随机算法

时间:2011-06-28 15:58:57

标签: c++ algorithm qt weighted

我正在用C ++和Qt编写一个带有GUI的小程序。 它应该类似于词汇训练师。我将把它用于我自己的学习。

我有一个对象的QList(例如,名称和描述为字符串)。

然后我有第二个带有整数的QList。对于我的其他列表中的每个对象,int都在此列表中。每个对象的起始值为50;如果用户点击正确,则会减少,反之亦然。 因此,值70的对象应该比使用值30的对象更频繁地显示给用户。因此,在正确的答案方法中,我增加/减少它,对QList进行排序并使用我的随机算法:

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%的时间,但更常见的是,就像词汇训练师一样。

1 个答案:

答案 0 :(得分:2)

首先说一句:你应该在程序开头只使用一次qsrand。

现在算法:首先得到所有值的总和,让我们称之为sumValues,然后计算0和sumValues-1之间的随机数。浏览列表并将值汇总到变量currentSum中,直到它大于或等于随机数,并使用此条目的索引。如果您通过减少值对列表进行排序,这将更有效。