有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

寻找最优组合的java算法

我有一个算法建模问题,我需要一些帮助。考虑一下: 一个人预先购买了

  • 0到5公里x4
  • 6至10公里x2
  • 11至15公里×8

为了便于理解,让我们分别将这些不同的类型称为A、B、C,这样,此人的计数:

  • 4 A的
  • 2 B的
  • 还有8个C

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

我认为,为了让我的算法有效地选择预购门票的最佳组合,它应该:

  1. 尽可能减少预购机票总额之间的距离 距离和当前行驶的实际距离 约会
  2. 尽量减少预先购买的机票数量,以覆盖 实际行驶的距离

我试过的是: 使用上述示例,其中A、B和C分别为(0到5)、(6到10)、(11到15)kms范围; 此人有: 1.4 A 2.2B的 3.和8 C

让x表示今天的旅行距离。x=18公里

  • 第一步:寻找一个x包含边界的范围
  • 步骤1.2:如果存在这样的范围,则选择该范围
  • 步骤1.3:将该类型预购机票的数量减少1
  • 步骤1.4:终止算法
  • 第2步:如果不存在这样的范围,寻找可用的最大范围
  • 第三步:用该范围的上限递减x。例x-c(最大值)=18-15
  • 第4步:将该类型的预购票的数量减少1。7 C.剩下的
  • 第5步:重新评估x。示例x=x-c(最大)=3
  • 第六步:转到第一步

虽然我的答案提供了一个解决方案,但我不确定这是否得到了优化。我更喜欢O(nlogn)复杂度

谢谢你的帮助


共 (0) 个答案