【问题标题】:Which data structure and design for choosing best set of integers选择最佳整数集的数据结构和设计
【发布时间】:2017-09-18 14:07:21
【问题描述】:

我需要实现一种算法,从预定义的可能性中选择最佳三元组(三个整数的集合)。详情:

  1. 有一个枚举类定义如下:

    enum class myEnum { a6 = 0, a10, a14, a18, a119, a123, a127, a131, a135 }

这些成员可以组合成三元组 {a6,a10,a14}, {a6, a14, a18}。只有 11 个可能的三元组(因为条件在这里并不重要)。 我必须选择三元组,对三元组的每个成员进行一些计算,并考虑其他条件选择最好的三元组。

哪种数据结构和设计最适合这 11 个三元组?一个三元组“正在使用”,因此应从计算中排除,或者可以对每个三元组进行计算,然后将其从结果中排除(没关系):

struct a6 { int value; };

typeToChoose possibleTriples = {

{
    a6, a10, a14
    a6, a10, a18
    a6, a14, a18
    a10, a14, a18    
    a119, a123, a127
    a119, a123, a131
    a119, a127, a131
    a123, a127, a131
    a123, a127, a135
    a123, a131, a135
    a127, a131, a135
}

假设{a6, a10, a14} 正在使用中。现在我必须遍历 possibleTriples 计算字段 value 的总和: int sumOfValues = a6.value + a10.value + a18.value;

并选择总和最小的最小三倍。 {a6, a10, a14} == {a14, a10, a6}

【问题讨论】:

  • 我建议您提供一个minimal reproducible example 的代码来满足您的需求(但效率低下)并寻求优化建议。让它发挥作用,然后让它变得更好。
  • 考虑到要求的模糊性,并假设 { a, b, c } !== { a, c, d },我只需创建一个 729 元素数组/向量并对其进行迭代用你的测试
  • 你想过std::tuple<myEnum, myEnum, myEnum>吗?
  • 是的,我有,但仍然想知道这个预定义结构的类型应该是什么才能有效地遍历它。只是元组数组?

标签: c++ c++11 c++14


【解决方案1】:

这个问题的答案只能和问题一样模糊。 一般来说,你从最基本的方法开始:

struct Triple {
   myEnum first, second, third;
};

现在,根据您想要实现的目标,您可以添加进一步的抽象,通过合并封装(私有成员)、特定接口来有效地将此类结构提升为类,以操纵表示、算法、重载运算符等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2012-05-19
    • 2019-12-13
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多