算法找到最优组合

时间:2015-11-17 12:49:02

标签: java algorithm combinatorics

我有一个算法建模问题我可以使用一些帮助。考虑一下: 一个人预先购买了

的门票
  • 0至5 km x 4
  • 6至10 km x 2
  • 11至15 km x 8

让我们分别调用这些不同类型的A,B,C,以便于理解,这个人有以下数据:

  • 4 A's
  • 2 B's
  • 和8 C

此人今天想要旅行18公里,并且可以使用他们预先购买的门票的任意组合来支付他们的旅行费用。例如,他们可以使用八个C中的两个,相当于最多30公里的行程,或者他们可以使用四个A中的四个,相当于最多20公里的行程。

我认为我的算法能够有效地选择应该预先购买的门票的最佳组合:

  1. 最小化预购票的总和之间的距离 距离和当前行驶的实际距离 日期。
  2. 尽量减少用于承保的预购门票数量 旅行的实际距离。
  3. 我试过的是这个: 使用上面的例子,其中A,B和C分别是以kms为单位的范围(0到5),(6到10),(11到15); 人有: 1. 4 A 2. 2 B 3.和8 C的

    让x成为今天的旅行距离。 x = 18 km

    • 步骤1:寻找x包含的范围。
    • 步骤1.2:如果存在这样的范围,则选择该范围。
    • 步骤1.3:将该类预购票的计数减一。
    • 步骤1.4:终止算法。
    • 步骤2:如果不存在此范围,请寻找可用的最大范围。
    • 步骤3:将x递减到该范围的上限。例如x - c(max)= 18 - 15.
    • 步骤4:将该类预购票的计数减一。 7 C仍然存在。
    • 第5步:重新评估x。例子x = x - c(max)= 3。
    • 第6步:转到第一步。

    虽然我的回答提供了解决方案,但我不确定这是否已经过优化。我更喜欢O(nlogn)的复杂性。

    感谢任何帮助。

0 个答案:

没有答案