找到一个共同的唯一的顺序
Finding a common unique order
出于优化的目的,我必须从给定的几个订单中找到一个共同的订单。我在那里加载了一个文件,每一行都是用户,其操作顺序作为操作的索引。
我想实现一个返回普通顺序的方法:
方法输入:用户输入的顺序(他们执行动作[0,1,2,3,4]的顺序)
user1 0,1,2,4,3
user2 0,1,2,3,4
user3 0,2,1,3,4
user4 0,1,3,2,4
...
我想找到唯一的共同/全球秩序。我想找到大多数用户喜欢的顺序。
如何实现这样的方法或算法?
我正在用Qt用c++写代码。
感谢您的帮助
谢谢。
假设您将订单存储在std::vector<int>
中,那么您的问题的标准解决方案是使用std::nth_element
找到所有订单的中位数项目。
例子:
// Our orders
std::vector<int> o1 = { 0,1,2,4,3 };
std::vector<int> o2 = { 0,1,2,3,4 };
std::vector<int> o3 = { 0,2,1,3,4 };
std::vector<int> o4 = { 0,1,3,2,4 };
// Regroup items by type
std::vector<int> item1 = { o1[0] , o2[0], o3[0], o4[0] };
std::vector<int> item2 = { o1[1] , o2[1], o3[1], o4[1] };
std::vector<int> item3 = { o1[2] , o2[2], o3[2], o4[2] };
std::vector<int> item4 = { o1[3] , o2[3], o3[3], o4[3] };
// Lookup median elements
std::nth_element(item1.begin(), item1.begin() + item1.size()/2, item1.end());
std::nth_element(item2.begin(), item2.begin() + item2.size()/2, item2.end());
std::nth_element(item3.begin(), item3.begin() + item3.size()/2, item3.end());
std::nth_element(item4.begin(), item4.begin() + item4.size()/2, item4.end());
std::cout << "Most wanted item 1 is " << item1[item1.size()/2] << 'n';
std::cout << "Most wanted item 2 is " << item2[item2.size()/2] << 'n';
std::cout << "Most wanted item 3 is " << item3[item3.size()/2] << 'n';
std::cout << "Most wanted item 4 is " << item4[item4.size()/2] << 'n';
输出:最想要的物品1是0
最想要的物品2是1
最需要的物品3是2
最通缉物品4是3
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 函数调用中参数的顺序重要吗
- 为什么不;名字在地图上是按顺序排列的吗
- 何时在引用或唯一指针上使用移动语义
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 数到第n个楼梯的路(顺序无关紧要)
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 计算排序向量的向量中唯一值的计数
- 优先顺序:智能指针和类析构函数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 在循环中按顺序遍历成员变量
- 独立读取-修改-写入顺序
- QML按钮点击功能执行顺序
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- 将fetch_add与宽松的内存顺序返回唯一值
- 如何使用 std::shuffle 以随机顺序对具有唯一指针的向量进行洗牌
- 是否有可以将每个双精度转换为唯一uint64_t,保持精度和顺序的功能?(为什么我找不到?
- C++设置唯一和顺序
- c++需要字符串的唯一ID,但无论顺序如何都必须相同
- 找到一个共同的唯一的顺序