一端具有优先级的随机算法

Random algorithm with priority to one end

本文关键字:随机 算法 优先级      更新时间:2023-10-16

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

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

然后我有了第二个包含int的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%的时间里,而是更频繁地出现,就像词汇培训师一样。

首先要注意:在程序开始时只应使用qsrand一次。

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