找到一个共同的唯一的顺序

Finding a common unique order

本文关键字:唯一 顺序 一个      更新时间:2023-10-16

出于优化的目的,我必须从给定的几个订单中找到一个共同的订单。我在那里加载了一个文件,每一行都是用户,其操作顺序作为操作的索引。

我想实现一个返回普通顺序的方法:

方法输入:用户输入的顺序(他们执行动作[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