回溯中用于状态修改的数据结构

时间:2018-08-30 16:16:44

标签: haskell

我正在编写第一个较大的Haskell程序。生成的应用程序必须在一组约束下分配资源。该算法方法是蛮力的,因为为每个任务分配资源取决于先前的分配。这基本上是在每次分配后通过约束检查进行回溯。我现在正在考虑应该使用哪种数据结构来使其尽可能高效。

程序的输出(值)是资源分配的列表。使用StateT monad转换器将可用资源集作为状态进行处理。该状态是一个包含多个容器的容器:一个人的容器,每个人都有一个天的容器,每个人都有一个已分配时间的容器(在程序启动之前预先分配,或者由程序分配)。

在寻找可行解决方案的过程中,当在特定日期的特定日期,特定时间将任务分配给特定人员时,将修改最低级别(分配时间)的容器。鉴于搜索可能会大量回溯,这将导致大量不可变数据的“副本”。更具体地讲,在每次状态更改期间,恰好一个项目将被添加到最低级别的恰好一个容器中:特定日期的一次将分配给特定的人。我的问题是:

鉴于大量不可变数据的副本,我应该使用哪种数据结构?

0 个答案:

没有答案