我正在编写一个算法来确定构建N个Building对象的最佳顺序。当然,每栋建筑都有自己的特点(如成本、生产、施工时间等)。也存在基于这些特点的建筑对象的总排序。
在我的动态编程中的某个时刻,我需要一个自适应的数据结构来检索迄今为止达到的最佳结果,以构建k(k<=N)Building。我需要这个数据结构以某种方式将k栋建筑的集合"映射"到迄今为止的"最佳状态"。
我可能会使用简单的HashMap,但这意味着要重复大量包含相同元素的集合,而不考虑[b1,b2]是[b1,b2,b3,b4]的子集合。
我希望我在这一点上说得足够清楚,我感谢你的帮助:)
如果不知道解决方案的结构,就不可能回答。
但是,如果k的解可以通过将建筑b插入位置j从(k-1)的解中获得,那么你可以简单地使用散列映射将整数i映射到i的解和i-1的解之间的"delta",用一对表示。
但是,必须明确处理delta可能很可怕,因为您需要进行遍历才能获得解决方案。您可以通过让delta知道引用的delta来解决这个问题(即,在delta for k的构造函数中传递(k-1)的delta),然后公开执行实际遍历的方法getSolution()
。
您可以将此想法扩展到类似的解决方案结构。
您可以使用LinkedHashSet作为密钥,其值是按迭代顺序构建集合中包含的Buildings的成本。这有点像黑客,但根据hashCode和equals,它应该可以工作。如果你更喜欢更明确地使用成本和构建顺序的集合到对的哈希图。
如果您的解决方案看起来像ABC、cost1、ABCD、cost2,请创建一个链表d->c->b->a。将解决方案存储为成本元组,并引用解决方案中包含的最后一个元素(列表中最早的)