首页 > 解决方案 > 回溯中状态修改的数据结构

问题描述

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

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

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

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

标签: haskell

解决方案


推荐阅读