【问题标题】:Split Algorithm on C++C++ 上的拆分算法
【发布时间】:2015-01-31 17:17:28
【问题描述】:

我有一个包含 8 个元素的数组:

a[8] = {9, 7, 6, 2, 3, 1, 5, 4}

我想将 8 个元素分成 3 个组。每个组是 1 个或多个元素的总和。每组的总和最相似。

【问题讨论】:

  • 请描述您已经尝试过的,以及您遇到的具体问题。
  • 由于您同时使用遗传算法和进化算法对此进行了标记,我假设您正在考虑使用某种进化计算。那是对的吗?从表面上看,这个问题似乎不太适合进化计算,因为很难提出一个会逐渐增加的适应度函数。您可以使用三个总和之间的负总差作为适应度函数,并让变异算子在分区之间交换元素,但每次交换都会大幅改变总和。使用更大的数组可能会更好。

标签: algorithm graph-algorithm genetic-algorithm stl-algorithm evolutionary-algorithm


【解决方案1】:

您正在用 k=3 描述 k-partition problem

不幸的是,这个问题已知为(强)NP-Hard,因此没有已知的有效解决方案(而且普遍认为不存在)。

您最好的希望是蛮力搜索:将所有分区创建为 3 个组,然后从中选出最好的一个。如果您正在处理 8 个元素 - 这应该是可能的,但恐怕对于较大的数组来说它很快就会变得太慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2013-08-14
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2013-10-14
    相关资源
    最近更新 更多