我正在尝试找到解决以下问题的最佳算法解决方案。这是一个现实世界的问题,但我将以抽象的方式呈现它。
有一个由1000人组成的社区。为每个用户提供一定数量的票证。票证有四种类型(每种票据对应不同的事件)。但是,有些人愿意进行交易(例如,我想要一张A票并愿意放弃两张B票)。此外,有些人有额外的门票,他们愿意无偿赠送(例如,我会给任何想要他们的人赠送两张C门票)。假设我知道每个人愿意放弃/交易的东西,我如何满足最多的人?
我尝试使用谷歌搜索,但我不知道如何解释这个问题,以避免得到与金融工具的算法交易相关的结果。
感谢。
答案 0 :(得分:0)
鉴于它有多个维度,它可能是NP完全问题。它与多维背包问题相似。
因此,我建议尝试回溯方法。
从参与交易的每个人开始。
对造成赤字下降最多的人进行排序(此处您可以通过每张罚单中的差额来衡量每种故障单类型造成的亏损)。
然后以一种回溯的方式,将导致下一个最高赤字人的人踢出交易。
重复直到你在任何一张罚单中都没有更多的缺陷(记录为可能的答案),或者你已经踢掉所有人。
当发生这种情况时,退回1步并继续(如果你已经尝试踢出最高的赤字,那么就会引发下一个最高的赤字导致的人)。
重复直到结束或你没时间。从您找到的可能答案中获得最佳答案。
如果问题太难,可能会耗尽时间。否则,这个算法应该给你一个合理的答案(可能接近最优)。
这种方法的运作方式取决于人们的慷慨/贪婪程度,有多少人以及计算机的速度。
答案 1 :(得分:0)
寻找二分最小权重匹配问题。我们的想法是仅使用顶点1 .. k找到从i到j的最短距离。