我正在编写一个有趣的算法来确定构建N个建筑物对象的最佳顺序。当然,每栋建筑都有自己的特色(如成本,生产,施工时间......)。基于这些特征,还存在对Building对象的总排序。
在我的动态编程中的某个时刻,我需要一个适应的数据结构来检索到目前为止所达到的最佳结果,以构建k(k <= N)Building。我需要这个数据结构以某种方式“映射”k大厦的集合(可能已经排序,因为构建建筑物b1然后是b2或b2然后b1离开我有相同的Nk建筑但很可能导致不同的状态)到到目前为止,“最佳状态”达到了目标。
我可能会使用简单的HashMap但它意味着重复包含相同元素的集合的次数很多,而不考虑[b1,b2]是[b1,b2,b3,b4]的子集合实例
我希望我在这个问题上做得足够清楚,感谢你的帮助:)。
答案 0 :(得分:0)
如果不了解解决方案的结构,就无法回答。
但是,如果k的解可以通过将建筑物b插入位置j从(k-1)的解来获得,那么你可以简单地将一个哈希映射映射到i的解决方案之间的“delta”和i-1的解决方案,由一对夫妇表达。
但是必须明确处理增量可能是可怕的,因为你需要遍历以获得解决方案。
你可以通过让delta知道引用的增量来解决这个问题(即,在delta的构造函数中传递(k-1)的增量为k),然后公开执行实际遍历的方法getSolution()
。
您可以将此想法扩展到类似的解决方案结构。
答案 1 :(得分:0)
您可以使用LinkedHashSet作为键,值是以迭代顺序构建集合中包含的Buildings的成本。这有点像黑客,但根据hashCode和等于它应该工作。您希望更明确地使用set的hashmap来配对成本和构建顺序。
答案 2 :(得分:0)
如果您的解决方案看起来像ABC,cost1,ABCD,cost2,则创建链接列表d-&gt; C-&GT; B-&GT;一个。将解决方案存储为成本元组,并引用解决方案中包含的最后一个元素(列表中最早的元素)