c++ - 一端优先的随机算法

标签 c++ algorithm qt weighted

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

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

然后我有第二个带有整数的 QList。对于我的其他列表中的每个对象,此列表中都有一个 int。每个对象的起始值为 50;如果用户点击正确,它会减少,反之亦然。 因此,与值为 30 的对象相比,值为 70 的对象应该更频繁地向用户显示。因此,在正确答案方法中,我增加/减少它,对 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

现在我需要的是一种在这个随机算法中实现我的优先级的方法。我不希望值(value)更高的词在 90% 的时间里出现,而是更频繁地出现,就像词汇训练师一样。

最佳答案

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

现在开始您的算法:首先获取所有值的总和,我们称之为 sumValues,然后计算 0 到 sumValues-1 之间的随机数。遍历您的列表并将值求和到变量 currentSum 中,直到它大于或等于您的随机数,然后使用此条目的索引。如果您按递减值对列表进行排序,这会更有效。

关于c++ - 一端优先的随机算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6509405/

相关文章:

algorithm - 在图中获取下一个最近邻居的最佳方法是什么?

algorithm - 纯函数式编程的效率

c++ - 如何将 qrc 数据包含到使用 CMake 编译的基于 Qt 的二进制文件中

c++ - 是否需要 "do {...} while ( )"循环?

c++ - Linux 中的 SDL 库

c++ - 初始化 asio::ip::address_v6() 的最快方法?

c++ - 调用基本构造函数而不直接调用

比较两个图像的算法

c++ - Visual C++ 2010 和 Qt(moc 等)

c++ - const 参数传递 : invalid conversion