haskell - 回溯中状态修改的数据结构
问题描述
我正在编写我的第一个更大的 Haskell 程序。生成的应用程序必须在一组约束下分配资源。算法方法是蛮力的,因为为每个任务分配资源取决于先前的分配。这基本上是在每次分配后进行约束检查的回溯。我现在正在考虑应该使用哪些数据结构来使其尽可能高效。
程序的输出(值)是资源分配列表。StateT
可用资源集使用monad 转换器作为状态处理。状态是容器容器的容器:人的容器,每个容器有天的容器,每个容器都有分配时间的容器(在程序启动之前预先分配,或由程序分配)。
在寻找可行解决方案的过程中,当任务在特定日期特定时间分配给特定人员时,最低级别(分配时间)的容器将被修改。鉴于搜索可能会回溯很多次,这将导致大量不可变数据的“副本”。更具体地说,在每次状态更改期间,将恰好一个项目添加到最低级别的一个容器中:特定日期的一个时间将分配给特定的人。我的问题是:
考虑到不可变数据的大量副本,我应该使用哪种数据结构?
解决方案
推荐阅读
- ruby - Ruby 的 File.exist?没有立即看到网络文件?
- python - 使用 Dash Plotly 更新加载
- node.js - 提供静态文件时从不调用节点的 get() 函数
- sql - 在 where 子句中使用一个表中的日期和另一个表中的列
- coredns - 由于属性 max_concurrent,k8s coredns pod 显示 CrashLoopBackOff
- variables - 如何创建一个帐户/标签类型的变量来存储我的用户输入?
- android-studio - 如何将图像添加到具有背景的形状按钮?
- python - np.linalg.eig 为同一矩阵给出不同的特征向量
- java - 为什么将值放在 Entry 而不是 ThreadLocal 中?
- data-visualization - 如何用图像替换行值?